我使用OpenGL
和glut
使用glBegin(GL_TRIANGLE_FAN);
函数创建正五边形。但问题是,我的形状不规则,因为它会从中心创建每个三角形。
// Draw traingle fan
glBegin(GL_TRIANGLE_FAN);
//Send the vertices and colors for the pentagon
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 0.0f);
glVertex3f(-3.0f, -0.5f, 0.0f);
glVertex3f(-1.5f, -3.0f, 0.0f);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertex3f(1.0f, -2.0f, 0.0f);
glColor4f(0.1f, 0.9f, 0.3f, 1.0f);
glVertex3f(2.0f, 2.0f, 0.0f);
glEnd();
我知道五角大楼的工作原理和方式。即 -
但我发现很难实现它。
答案 0 :(得分:1)
最简单的方法是像任何其他常规n-gon一样绘制它:在圆上均匀分布n个点。
您可以在极坐标空间中生成点,每个点具有相同的半径,并为每个点增加角度(360 / n)。
大致是:
float angleIncrement = 360.0f / n; // n is 5 in your case
angleIncrement *= M_PI / 180.0f; // convert degrees to radians
glBegin(GL_TRIANGLE_FAN);
float angle = 0.0f;
for (k = 0; k < n; ++k) {
glVertex3f(radius * cos(angle), radius * sin(angle), 0.0f);
angle += angleIncrement;
}
glEnd(GL_TRIANGLE_FAN);
由于这使用半径作为基本输入参数,如果给出边长,则必须做一些数学运算。如果您以图形方式查看关系,则可以得出这样的关系(其中s
是边长,r
半径,a
角度为angleIncrement
in上面的代码):
(s / 2) / r = sin(a / 2)
s / 2 = r * sin(a / 2)
r = s / (2 * sin(a / 2))