2012-09-11 35 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'的最大可能值。不過,我想知道,導師沒有意識到通常的浮點問題。 –