2

说到数学,我一定是这个星球上最糟糕的人,因为我不知道如何改变这个圆的半径:

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

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

4

2 回答 2

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(angle) + cos^2(angle) = 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

于 2013-06-23T07:37:58.730 回答
0

数学:P=pr^2=p*r*r= p*r*2i*2*pi/sides
一起编程:i= p i*2*2=r^2 这应该对你有帮助

于 2013-06-23T07:28:14.467 回答