数学的魅力 之 正多边形
之前上的数学课觉的老师讲的只是一些理论,感到没有意思,但是发现计算机中最重要的还是数学。不多说了献上今天讲的内容、
每一个正n边型的内角都等于((n-2)*180°))/n(其中n表示正n变形的边数)
个人的理解:每个正n边型有n个等腰三角形,得到每个三角形对应的顶角为(360°/n)(你表示底边),再将三角型从定点向下做垂线再将三角型分成两个直角三角形,此时顶角的公式变成(180°/n)。正n边行的边长为an = 2Rsin(180°/n),所以周长为c=2nRsin(180°/n)
在计算正多边形的时候还可以使用有公式为[Rcos(2PIi/n),Rsin(2PIi/n)] 其中2PI/n(个人理解为每次步进的角度,当n为4变形的时候,每次旋转的角度为PI/2,即90°,当n为8的时候,每次旋转的角度为2PI/8,即45°),每次通过循环变量i进行控制所转到的位置,从而确定要绘制的点的位置。献上代码
int n=3600; //圆绘制次数
float PI=3.1415926f;
float R=0.8f; //半径
void myDisplay(void)
{
//画圆
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0,0,0,0);
glColor4f(0,0,1,0);
glBegin(GL_POLYGON);
for(int i=0;i<n;i++)
{
glVertex2f(R*cos(2*PI*i/n),R*sin(2*PI*i/n)); //定义顶点
}
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("My first OpenGL program");//显示文本框的名称
glutDisplayFunc(&myDisplay); //回调函数
glutMainLoop(); //持续显示,当窗口改变会重新绘制图形
return 0;
}
结果如下图:
其中元的显示样式由n的大小决定,当n的值越大的时候,显示的圆形越圆。