【问题标题】:Drawing in a Java Panel在 Java 面板中绘图
【发布时间】: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

标签: java panel draw


【解决方案1】:

所以,在第一个中:

我想你可能是想把

else if (x == 0 && y != 0) {

最后一个 else if。

因为在通过第三个 if 子句 x == 0y == panel.getHeight() 之后,再经过 1 次迭代之后,x == 0y == panel.getHeight() - 1。这些变量值既不满足 if 子句也不满足 while exit 子句,从而创建了一个无限循环。上面描述的 if 子句一直有效,直到 y 到达屏幕的上边缘。

仅供参考,这里有几个 for 循环会更好,因为您确切知道每行需要执行多少步。第一个 if 子句,或创建跨越顶部的行的子句是:

for (int x = 0; x < panel.getWidth(); x ++) {
    panel.drawNextPixel(x, 0);

另外,x = x - 1 等价于x --

对于第二个,我对螺旋计了解不多,更不用说它们的方程式了。尝试做一些研究并对照几个站点检查您的方程式。 (This site 似乎对您正在尝试做的事情特别有帮助。)如果合适的话,还请采纳 Marco13 的建议并将变量更改为 double

【讨论】:

    猜你喜欢
    • 2014-11-28
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多