1

Bresenham Circle 描画アルゴリズムを Java で実装しました。しかし、出力は正しく描画されません! 問題がどこにあるのかわかりません。

私のコードと出力画像を以下に示します。どんな助けでも大歓迎です。

public void display(GLAutoDrawable drawable) {
    final GL2 gl = drawable.getGL().getGL2();
    gl.glBegin (GL2.GL_POINTS);
    double radius = 0.6;//sc.nextDouble();
    double x =0.0;
    double y = radius;
    gl.glVertex2d(0.0,0.0);
    gl.glVertex2d(x,y);
    gl.glVertex2d(-x,y);
    gl.glVertex2d(x,-y);
    gl.glVertex2d(-x,-y);
    gl.glVertex2d(y,x);
    gl.glVertex2d(-y,x);
    gl.glVertex2d(y,-x);
    gl.glVertex2d(-y,-x);
    double d = 5 - 4*radius;
    while(x<y){
        if(d<0){ //dE

            x+=.01;
            d+=(2*x + 3)*4;
        }else{

            x+=.01;
            y-=.01;
            d+=(2*x - 2*y +5)*4;
        }
        gl.glVertex2d(x,y);
        gl.glVertex2d(-x,y);
        gl.glVertex2d(x,-y);
        gl.glVertex2d(-x,-y);
        gl.glVertex2d(y,x);
        gl.glVertex2d(-y,x);
        gl.glVertex2d(y,-x);
        gl.glVertex2d(-y,-x);

    }
    gl.glEnd();
}

ここに画像の説明を入力

4

3 に答える 3

0

これを試して。現在使用しているコンピューターに Java がないので、動作するかどうか見てみましょう。正規化しているのはブロックサイズであるため、必ず整数で作業してください!

編集:整数を追加しました。

public void display(GLAutoDrawable drawable) {
    final GL2 gl = drawable.getGL().getGL2();
    gl.glBegin (GL2.GL_POINTS);
    double radius = 0.6;//sc.nextDouble();
    double x =0.0;
    double y = radius;
    gl.glVertex2d(0.0,0.0);
    gl.glVertex2d(x,y);
    gl.glVertex2d(-x,y);
    gl.glVertex2d(x,-y);
    gl.glVertex2d(-x,-y);
    gl.glVertex2d(y,x);
    gl.glVertex2d(-y,x);
    gl.glVertex2d(y,-x);
    gl.glVertex2d(-y,-x);
    double d = 3 - 2*radius;
    while(x<y){
        x++;
    if(d<0){ //dE

        d= d + 4x + 6;
    }else{

        y--;
        d= d+ 4(x - y) + 10;
    }
    gl.glVertex2d(x,y);
    gl.glVertex2d(-x,y);
    gl.glVertex2d(x,-y);
    gl.glVertex2d(-x,-y);
    gl.glVertex2d(y,x);
    gl.glVertex2d(-y,x);
    gl.glVertex2d(y,-x);
    gl.glVertex2d(-y,-x);

}
gl.glEnd();
}
于 2016-02-13T18:43:09.963 に答える