五边形镶嵌计算机程序,一个计算机图形学的作业五边形和五角星的变换怎么让五角星再变回...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#define Pi 3.1415926

using namespace std;

int t = 3;

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

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

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

GLfloat cx = a * cos(54 * Pi / 180);

GLfloat cy = -a * sin(54 * Pi / 180);

GLfloat PointA[2] = { 0,a };

GLfloat PointB[2] = { bx,by };

GLfloat PointC[2] = { cx,cy };

GLfloat PointD[2] = { -cx,cy };

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

void myDisplay()

{

glLoadIdentity(); //恢复初始坐标系

glClearColor(0, 0, 0, 0); //设置清除颜色

glClear(GL_COLOR_BUFFER_BIT); //利用上函数设置好的当前清除颜色设置窗口颜色

glColor4f(1, 1, 1, 0); //图形颜色

glPushMatrix(); //复制当前矩阵 入栈

glBegin(GL_LINE_LOOP); //依次链接 包括首尾

glVertex2fv(PointA);

glVertex2fv(PointB);

glVertex2fv(PointC);

glVertex2fv(PointD);

glVertex2fv(PointE);

glEnd();

glPopMatrix();//复制当前矩阵 出栈

glutSwapBuffers(); //交换两个缓冲区指针

}

void TimerFunction(int value)

{

if (t <= 100)

{

glClear(GL_COLOR_BUFFER_BIT);

GLfloatPointAa[2] = { 0, a };

GLfloatPointBb[2] = { bx + 0.01f*t*(0.5f - bx), by + 0.01f*t*(cy - by) };

GLfloat PointCc[2] = { cx + 0.01f*t*(-bx - 0.5f), cy + 0.01f*t*(by - cy) };

GLfloat PointDd[2] = { -cx + 0.01f*t*(bx + 0.5f), cy + 0.01f*t*(by - cy) };

GLfloat PointEe[2] = { -bx + 0.01f*t*(-0.5f + bx), by + 0.01f*t*(cy - by) };

glClear(GL_STENCIL_BUFFER_BIT);// A->B->C->D->E->A

glBegin(GL_LINE_LOOP);

glVertex2fv(PointAa);

glVertex2fv(PointBb);

glVertex2fv(PointCc);

glVertex2fv(PointDd);

glVertex2fv(PointEe);

glEnd();

glutSwapBuffers(); //清空命令缓冲区并交换帧缓存

t++;

glutTimerFunc(33, TimerFunction, 1);

}

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);

glutInitWindowPosition(100, 100);

glutInitWindowSize(550, 550);

glutCreateWindow("transform");

glutDisplayFunc(myDisplay);

glutTimerFunc(33, TimerFunction, 1);

glutTimerFunc(33, TimerFunction1, 1);

glutMainLoop();

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值