2013-06-23 38 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领域了吗? –