【发布时间】:2014-08-24 17:15:26
【问题描述】:
我是 Java 编程新手,我得到的练习之一(我们被允许并鼓励寻求外部帮助)是在 Panel(不是 JPanel)中绘制像素做不同的事情。
我特别遇到了两个问题,围绕面板周边跟踪一行像素并创建了一个望远镜设计(跟踪一个圆圆周上的一个点,该点围绕另一个圆圆周上的一个点旋转.)
我已经使一些基本功能正常工作,但两者都存在问题。谁能看到我的错误?
这是我的代码和问题:
围绕周边的框 - 像素从左上角开始,从顶部到右上角,向下到右下角,从底部到左角,然后卡在那里:
drawBox(panel);}
public static void drawBox(Display panel) {
int x = 1;
int y = 1;
while (x != 0 && y != 0){
if (x < panel.getWidth() && y == 1){
panel.drawNextPixel(x, y);
x++;
}else if (x == panel.getWidth() && y != panel.getHeight()){
panel.drawNextPixel(x, y);
y++;
}else if (x != 0 && y == panel.getHeight()){
panel.drawNextPixel(x, y);
x = x-1;
}else if (x == 0 && y == panel.getHeight()){
panel.drawNextPixel(x, y);
y = y - 1;
}
}
现在,对于圆圈上的圆圈 - 我的看起来并不像它应该的那样 - 就像我上面提到的那样。相反,它只是画了一个圆圈,但我相信这个等式是正确的。我在这里做错了什么?
drawCircles(panel); }
public static void drawCircles(Display panel) {
int p = 250; // starting postion
int R = 10; // radius of large circle
int r = 5; // radius of small circle
double x = 10;
double y = 10;
for (double t = 0.0; t < 100; t += 0.01) {
x=(R+r)*Math.cos(t) + p*Math.cos((R+r)*(t/r));
y=(R+r)*Math.sin(t) + p*Math.sin((R+r)*(t/r));
double degrees = -Math.toDegrees((R+r)/r)*t;
panel.drawNextPixel((int)x, (int) y);
}
}
【问题讨论】:
-
一个stackoverflow.com/help/mcve 在这里会很好。快速浏览代码:当所有变量都是
int类型时,像(R+r)/r这样的东西可能不会产生预期的结果。例如。像10/6这样的东西将是0,因为结果被截断为int。如果合适,请考虑将变量更改为double。