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

标签 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 下的 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/

相关文章:

opengl - 找不到 glXCreateContextAttribsARB

c++ - 我的长方体哪里出了问题?

python2.6.6 将apache日志时间戳转换为纪元以来的秒数(unix风格)

python - 处理推文时使用 JSON 或正则表达式

python - 如何检查我是否在Python的shell(有终端)中运行?

c++ - 使用边缘检测计算三角几何中的顶点法线

algorithm - 找到一个顶点,其移除会断开另外两个顶点

c - OpenGL - 圆圈绘制不平滑

qt - 将 Qt GUI 嵌入到现有的 OpenGL 程序中

c - 显示某些内容需要 Mac OpenGL 窗口移动