预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

计算机图形学实验 圆、椭圆的中点算法 学院:计算机科学与技术学院 专业:软件工程 班级:软工152 学号:1500170408 学生姓名:刘强坤 学院:计算机科学与技术专业:软件工程班级:软工152 姓名刘强坤学号1500170408实验组实验时间10-24指导教师成绩实验项目名称圆,椭圆中点算法实验要求优化后的算法:二次差分法 可任意指定圆心坐标实验目的实验环境VS2015实验内容圆: voidBresenham_Circle(intxc,intyc,intr) { intx,y,d; x=0; y=r; d=3-2*r; glVertex2i(x+xc,y+yc); while(x<y) { if(d<0) { d=d+4*x+6; } else { d=d+4*(x-y)+10; y--; } x++; glVertex2i(x+xc,y+yc); glVertex2i(y+xc,x+yc); glVertex2i(y+xc,-x+yc); glVertex2i(x+xc,-y+yc); glVertex2i(-x+xc,-y+yc); glVertex2i(-y+xc,-x+yc); glVertex2i(-x+xc,y+yc); glVertex2i(-y+xc,x+yc); } } 椭圆: voidEllipsepot(intx0,inty0,intx,inty) { //1 setPixel((x0+x),(y0+y)); //2 setPixel((x0+x),(y0-y)); //3 setPixel((x0-x),(y0-y)); //4 setPixel((x0-x),(y0+y)); } //中点画椭圆算法 voidMidPoint_Ellipse(intx0,inty0,inta,intb) { doublesqa=a*a; doublesqb=b*b; doubled=sqb+sqa*(0.25-b); intx=0; inty=b; Ellipsepot(x0,y0,x,y); //1 while(sqb*(x+1)<sqa*(y-0.5)) { if(d<0) { d+=sqb*(2*x+3); } else { d+=(sqb*(2*x+3)+sqa*((-2)*y+2)); --y; } ++x; Ellipsepot(x0,y0,x,y); } d=(b*(x+0.5))*2+(a*(y-1))*2-(a*b)*2; //2 while(y>0) { if(d<0) { d+=sqb*(2*x+2)+sqa*((-2)*y+3); ++x; } else { d+=sqa*((-2)*y+3); } --y; Ellipsepot(x0,y0,x,y); } } 实验结果 实验总结感觉自己对于图形用函数表达出来还是有点不行,多亏了室友的讲解,才画了出来 签名:2017年10月24日