OpenGL - 创建一个圆,改变半径?

时间:2013-06-23 07:20:30

标签: opengl python-2.6 vertex pyglet

在数学方面,我必须是这个星球上最糟糕的人,因为我无法弄清楚如何改变这个圆半径:

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-1 http://fly.cc.fer.hr/~unreal/theredbook/chapter04.html

澄清:这有效,我对为什么以及如何修改半径感兴趣。

2 个答案:

答案 0 :(得分: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)的中心(因为sin ^ 2(角度)+ cos ^ 2(角度)= 1)。

如果你想将半径改为R,你只需将cos和sin乘以R。

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

如果您想将圆圈转移到另一个位置(例如,您希望圆圈的中心位于(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

答案 1 :(得分:0)

数学:P = pr ^ 2 = p * r * r = p * r * 2编程i*2*pi/sides
在一起:i = p i*2*2 = r ^ 2这应该可以帮到你