2

これがコードです。意図した効果が得られていないと思います。

package lines;

import sedgewick.StdDraw;

public class Lines {


    public static boolean equals(double d1, double d2){
        if(Math.abs(d2-d1) < 0.00001)
            return true;
        return false;
    }

    public static void drawLine(double x1, double y1, double x2, double y2) {
        if(equals(x1,x2) && equals(y1,y2))
            return;

        double mid_x = (x2+x1)/2;
        double mid_y = (y2+y1)/2;

        drawLine(x1,y1,mid_x,mid_y);
        drawLine(mid_x+0.001,mid_y+0.001,x2,y2);

        StdDraw.point(mid_x, mid_y);

    }


    /**
     * Code to test the drawLine method visually
     */
    public static void main(String[] args) {
        StdDraw.setPenRadius(0.02);

        //
        // Test the drawing program
        //
        drawLine(0,0,1,1); // lower left to upper right
        drawLine(0,1,1,0); // upper left to lower right

        //
        // Draw rectangles of decreasing width and height
        //
        for (double r = 0.25; r < 0.5; r = r+.005) {
            double s = 1-r;
            drawLine(r,r, r, s);
            drawLine(r, s, s, s);
            drawLine(s, s, s, r);
            drawLine(s, r, r, r);
        }
        System.out.println("done drawing");
    }

}

これが私には理解できない結果です。

http://grab.by/rUM0

4

2 に答える 2

1

まず第一に、あなたがしていることは本当にクールだと思います。

実際の答えを得るには、Swing がどのように描画するかを調べる必要があります。画像は単なるピクセルの配列です。ただし、ピクセルは、直感的に考えられるように配置されていません。こんなものだろうと思われるでしょう。

y
^
|
|
1
|
0--1-----> x

実際には、このようなものです。

0--1-----> x
|
1
|
|
v
y

私の ASCII 描画はあまり多くないので、これが明確であることを願っています。y 軸は反転していますが、x 軸は反転していません。ほとんどの人は、Java で描画を初めて使用するときに、ある種のデバッグを通じてこれを見つける必要があります。

コードを振り返ってみると、私が描いた 2 番目の「図」でコードを視覚化すると、今でははるかに理にかなっていることがわかります。

編集: どうやら私が間違っていたようです、申し訳ありません。この行に問題があります。

drawLine(mid_x+0.001,mid_y+0.001,x2,y2);

「+0.001」を削除する必要があると思います

しかし、これは私が間違っていた理由ではありません。コードを実行しようとしましたが、スタック オーバーフロー エラーが発生しました。equals メソッドをこのようなものに変更した後。

public static boolean equals(double d1, double d2){
    if(Math.abs(d2-d1) < 0.1)
        return true;
    return false;
}

これでプログラムを実行できるようになり、完璧な結果が得られました。何が問題だったのかわかりません。

于 2013-11-11T08:22:19.560 に答える