OpenGl隐式圆函数——不完全圆

OpenGl隐式圆函数——不完全圆,opengl,Opengl,我画一个圆圈有点问题。函数画了一个几乎完整的圆,我只是缺少了一点点的循环。我假设这个问题与自动重画某些东西有关 下面是函数 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 <= ra

我画一个圆圈有点问题。函数画了一个几乎完整的圆,我只是缺少了一点点的循环。我假设这个问题与自动重画某些东西有关

下面是函数

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);
}
for(x=radius;x>=-radius;x-=0.05)//绘制绘图
{   
双温度=(半径*半径)-(x*x);
y=sqrt(温度);
glVertex2f(x,y);
}

对于(x=-radius;x我认为您遇到的只是一个浮点精度问题。您假设您的x值正好位于每个循环结束时的
-radius
(或
radius
),这可能不是由于所有加法的累积舍入误差造成的


这在
-radius
是没有问题的,因为它与第二个循环的开始合并,但是在最后它不会在
radius
结束。试着把整个事情变成
GL\u LINE\u循环
而不是
GL\u LINE\u STRIP
来将第一个和最后一个顶点合并成一条线。

同样,这是在
glBegin中吗(GL\u LINE\u LOOP)
?对不起,我刚读了你的链接..纯粹的无知…我绝对会开始注意…这是一个glBegin(GL\u LINE\u条带)链接到图像可能会有帮助。将最后一个顶点和第一个顶点连接起来。
GL\u LINE\u LOOP
。看看这是否解决了你的问题。你是只需要画一个圆,还是必须使用隐式方程来做这件事?我今天和导师一起坐下来研究了这件事……我们发现,减少x的增量或减量nted很重要…数字越小,我们就越接近x轴。但我们从来没有让它闭合。我尝试了线_循环,但由于我把圆画成两半,它最终循环回到起点,所以我最终得到了一个嘴巴很小的吃豆人。如果我能找到它,我会更新!@calvarado不,你不应该得到吃豆人,而是circle.至少如果代码中的两个循环都在一个
glBegin/glEnd
中,而不是两个单独的循环中,因为首先从0运行到180,然后从180返回到0,所以它应该与一个
GL_LINE_循环
一起工作。事实上,当减少添加到
x
的量时,差距会变小,这与我的表达式完全匹配四舍五入错误的国家,因为这个数量标志着最后一个
x
值可能“遗漏”
radius
的最大可能数量。但我想知道,有什么mentor不知道常见的浮点问题。