这学期开了门《计算机图形学》,学了三周了,学会一些绘图的方法。 实验要求绘制一个六边形,我想绘制一个五角星。
算出每个顶点的坐标就可以了,然后用GL_PLOYGON模式将几个顶点连接就可以了。
不过坐标千万千万要表示对!!! 认真点!!! 否则浪费的时间会很多! 至少影响了我的睡眠,昨晚到三点才睡,今天和别人交流后发现自己的方法没有错,只是不小心忘了給五角星下面的两个点纵坐标加负号了.
参照左边草图在纸上表示出了各个顶点的坐标。
最后总算出来了结果。
贴出代码:
#include <GL/glut.h>
#include <cmath>
void Display(void)
{
//表示出各个点的坐标,设半径 R=0.2
const double PI = acos(0.) * 2;
double L1=0.2*cos(36*PI/180);
double L2=0.2*sin(36*PI/180);
double L3=0.2*cos(72*PI/180);
double L4=0.2*sin(72*PI/180);
double L5=L2*tan(72*PI/180);
double L6=L2/cos(72*PI/180);
double L7=L6*sin(54*PI/180);
double L8=L6*cos(54*PI/180)+0.2;
glClearColor(1.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON); //设置绘制类型为多边形
glColor3f(1.0f,1.0f,0.0f);
glVertex2f(0.0f,0.0f);
glVertex2f(0.0f,L5+L1); //1
glVertex2f(L2,L1); //2
glVertex2f(L2+L6,L1); //3
glVertex2f(L4,-L3); //4
glVertex2f(L7,-L8); //5
glVertex2f(0.0f,-0.2f); //6
glVertex2f(-L7,-L8); //7
glVertex2f(-L4,-L3); //8
glVertex2f(-L2-L6,L1); //9
glVertex2f(-L2,L1); //10
glVertex2f(0.0f,L5+L1);
glEnd();
glFlush();
}
int main(int argc,char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(700,700);
glutCreateWindow("Honor Star");
glutDisplayFunc(Display);
glutMainLoop();
return 0;
}