南昌大学信工学院计算机图形学实验报告(附详细代码).doc
《南昌大学信工学院计算机图形学实验报告(附详细代码).doc》由会员分享,可在线阅读,更多相关《南昌大学信工学院计算机图形学实验报告(附详细代码).doc(32页珍藏版)》请在咨信网上搜索。
1、实 验 报 告实验课程: 计算机图形学 学生姓名: XXX 学 号: XXX 专业班级: 计算机科学与技术X班 20XX年XX月XX日目录实验一 直线和圆的生成3实验二 区域填充12实验三 裁剪算法15实验四 Bezier曲线的绘制23实验五 B样条曲线的绘制27 南昌大学实验报告学生姓名: 学 号: 专业班级: 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 实验一 直线和圆的生成一、实验项目名称直线和圆的生成二、实验目的1、掌握DDA、Bresenham 直线生成算法;2、掌握中点画圆生成算法三、实验要求1、编程实现DDA、Bresenham算法生成直线2、编程实现中点画圆的算
2、法四、实验步骤1、根据实验要求分析实验,并写出相应算法的实现2、选择适当语言实现算法;3、调试程序。五、实验内容1、Bresenham画线算法的实现#include#include#includevoid init(void)glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,600.0,0.0,500.0);void setPixel(int x,int y)glBegin(GL_POINTS);glVertex2i(x,y);glEnd();void lineBres(int x0,int y0,
3、int xEnd,int yEnd)int dx=abs(xEnd-x0),dy=abs(yEnd-y0);int p=2*dy-dx;int twoDy=2*dy,twoDyMinusDx=2*(dy-dx);int x,y;if(x0xEnd)x=xEnd;y=yEnd;elsex=x0;y=y0;setPixel( x, y);while(xxEnd)x+;if(p0)p+=twoDy;elsey+; p+=twoDyMinusDx;setPixel( x, y);void lineSegment(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(0
4、.0,0.0,1.0);lineBres(50,50,400,300);glFlush();void main(int argc,char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow(An Line OpenGL Program);init();glutDisplayFunc(lineSegment);glutMainLoop();2、DDA算法的实现
5、#include#includevoid init(void)glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,600.0,0.0,500.0);void setPixel(int x,int y)glBegin(GL_POINTS);glVertex2i(x,y);glEnd();inline int round(const float a)return int(a+0.5);void lineDDA (int x0,int y0,int xEnd,int yEnd)int dx=xEnd-x0,
6、dy=yEnd-y0,steps,k;float xIncrement,yIncrement,x=x0,y=y0;if(abs(dx)abs(dy)steps=abs(dx);elsesteps=abs(dy);xIncrement=GLfloat(dx)/GLfloat(steps);yIncrement=GLfloat(dy)/GLfloat(steps);setPixel( x, y);for(k=0;ksteps;k+)x+=xIncrement;y+=yIncrement;setPixel( x, y);void lineSegment(void)glClear(GL_COLOR_B
7、UFFER_BIT);glColor3f(1.0,0.0,0.0);lineDDA(50,50,400,300);glFlush();void main(int argc,char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow(DDA OpenGL Program);init();glutDisplayFunc(lineSegment);glutMain
8、Loop();3、圆的生成#include#include const int n = 20;const GLfloat R = 0.5f;const GLfloat Pi = 3.1415926536f;void init(void)glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);void myDisplay(void)int i;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glBegin(GL_POL
9、YGON);for(i=0; in; +i)glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i);glEnd();glFlush();void main(int argc,char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(500,500);glutCreateWindow(An Circle OpenGL Program);init();glutDisplayFun
10、c(myDisplay);glutMainLoop();return ;4、修改后的圆的生成#include #include const int n = 20;const GLfloat R = 0.5f;const GLfloat Pi = 3.1415926536f;void myDisplay(void)int i;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glBegin(GL_POLYGON);for(i=0; in; +i)glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i);glEnd
11、();glFlush();int main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow(画圆的程序);glutDisplayFunc(&myDisplay);glutMainLoop();return 05、中点画圆算法#include#include#includevoid init(void)glClear
12、Color(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);class screenPtprivate:GLint x,y;public:screenPt()x=y=0;void setCoords(GLint xCoordValue,GLint yCoordValue)x=xCoordValue;y= yCoordValue;GLint getx() constreturn x;GLint gety() constreturn y;void incrementx()x+;void dec
13、rementy()y-;void setPixel(GLint xCoord,GLint yCoord)glBegin(GL_POINTS);glVertex2i(xCoord,yCoord);glEnd();void circleMidpoint(GLint xc,GLint yc,GLint radius)screenPt circPt;GLint p=1-radius;circPt.setCoords(0,radius);void cieclePlotPoints(GLint,GLint,screenPt);cieclePlotPoints(xc,yc,circPt);while(cir
14、cPt.getx()circPt.gety()circPt.incrementx(); if (p 0) p += 2 * circPt.getx() + 1; else circPt.decrementy(); p += 2 * (circPt.getx() - circPt.gety() + 1; cieclePlotPoints(xc,yc,circPt);void cieclePlotPoints(GLint xc,GLint yc,screenPt circPt)setPixel(xc+circPt.getx(),yc+circPt.gety();setPixel(xc-circPt
15、.getx(),yc+circPt.gety();setPixel(xc+circPt.getx(),yc-circPt.gety();setPixel(xc-circPt.getx(),yc-circPt.gety();setPixel(xc+circPt.gety(),yc+circPt.getx();setPixel(xc-circPt.gety(),yc+circPt.getx();setPixel(xc+circPt.gety(),yc-circPt.getx();setPixel(xc-circPt.gety(),yc-circPt.getx();void myDisplay(vo
16、id)glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,1.0,0.0);circleMidpoint(50,50,20);glFlush();void main(int argc,char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow(A Circle OpenGL Program);init();glutDispl
17、ayFunc(myDisplay);glutMainLoop();六、实验结果Bresenham画线算法的实现: DDA算法的实现: 圆的生成: 中点画圆算法: 七、实验心得课本上有画直线和中点画圆的核心代码,只要加上main函数和窗口定义等的基本函数,稍微修改就可以得到完整的程序,比较简单。 南昌大学实验报告学生姓名: 学 号: 专业班级: 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 实验二 区域填充一、实验项目名称区域填充二、实验目的1、理解区域的表示方法,能正确区分并应用区域的连通性;2、掌握基于边界、内点的区域填充算法;3、掌握边界标志算法进行多边形扫描转换的程序实现方
18、法;4、掌握边界种子填充算法进行区域填充的程序实现方法三、实验要求编程实现种子填充算法四、实验步骤1、根据实验要求分析实验,并写出相应算法的实现2、选择适当语言实现算法;3、调试程序。五、实验内容1、输入种子点坐标(x, y)、填充色、边界颜色2、种子像素入栈;当栈非空时重复执行如下三步操作:(1)栈顶像素出栈;(2)将出栈像素置成填充色;(3)检查出栈像素的4-邻接点,若其中某个像素点不是边界色且未置成多边形色,则把该像素入栈。实验代码如下:#include#include#include#includevoid init(void)glClearColor(1.0,1.0,1.0,0.0)
19、;glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,400.0,0.0,400.0);/初始化投影窗口,保持与显示的窗口一致void setPixel(int x,int y,long fillColor)/自定义的setPixel函数glColor3f(fillColor16,fillColor8,fillColor);glBegin(GL_POINTS);glVertex2i(x,y);glEnd();void boundaryFill4(int x,int y,long fillColor,long borderColor)/递归的边界填充算法unsi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南昌大学 工学院 计算机 图形学 实验 报告 详细 代码
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。