2013-06-23 50 views
2

我一定是這個星球上最壞的人,當涉及到數學,因爲我無法弄清楚如何改變這種圓半徑:OpenGL - 創建一個圓,改變半徑?

from math import * 
posx, posy = 0,0 
sides = 32 
glBegin(GL_POLYGON) 
for i in range(100): 
    cosine=cos(i*2*pi/sides)+posx 
    sine=sin(i*2*pi/sides)+posy 
    glVertex2f(cosine,sine) 

我不完全知道如何或爲何這成爲一個圓因爲*2讓我困惑了一下。 請注意,這是在Python2.6下調用OpenGL庫的Pyglet中完成的。

其次例4-1http://fly.cc.fer.hr/~unreal/theredbook/chapter04.html

澄清:這工作,我感興趣的是,爲什麼和如何修改半徑。

回答

2

這應該做訣竅:)

from math import *  
posx, posy = 0,0  
sides = 32  
radius = 1  
glBegin(GL_POLYGON)  
for i in range(100):  
    cosine= radius * cos(i*2*pi/sides) + posx  
    sine = radius * sin(i*2*pi/sides) + posy  
    glVertex2f(cosine,sine) 

但我會爲變量選擇另一個名稱。餘弦和正弦不完全是這些變量。 據我所知,你不需要從1到100(或從0到99,我不太擅長Python)的循環,你只需要從1到兩邊的循環。

說明: 當計算

x = cos (angle) 
y = sin(angle) 

你與半徑= 1的圓的點,並且中心在點(0; 0)(因爲罪^ 2(角)+ COS^2(角度)= 1)。

如果你想改變一個半徑爲R,你只需R.

x = R * cos (angle) 
y = R * sin(angle) 

如果你想圓轉移到另一個位置乘COS和sin(例如,你想圓有它的中心在(X_centre,Y_centre),添加X_centre和Y_xentre x和y相應:

x = R * cos (angle) + X_centre 
y = R * sin(angle) + Y_centre 

當你需要通過N個點上的圓環形(在你的情況下,N =邊),你應該改變每次迭代的角度,所有這些角度應該是相等的,它們的總和應該是2 * pi。所以每個角度應該等於2 * pi/ N。要獲得第i個角度,請將該值乘以i:i * 2 * pi/N

+2

我向你和你時髦的大腦致敬:)它像一個時鐘一樣工作,我學得比我自己手上的速度還快,所以謝謝你! – Torxed

+0

你完全正確,for循環應該只循環遍歷'num(sides)',其他任何東西都是過度的,在我的腦海中,循環產生了圓周的度數(這是不符合邏輯的,我知道會想到它:) :) – Torxed

+0

我的榮幸! :) – FreeNickname

0

數學:P = PR^2 = P * R * R = P * R * 2編程i*2*pi/sides
在一起:i = P i*2*2 = R^2這個應該可以幫助您

+0

給我一天,我可能會但是atm這有點模糊,會是什麼,我爲什麼提高它與2('PR^2')?我會在哪裏使用'P'?再看一遍,我認爲這只是數學如何工作的解釋,但你的答案語法讓我失望。 – Torxed

+0

P等於(i * 2 * pi/siedes)現在你明白這是Circle領域了嗎? –