opengl求圆坐标glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i))中2*Pi/n*i的原理是什么,哪位高手能讲解上
opengl求圆坐标glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i))中2*Pi/n*i的原理是什么,谁能讲解下?
大家看红色标注的代码:
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i))
这个函数我知道什么意思,R*cos(2*Pi/n*i)代表X的坐标,R*sin(2*Pi/n*i)代表Y的坐标,
我对这个算法搞不明白,尤其是2*Pi/n*i这个是啥意思啊?
各位知道的,可否点明一二呢,在此不胜感激啊。
------解决方案--------------------
1、圆可以通过圆上首尾相接的线段去逼近,当线段足够多时看上去就是圆了
2、(R*cos(2*Pi/n*i),R*sin(2*Pi/n*i)),代表向量(R,0)旋转2*Pi/n*i弧度后的坐标
3、n表示使用的线段数量,用不着1000,一般100就足够了
------解决方案--------------------
以前我不懂得时候我就把R*cos(2*Pi/n*i)和sin的结果用计算器算出来,在本子上画个坐标大致看这个点在哪,然后在算下一个点在哪,把两个点连起来你就知道圆是怎么画出来了,你在把1000改小一点,你就能明白了,当你明白后会用就够了!
- C/C++ code
#include <windows.h> #include <glut.h> #include <glext.h> #include <time.h> #include<math.h> const int n = 1000; const GLfloat R = 0.5f; const GLfloat Pi = 3.1415926536f; void DrawCircle() { int i; glBegin(GL_LINE_LOOP); for(i=0; i<n; ++i) [color=#FF0000]glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));[/color] glEnd(); glBegin(GL_LINES); glColor3f(1, 0, 0); glVertex3f(0, 0, 0); glVertex3f(1.2*R, 0, 0); glColor3f(0, 1, 0); glVertex3f(0, 0, 0); glVertex3f(0, 1.2*R, 0); glEnd(); glFlush(); } void myDisplay() { glClear(GL_COLOR_BUFFER_BIT); DrawCircle(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("Draw a circle"); glutDisplayFunc(myDisplay); glutMainLoop(); return 0; }
大家看红色标注的代码:
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i))
这个函数我知道什么意思,R*cos(2*Pi/n*i)代表X的坐标,R*sin(2*Pi/n*i)代表Y的坐标,
我对这个算法搞不明白,尤其是2*Pi/n*i这个是啥意思啊?
各位知道的,可否点明一二呢,在此不胜感激啊。
------解决方案--------------------
1、圆可以通过圆上首尾相接的线段去逼近,当线段足够多时看上去就是圆了
2、(R*cos(2*Pi/n*i),R*sin(2*Pi/n*i)),代表向量(R,0)旋转2*Pi/n*i弧度后的坐标
3、n表示使用的线段数量,用不着1000,一般100就足够了
------解决方案--------------------
以前我不懂得时候我就把R*cos(2*Pi/n*i)和sin的结果用计算器算出来,在本子上画个坐标大致看这个点在哪,然后在算下一个点在哪,把两个点连起来你就知道圆是怎么画出来了,你在把1000改小一点,你就能明白了,当你明白后会用就够了!