您的位置:首页 > 编程语言

opengl 五角星画法 源代码

2013-11-03 11:29 141 查看
设五角星的五个顶点分布位置关系A,B,C,D,E(顺时针顺序)

首先,根据余弦定理列方程,计算五角星的中心到顶点的距离a

(假设五角星对应正五边形的边长为1.0)

a = 1 / (2-2*cos(72*Pi/180));

然后,根据正弦和余弦的定义,计算B的x坐标bx和y坐标by,以及C的y坐标(五角星的中心在坐标原点)

bx = a * cos(18 * Pi/180);

by = a * sin(18 * Pi/180);

cy = -a * cos(18 * Pi/180);

准备条件完成!

#include <GL/glut.h>

#include <math.h>

const GLfloat Pi = 3.1415926536f;

void five_point_star(void)

{

    GLfloat a = 1 / (2-2*cos(72*Pi/180));

    GLfloat bx = a * cos(18 * Pi/180);

    GLfloat by = a * sin(18 * Pi/180);

    GLfloat cy = -a * cos(18 * Pi/180);

    //表示5个点

    GLfloat

        PointA[2] = { 0, a },

        PointB[2] = { bx, by },

        PointC[2] = { 0.5, cy },

        PointD[2] = { -0.5, cy },

        PointE[2] = { -bx, by };

    glClear(GL_COLOR_BUFFER_BIT);

    // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出

    glColor3f(0.0f,1.0f,0.0f);

    glBegin(GL_LINE_LOOP);

        glVertex2fv(PointA);

        glVertex2fv(PointC);

        glVertex2fv(PointE);

        glVertex2fv(PointB);

        glVertex2fv(PointD);

    glEnd();

    glFlush();

}

int main(int argc,char *argv[]){

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);

    glutInitWindowPosition(100,100);

    glutInitWindowSize(400,400);

    glutCreateWindow("五角星");

    glutDisplayFunc(&five_point_star);

    glutMainLoop();

    return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl 源代码 五角星