logo资料库

中点画圆的算法.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
实验四 多边形 一、实验目的 1、了解中点画圆的算法; 2、掌握 OpenGL 的多边形的绘图以及填充。 二、实验内容 1、利用圆的八对称性,以下面图中的八分之一圆弧(x>y)为主导,请设计一个中 点画圆法,画圆。 2、任意画出一个封闭的二维图形,自定义一个图案对其进行填充。 3、编程画出下面图形, 要求用两个循环语句实现.点的表示为: int x[5]={180,120,140,220,240}; int y[5]={180,140,60,60,140}; 4、(提高题)利用圆的正多边形逼近算法画出上面图形,由用户输入圆心、半径, 多边形的边数。 三、实验代码 实验一: #include #include #include void Init() glClearColor(0.0f, 0.0f, 0.0f, 0.8f); //设置背景为黑色 { } void Reshape(int w, int h)
{ } glViewport(2, 2, w, h); //设置屏幕尺寸 glMatrixMode(GL_PROJECTION); //指定当前操作投影矩阵堆栈 glLoadIdentity(); //重置投影矩阵 gluOrtho2D(0, (double)w, 0, (double)h); //设置二维图大小 void point(int x, int y) { } glColor3f(1.0f, 1.0f, 1.0f); glPointSize(2); //设置点的大小 glBegin(GL_POINTS); glVertex2f(150 + x, 150 + y); //Sleep(100); glEnd(); glFlush(); void cirport( int x, int y) { } point(x, y); point(y, x); point(-y, x); point(-x, y); point(-x, -y); point(-y, -x); point(y, -x); point(x, -y); void MidBresenhamCircle(int r) { int x, y, d; y = 0; x = r; d = 1 - r; while (y <= x)
{ cirport(y, x); if (d<0) d += 2 * y + 3; else { } y++; d += 2 * (y - x) + 5; x--; } } void myDisplay() MidBresenhamCircle(80); { } //glBegin()的参数如果是 GL_LINE,则只能画一条线,glBegin 和 glEnd 之间的两句话用于指定直线 的起点和终点。glBegin()的参数如果是 GL_LINEs,则能画多条线 int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(640, 480); glutCreateWindow("FirstDemo"); Init(); glutDisplayFunc(myDisplay); glutReshapeFunc(Reshape); glutMainLoop(); return 0; } 实验二: #include #include #include
void Init() glClearColor(1.0f,1.0f,1.0f,0.5f); //设置背景颜色 { } void Reshape(int w, int h) { } glViewport(2, 2, w, h); //设置屏幕尺寸 glMatrixMode(GL_PROJECTION); //指定当前操作投影矩阵堆栈 glLoadIdentity(); //重置投影矩阵 gluOrtho2D(0, (double)w, 0, (double)h); //设置二维图大小 void myDisplay() glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT,GL_FILL); glColor3f(0.98, 0.625, 0.12); glBegin(GL_POLYGON); glVertex2i(150, 100); glVertex2i(150, 200); glVertex2f(300, 300); glVertex2f(250, 250); glVertex2f(250, 200); glEnd(); glFlush(); { } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480);
glutCreateWindow("FirstDemo"); Init(); glutDisplayFunc(myDisplay); glutReshapeFunc(Reshape); glutMainLoop(); return 0; } 实验三: #include #include #include void Init() glClearColor(1.0f, 1.0f, 1.0f, 0.8f); //设置背景 { } void Reshape(int w, int h) { } glViewport(2, 2, w, h); //设置屏幕尺寸 glMatrixMode(GL_PROJECTION); //指定当前操作投影矩阵堆栈 glLoadIdentity(); //重置投影矩阵 gluOrtho2D(0, (double)w, 0, (double)h); //设置二维图大小 void mydisplay() { glClear(GL_COLOR_BUFFER_BIT); int x[5] = { 180,120,140,220,240 }; int y[5] = { 180,140,60,60,140 }; ////*****五边形 glColor3f(1, 0, 0); glBegin(GL_LINE_LOOP); for (int i = 0;i < 5;i++) {
glVertex2i(x[i], y[i]); } glEnd(); glColor3f(0, 1, 0); glBegin(GL_LINES); for (int i = 0;i < 5;i++) { } glVertex2i(x[i], y[i]); if (i + 2 > 4) int j = (i + 2) % 5; glVertex2i(x[j], y[j]); { } else glVertex2i(x[i + 2], y[i + 2]); glEnd(); glFlush(); } int main(int argc, char* argv[]) { } glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(680, 480); glutInitWindowPosition(100, 100); glutCreateWindow("FirstDemo"); Init(); glutDisplayFunc(mydisplay); //显示 glutReshapeFunc(Reshape); //重绘 glutMainLoop(); return 0; 四、实验结果截图
五、实验体会 实验一:这次用了中点画圆法,有两种情况,一种是x>y,一种是x
分享到:
收藏