我正在尝试在OpenGL中编写编织模式的代码。 Weaving Pattern Pic
现在,我正在尝试使用圆圈为类似的模式编写代码。 我使用点绘制一个圆,每个点使用cos和sin函数绘制。 我知道这不像SeigeLord的方法那样有效,因为它可以更好地利用资源。 我能够得到圆圈,我想在圆周上得到点。
我的代码:
#include<GL/glut.h>
#include<stdio.h>
#include<math.h>
int n, r;
void display()
{
int i, j;
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-50, 50, -50, 50);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
for (i = 0;i <= 360;i += 1)
{
glBegin(GL_POINTS);
glVertex2f(r*cos(i), r*sin(i));
glEnd();
}
/*for (i = 0;i < 360;i += 10)
{
glBegin(GL_LINES);
glVertex2f(r*cos(i), r*sin(i));
glVertex2f(r*cos(i + 300), r*sin(i + 300));
glEnd();
}*/
glFlush();
}
int main(int argc, char **argv)
{
r = 30;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(300, 50);
glutInitWindowSize(800, 800);
glutCreateWindow("Cylinder");
glutDisplayFunc(display);
glutMainLoop();
}
我尝试使用注释代码在相隔300度的点之间获取线条,每隔10度点进行一次。(它相隔3度看起来很好)。 现在,这显然不起作用,因为我们使用三角函数,它不会平均分配点。
我希望你理解我的问题,我如何才能在圆圈上获得分数?
我认为可能有效的一个解决方案是,在绘制点本身时,如果我使用数组来保存每个第n个点,我可能得到等距点。我对吗?有没有其他方法来获得积分?
如果我在上面的任何地方出错了,请纠正我,我只是新手。
答案 0 :(得分:0)
请注意,sin和cos以弧度(即0到2 * pi)输入,而不是度(0到360)。所以你的代码应该是
for (i = 0;i <= 360;i += 1)
{
glBegin(GL_POINTS);
glVertex2f(r*cos(i * (M_PI / 180.)), r*sin(i* (M_PI / 180.)));
glEnd();
}
修改强>
要获得N等距点,我们必须将它们(1 / N)的一部分放在彼此远离的位置:
for (i = 0;i < N;i += 1)
{
double angle = i * (2.0 * M_PI / N);
glBegin(GL_POINTS);
glVertex2f(r*cos(angle), r*sin(angle));
glEnd();
}