for循环创建一个archimedean螺旋的麻烦

时间:2013-04-04 13:58:28

标签: java loops for-loop infinite

我无法找到我的程序出了什么问题。当我执行它时,它似乎陷入无限循环(或类似的东西),我无法弄清楚我的程序有什么问题。这是我到目前为止所做的:

public class Spiral extends JComponent{

int WIDTH = 0;
int HEIGHT = 0;


public Spiral(int WIDTH, int HEIGHT) {
    this.WIDTH = WIDTH;
    this.HEIGHT = HEIGHT;
}


 public void paintSpiral(Graphics g){
    double a = 3;
    double b = 0;
    double t = 0;
    double theta = Math.toRadians(t);
    double r = theta * a + b;
    double pi = Math.PI/180;
    double end = 720 * pi;

    int middle_x = WIDTH / 2;
    int middle_y = HEIGHT / 2;

    for (theta = 0; theta < end; theta += pi) {
        double x = Math.cos(theta) * r + middle_x;
        double y = Math.sin(theta) * r + middle_y;
        int xx = (int) Math.round(x);
        int yy = (int) Math.round(y);
        g.drawLine(xx, yy, xx + 10, yy + 20);
    }


}

public void paintComponent(Graphics g) {
    paintSpiral(g);
}

public static void main(String[] args) {
    int WINDOW_WIDTH = 1024;
    int WINDOW_HEIGHT = 1024;

    JFrame frame = new JFrame();

    frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);

    // Set the title of the window
    frame.setTitle("Archimedean Spiral");

    // Make a new Spiral, add it to the window, and make it visible
    Spiral d = new Spiral(1024, 1024);
    frame.add(d);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

我必须使用Graphics,这就是为什么我让Math.round将x值更改为整数所以我可以实际绘制线条。这就是我怀疑的问题,但我似乎无法修复它。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

循环变量t的类型为int,因此t += pi实际上是无操作,导致无限循环。

t应为double类型。此外,它应该是paintSpiral的本地而不是该类的成员。我不明白为什么你使用t(零)来初始化r

此外,你的学位和弧度似乎都很困惑。