- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
图形学部分
直线扫描转换算法
DDA
思想:先计算坐标差,取最大的坐标差值为e,计算坐标增量为坐标差/e,然后开始描点,每描一个点,坐标按照增量递增取整,直到画够e向下取整个点.
void?DDALine(int?x1,int?y1,int?x2,int?y2)?{??
????double?dx,dy,e,x,y;??
????dx=x2-x1;??
????dy=y2-y1;??
????e=(fabs(dx)fabs(dy))?fabs(dx):fabs(dy);??
????dx/=e;??
????dy/=e;??
????x=x1;??
????y=y1;??
????for(int?i=1;i=e;i++){??
????SetPixel((int)(x+0.5),?(int)(y+0.5));??
????x+=dx;??
????y+=dy;??
???}??
}?
中点画线算法
使用条件斜率在0~1之间,直线方程ax+by+c=0,判别式实际上是用来区分实际点是在(x+1,y)(x+1,y+1)这个小线段的中点的上面还是下面,依据这个来决定纵坐标是否递增,为了计算方便相关的式子乘以了2,用以避免浮点数计算.
void?MidpointLine?(int?x0,int?y0,int?x1,int?y1){??
????int?a?=?y0?-?y1;?????????//直线方程中的a??
????int?b?=?x1?-?x0;?????????//直线方程中的b??
????int?d?=?2?*?a?+?b;???????//判别式的初值??
????int?delta1?=?2?*?a;??????//纵坐标不递增时的判别式增量??
????int?delta2?=?2?*(?a?+?b);//纵坐标递增是的判别式增量??
????int?x?=?x0;??
????int?y?=?y0;??
????SetPixel(x,y);//第一个点没有争议??
????while(xx1){??
????????x++;//横坐标递增??
????????if(d0){//判别式小于0,纵坐标递增??
????????????y++;??
????????????d+=delta2;??
????????}else{//判别式不小于0,纵坐标不递增??
????????????d+=?delta1;??
????????}??
????????SetPixel(x,y);??
????}??
}??
Bresenham画线算法
同中点划线法相似,只是判别式的原理不同,此处是将纵坐标递增和不递增两种情况下的点和直线上的真实点之间的距离做差,通过差值的正负判断这两个距离的大小,选择距离真实点较近的那个点进行描点.
void?BresenhamLine(int?x1,int?y1,int?x2,int?y2){??
????int?x=x1;??
????int?y=y1;??
????int?dx=x2-x1;??
????int?dy=y2-y1;??
????int?p=2*dy-dx;???????//判别式初值??
????for(;x=x2;x++){?????//横坐标递增??
????????SetPixel(x,y);??
????????if(p=0){????????//判别式非负,纵坐标递增??
????????????y++;??
????????????p+=2*(dy-dx);//判别式非负时的增量??
????????}else{???????????//判别式为负,纵坐标不变??
????????????p+=2*dy;?????//判别式为负时的增量??
????????}??
????}??
}??
圆的扫描转换
Bresenham画圆法
只考虑圆心在原点的第一象限角分线之上(0≤x≤y)的1/8圆周的画法,其他情况使用对称和平移操作绘制.在这个范围内,随着x的递增,y递减,每次x递增y要在y和y-1中选择,选择方法类似于Bresenham画线法
void?BresenhamCircle(int?R){???????
????int?x=0;????
????int?y=R;??
????int?p=3-2*R;????????//判别式初值??
????for(;x=y;x++)??
????{?????????
????????SetPixel(x,y);??
????????if(p=0){???????????//判别式非负,y递减??
????????????p+=4*(x-y)+10;??//判别式增量??
????????????y--
网络工程师持证人
本人已从事浙江省工程咨询5年,对浙江省内工程信息非常熟悉,可获取新建工程相关联系人、设计院、业主等关键信息。另外从事楼宇自控专业已10年,考取了一建二建等资格证书,有关考试方面的问题(考试心得、方法、学习资料等)都欢饮来咨询交流。
文档评论(0)