在圆圈上的openGL中获得彼此等距的点

时间:2016-03-11 19:04:10

标签: opengl geometry

我正在尝试在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个点,我可能得到等距点。我对吗?有没有其他方法来获得积分?

如果我在上面的任何地方出错了,请纠正我,我只是新手。

1 个答案:

答案 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();
}