在数学方面我一定是这个星球上最差的人,因为我不知道如何改变这个圆的半径:
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 下的 Pyglet 中调用 OpenGL 库完成的。
遵循示例4-1:http://fly.cc.fer.hr/~unreal/theredbook/chapter04.html
澄清:这有效,我对为什么以及如何修改半径感兴趣。
最佳答案
这应该可以解决问题:)
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
。
关于OpenGL - 创建一个圆,改变半径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17258546/