0

円を描くのに少し問題があります。関数はほぼ完全な円を描画しますが、ループのほんの一部が欠けています。問題は何かの自動再描画と関係があると思いますか?

ここに関数があります

for(x = radius; x >= -radius; x -= 0.05)     // draw the plot
{   
    double temp = (radius * radius) - (x * x);
    y = sqrt(temp);
    glVertex2f(x, y);
}
for(x = -radius; x <= radius; x += 0.05)     // draw the plot
{   
    double temp = (radius * radius) - (x * x);
    y = sqrt(temp);
    glVertex2f(x, -y);
}

他のコードは役に立ちますか?

4

1 に答える 1

1

あなたが経験しているのは、浮動小数点の精度の問題だと思います。x 値が各ループの最後に正確に-radius(またはradiusそれぞれ) 移動すると仮定しますが、これはおそらく、すべての追加から累積された丸め誤差によるものではありません。

とにかく 2 番目のループの開始とマージされるので、これは で問題ありません-radiusが、最後に で終了しませんradius。最初と最後の頂点を線にマージするために、全体を aGL_LINE_LOOPではなくa にするようにしてください。GL_LINE_STRIP

于 2012-09-11T15:59:14.493 に答える