查找计算机图形学课程学习资源,计算机图形学课程第二次试验

a7f4a3f590493a1e451dd952a488fd7c.gif 计算机图形学课程第二次试验

(16页)

98e9a911b5a63a7952f8cd902fc7a9cd.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

14.9 积分

重庆大学学生实验报告实验课程名称 计算机图形学 开课实验室 DS1501 学 院 软件学院 年级一三级专业班 学生姓名 学号 开课时间 2015 至 2016 学年第 1 学 期总成绩教师签名软件学院制 《基本图形元素的生成算法(直线)》实验报告开课实验室: 年 月 日学院软件学院 年级、专业、班姓名 成绩课程名称计算机图形学实验项R名 称菽木图形元素的生成算法(圆、椭圆)指导教师教师评语教师签名:年 月円一、 实验目的1) 实现绘制圆的中点算法和Bresenham算法。2) 实现绘制椭圆的屮点算法。二、 实验原理圆(屮点算法)圆的特征一八分对称性圆被定义为到给定中心位置(xc,yj距离为r的点集。圆心位于原点的岡有四条对称轴x=0, y=0,*^和乂=-7。若已知圆弧上一点(x, y),可以得到其关于四条对称轴的其t 7个点,这种性质称为八分对称性。因此,只要扫描转换八分之一關弧,就町以求出整个關弧的象素集。显示圆弧上的八个对称点的算法:void CirclePoints(int x, int y,int color){ Putpixel (x, y, color) ; Putpixel (y, x, color);Putpixel (~x, y, color) ; Putpixel (y, ~x, color);Putpixel (x, -y, color) ; Putpixel (-y, x, color);Putpixel (-x, -y, color); Putpixel (-y, -x, color);}如果我们构造函数F(x,y)=x2+y2-R2,则对于岡上的点有F(x,y)=0,对P圆外的点有F(x,y)〉0,对 于岡P、j的点F(x,y)<0。与中点O线法一样,构造判別式: d=F(M)=F(xp+l,yp-O.5)=(xp+1 )2+(yp-0.5)2-R2若d<0,则应取Pl为下一象素,而且再下一象素的判别式为: d=F(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-R2=d+2xp+3苦d>0,则应取P2为下一象素,而且下一象素的判别式为 d=F(xp+2,yp-l .5)=(xp+2)2+(yp-1.5)2-R2=d+2(xp-yp)+5我们这里讨论的第一个象素是(0,R),判别式d的初始值为: d0=F(l,R-0.5)=1.25-R图2.2.1当前象素与下一象素的候选者屮点M圆算法:MidPointCircle(int r int color){ int x,y;float d;x=0; y=r; d=1.25-r; circlepoints (x,y,color); while(x<=y){ if(d<0) d+=2*x+3;else { d+=2*(x-y)+5; y—;}X++;circlepoints (x,y,color);})为了进一步提高算法的效率,可以将上而的算法屮的浮点数改写成整数,将乘法运算改成加 法运算,即仅用整数实现屮点M圆法。(2)圆弧的生成算法算法:基木同圆弧算法,是方程变得货杂F(x,y)=(bx)A2+(ay)A2-(ab)A2.对称性:4分对称,画第一象限分段依裾:斜率为一点三、使用仪器、材料VS2012四、实验步骤函数主程序部分代码如下:int main 0 {HWND hw=GetConsoleWindow(): HDC hDC=GotDC(hw): int r, x, y; int a, b;COLORREF coloi-OxffOOff; printf("输入1位圆,输入2为椭圆: int number1;scanf(〃%d〃,&numberl): if(number1==1) {printf ("请输入圆的半径R"); scanf (〃%d",&r); drowcircle(r, color);}else if (numberl==2) {printf (〃输入a,b的大小:");scanf_s("%d",&a) ;scanf_s("%cT,&b); drowelipse(a, b, color) ;}else printf ("输出错误");/*scanf (〃%d",&r);drowcircle(r, color);*/}输入1时,进入画圆部分,输入半径的大小得出图像。输入2时进入画椭圆界面,输入a, b的值,得出椭圆?C:\Windows\system32\cmd.exe.圆,输入2为椭圆:C:\Wmdows\system32\cmd.exe讓織B2鵬1C:\Wmdows\system32\cmd.exe隱>2鵬21.中点画圆算法:代码如下:void drowcircle(int r, int color) //中点画圆算法{ int x, y; float d; color:0xff00ff; x=0; y=r; d二 1.25-r; circlepoints (x,y,color); whi le(x<=y){ if (d<0) d+=2*x+3;else{ d+=2*(x-y)+5; y—;} x++;circlepoints (x, y, color):}}定义x,y,r,赋予初值,确定颜色位数。根裾增量值确定d。//八次对称void circlepoints(int x, int y ,int color){HWND hw=GetConsoleWindow():HDC hl)OGetDC(hw);SetPixel(hDC, x*2+200, y*2+200, color); SetPixel(hDC,y*2+200, x*2+200, color); SetPixel(hDC, -x*2+200, y*2+200, color); SetPixel(hDC,y*2+200, -x*2+200, color); SetPixel(hDC, x*2+200, -y*2+200, color); SetPixel (hDC,-y*2+200,x*2+200,color); SetPixel (hDC, -x*2+200, -v*2+200, color) : SetPixel (hl)C, -y*2+200, -x*2+200, color);}确定八次对称画法,形成圆,结果如图:C:\Windows\sys相 ? 为0 -2 31-?,R ■f半继麵量1■入任 盤目青"""" 中点画圆法流程图:椭圆画法:。令K啣藝识莓,坦s^ffi {{! (JOo3>:>p)JI} (0=391 w {:(?IOr-Hs>;> x*l*l)3f—tJ q=e :(J0J03 *x)3sdJJo (p/1)十q*5K-q*(Irp-q=>.o=x :P 1§TJ :X lu-l—l:x 1.S}(JOJS J3gsoyq l.5«luJ)3sdnaA\0JP POA "诮眉lnKl荽//:(JOISoSAtooc\l+2x-o§) TSMSS 二SISoSAt-ooCM+s 念-OGM) P.2CU13S ;.so3oof 交 ros+交 xo(Iq) P.2CUSS 二Jo—H03os+CMtos+CM艺o(Iq) P.2JSS乂 >一 qosooHDaqOGH;)MOP.5AoIosuoya9HMq dgH}(JOO3 J3g38>.l.s>

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值