2012-09-11 34 views
0

我在绘制圆圈时遇到了一个小问题。该函数绘制了一个几乎完整的圆,我只是缺少一点循环。我假设这个问题与自动重绘的东西有关?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 <= radius; x += 0.05)  // draw the plot 
{ 
    double temp = (radius * radius) - (x * x); 
    y = sqrt(temp); 
    glVertex2f(x, -y); 
} 

是否有任何其他的代码是有帮助的?

+1

另外,这是在'glBegin(GL_LINE_LOOP)'? – Shahbaz

+0

对不起,我刚刚阅读你的链接..纯粹的无知......我绝对会开始关注......这是一个glBegin(GL_LINE_STRIP) –

+0

一个图像的链接可能会有所帮助。 – Tim

回答

1

我认为你正在经历的只是浮点精度问题。你假设你的x值在每个循环结束时精确到-radius(或重复地为radius),这可能不是由于所有添加累积的舍入误差。

这是-radius,因为它与第二个循环的开始合并,但最后它不会在radius结束。尝试使整个事件为GL_LINE_LOOP而不是GL_LINE_STRIP将第一个和最后一个顶点合并为一行。

+0

我今天和我的导师坐在一起工作......我们发现减少x增加或减少的数量非常重要...数字越小,我们越接近x轴。但我们从来没有完成。我尝试了LINE_LOOP,但是由于我将圈子划分了一半,因此它最终会循环回到开头,所以我最终得到了一个口袋很小的pacman。我会更新,如果我能弄明白的话! –

+0

@calvarado不,你不应该得到一个pacman,而是一个圆圈。至少如果你的代码中的两个循环都在一个单独的'glBegin/glEnd'中,而不是两个单独的循环,因为首先你从0运行到180,然后从180运行到0,所以它应该可以用一个GL_LINE_LOOP '。实际上,当减少添加到'x'的数量时,差距越来越小,这与我舍入误差的表达式完全一致,因为这个数值表示最后一个'x'值可能“错过”'radius'的最大可能值。不过,我想知道,导师没有意识到通常的浮点问题。 –