


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一、设计题目 2二、设计要求 2三、设计方案 2四、程序流程图 6五、程序清单 7六、程序运行结果分析 15七、系统不足及改进方案 15八、 设计总结 16一、设计题目:椭圆中点 Brese nham算法二、设计要求:1要求有两种输入方式:(1)输入椭圆的长短轴来生成椭圆;(2)根据输入点来生成椭圆并输出椭圆的长短轴;2、椭圆的颜色为红色;三、设计方案:1、椭圆对称性质:椭圆分别关于 X轴、丫轴对称。因此在计算椭圆生成的时候,只需要计算1/4个椭圆,经过对称原理就可以实现其他 3/4个椭圆的生成了, 即:计算出目标点(x,y )的坐标,必然存在(x,-y )、( -x,y )(-x,-y
2、)< 此方案中采用计算第一象限中椭圆的生成,即:计算x=0到y=0的1/4的椭圆。先通过平移的方法将假设椭圆中心在坐标原点,然后计算,最后再平移 到真实中心位置。2、对于第一象限的椭圆,斜率 k=- (b*b) *x/(a*a) *y ,当x<y时,斜率k的绝对值小于1,计算时在x方向上取单位量;当x>y时,斜率k的绝对 值大于1,计算时在y方向上取单位量。记:x<y的区域为第一区域,x>y的区域为第二区域。3、输入方式一:输入椭圆的长短轴来生成椭圆。已知:长短半轴分别为a、b,计算的初始位置为(0,b )。2 2 二 2- i椭圆的方程为:a b 。令 F (x
3、,y ) =b*b*x*x+a*a*y*y- a*a* b*b=O(1)对于第一区域,如图1所示,P点坐标为(Xp, yp )、P1 ( Xp+1, yP)为P点正右边的点、P2( Xp+1, yp-1 )为P点右下方的点,M( Xp+l,yp-0.5 )为P1、P2的中点。图1第一区域示意图令 d=F( M) =F( Xp+1, yp-0.5 ) =b*b+a*a* ( b-0.5 ) *( b-0.5 ) -a*a*b*b当 Xp=0、yp=b 时,d 的初始值为:d= b*b-a*a*b+1/4a*aCDd>=0时,应取P2作为下一个像素点,则其正右方的点的坐标为(Xp +2, y
4、p-1 ),右下方的点的坐标为(Xp +2, yp-2),中点坐标为(Xp +2, yp-1.5 ) o此时,d=F (M) =F ( Xp+2, yp-1.5) =d+b*b* (2* xp +3) -2a*a* ( yp-1 )d<0时,应取P1作为下一个像素点,则其正右方的点的坐标为(Xp+2, yp), 右下方的点的坐标为(xp+2, yp-i),中点坐标为(xp+2, yp-o.5)。此时,d=F( M =F( Xp+2, yp-0.5)=d+2* b*b* Xp +3* b*b(2)对于第二区域,如图2所示,P点坐标为(Xp, yp),P1( Xp, yP-i)为 P点正下方
5、的点、P2( Xp+1, yp-l )为P点右下方的点,M( Xp+0.5, yp-1 )为P1、P2的中点。图2第二区域示意图令 d=F( M)=F(Xp+0.5,yp-1)=b*b*( Xp+0.5)*(Xp+0.5)+a*a*(yp-1)* ( yp-1) -a*a*b*b设P坐标的初始值为Xp=Xo , yp=yo, X0=y0d的初始值为:d= F ( X0+o.5, y0-1 ) = b*b* ( X0+o.5) * ( Xo+O.5) +a*a* ( y°-1 ) * ( y°-1 ) -a*a*b*bCDd>=0时,应取P1作为下一个像素点,则其正下方
6、的点的坐标为(Xp, yP-2), 右下方的点的坐标为(Xp+1, yP-2),中点坐标为(Xp+0.5, yP-2 )。此时,d=F (M =F ( Xp+0.5, yp -2) =d+ a*a* (3-2 * yp)d<0时,应取P2作为下一个像素点,则其正下方的点的坐标为(Xp+1, yp-2 ),右下方的点的坐标为(Xp +2, yp-2),中点坐标为(Xp+i.5, yp-2)。此时,d=F (M =F ( Xp+1.5, yp-2) =d+2*b*b* ( X0+1 ) + a*a* (3-2* yp)(3) 根据对称性原理计算其他3个象限的坐标。输入方式二:根据输入点来生成
7、椭圆并输出椭圆的长短轴。已知:两点坐标(Xi, yi)、( X2, y2)2 2匸L i2 2 设椭圆的方程为:a b将两点坐标(X1, y1 )、( X2y2 )代人椭圆方程中,得出a、b的值分别为:2 2 2 a = ( X2 * yi2 2X1 * y2 )2 2(yi - y2 )b2=( Xi2* y222 2X2 * yi )/(2 2Xi - X2)然后按照方式一生成所求椭圆。四、程序流程图输入方式一的流程图如图3所示:输入方式二的流程图如图4所示:图3输入方式一流程图图4输入方式二流程图五、程序清单/ zhon gdia nsua nfa.cpp : Defines the e
8、ntry point for the con sole applicati on.#in elude "stdafx.h"#i nclude <stdlib.h>#in clude <vector>#i nclude <GL/glut.h>#in clude <math.h>int a;int b;/*定义长短半轴分别为a、b*/void GetValue()int in put=O;int x1,x2,y1,y2;n");printf("请输入中点算法产生的方式:printf("1.输入椭圆长短
9、半径n");printf("2.输入椭圆坐标n");/*输出两种输入方式*/scan f("%d",&in put);if(i nput=1)printf("请输入a的值:n");scan f("%d",&a);printf("请输入b的值:n");scan f("%d",&b);if(i nput=2)printf("请输入第一个坐标的值:n");scan f("%d,%d",& x1, &a
10、mp;y1);printf("请输入第二个坐标的值:n");scan f("%d,%d",& x2, &y2);a=sqrt (y1*y1*x2*x2-x1*x1*y2*y2)/(y1*y1-y2*y2);b=sqrt (x1*x1*y2*y2-x2*x2*y1*y1)/(x1*x1-x2*x2);/*根据输入的两个坐标计算椭圆长短半轴a、b的值*/prin tf("a=%d",a);prin tf("b=%d",b);/*输出长短半轴a、b的值*/void Poi ntsEllipse(i nt
11、x,i nt y)glColor3f (1.0f, O.Of, 0.0f);/*生成的椭圆的颜色为红色*/gIPoi ntSize(1);gIBeg in (GL_POINTS);glVertex2i(x+200,y+200);glVertex2i(-x+200,y+200);glVertex2i(x+200,-y+200);glVertex2i(-x+200,-y+200);/*根据对称原理求出椭圆上各个点的坐标*/glE nd ();void myDisplay()glClear(GL_COLOR_BUFFER_BIT);glColor3f (1.0f, 0.0f, 0.0f);glBeg
12、 in (GL_POINTS);int a=200,b=100;float x,y,d1,d2;x=0;y=b;/*第一区域的起始坐标*/d仁 b*b+a*a*(-b+0.25);Poi ntsEllipse(x,y);/*计算第一区域椭圆上各个点的坐标*/while(b*b*(x+1)<a*a*(y-0.5)if (d1<0)d1+=b*b*(2*x+3);x+;elsed1+=b*b*(2*x+3)+a*a*(-2*y+2);X+;y-;Poi ntsEllipse(x,y);/*计算第二区域椭圆上各个点的坐标*/d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)
13、*(y-1)-a*a*b*b;/*第二区域的起始点处的d值*/while(y>0)if (d2<0)d2+=2*b*b*(x+1)-a*a*(2*y-3);x+;y-;elsed2+=a*a*(-2*y+3);y-;Poi ntsEllipse(x,y);glE nd ();glFlush();/*保证前面的OpenGL命令立即执行*/void Init()GetValue();glClearColor(0.0, 0.0, 0.0, 0.0);/*定义清空颜色设计为黑色*/glShadeModel(GL_FLAT);void Reshape(i nt w, int h)glView
14、port(0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadlde ntity();gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);int main (i nt argc, char *argv)glutI nit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutI nitWin dowPositio n(100, 100);/*定义窗口在屏幕中的位置*/glutInitWindow
15、Size(600, 600);/*定义窗口的大小*/glutCreateWi ndow("zho ngdia nsua nfa!");/*根据前述设置的信息创建窗口 */In it();glutDisplay Fun c(myDisplay);glutReshapeF un c(Reshape);glutMa in Loop();return 0;六、程序运行结果分析运行该程序,窗口中显示:请输入中点算法产生的方式:1、输入椭圆长短半径。2、输入椭圆坐标。输入1,并单击回车,显示请输入a的值,输入a的值,并单击回车,将显示请 输入b的值,输入b的值,并单击回车,屏幕上将显示
16、一个以 a、b为长短半轴 的红色椭圆;输入2,并单击回车,将显示请输入第一个坐标的值,输入第一个坐标的值,并 单击回车,将显示请输入第二个坐标的值,输入第二个坐标的值,并单击回车, 屏幕上将显示一个以原点为中心,经过两个坐标的红色椭圆。七、系统不足及改进方案该算法生成的椭圆以原点为中心,如果要想实现椭圆的中心可放在任何位置, 则在上述算法中通过平移的方法将假设圆心在坐标原点,然后计算,最后再平 移到真实的中心位置。假设椭圆的中心坐标为(x-center , y-center ),则1 1x y 1 = xy 110x cen ter y0010cen ter 1其中,x' y'1为平移后的齐次坐标,x y 1为平移前的齐次坐标,i00010x cen ter ycen ter1为平移向量。八、设计总结回顾起此次计算机图形学课程设计,我仍感慨颇多,做这次课程设计之前 我还自认为图形学这门课我学的还不错,但是当做设计时才发现原来还有这么 多东西没有弄懂。做完设计之后,感觉自己学到了很多很多的东西,同时不仅 巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通 过这次课程设计使我懂得了理论与实际相结合是重要性,只有理论知识没有实 践,一切都等于虚设,相当于纸上谈兵。只有理论知识是远远不够的,只有把 所学
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省二手车买卖合同协议书范本
- 餐厅经营托管合同范本
- 包工维修合同范例
- 公路施工合同范例
- 津南区一层轻钢房施工方案
- 农药购销合同范例版
- 黑龙江塑胶跑道施工方案
- 医疗器材售卖合同范例
- 中介合作招聘合同范例
- 医院手术签字合同范例
- 2025年广东省行测试题及答案
- 小红书种草营销师(初级)认证考试题库(附答案)
- GB/T 45089-20240~3岁婴幼儿居家照护服务规范
- 2024年资格考试-良好农业规范认证检查员考试近5年真题集锦(频考类试题)带答案
- JBT 11699-2013 高处作业吊篮安装、拆卸、使用技术规程
- 2024年全国版图知识竞赛(小学组)考试题库大全(含答案)
- 单晶炉热场结构ppt课件
- 安全保卫实务实训教学大纲
- 《炼油设备培训》ppt课件
- 《淹溺急救》PPT课件(2022版)
- 水表施工组织方案.doc
评论
0/150
提交评论