0

プログラムの何が問題なのかを見つけるのに苦労しています。実行すると、無限ループ (または同様のもの) に陥ったように見え、プログラムの何が問題なのかわかりません。これが私がこれまでに持っているものです:

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 値を整数に変更して、実際に線を描画できるようにしています。それが問題だと思いますが、修正できないようです。助言がありますか?

4

1 に答える 1

3

ループ変数tの型intは であるため、t += pi事実上ノーオペレーションであり、無限ループが発生します。

tタイプである必要がありdoubleます。paintSpiralさらに、クラスのメンバーではなく、ローカルでなければなりません。t初期化に(ゼロ)を使用している理由がわかりませんr

また、あなたの度とラジアンはすべて混乱しているようです.

于 2013-04-04T14:11:42.977 に答える