ch03直线、圆、椭圆生成2008.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch03直线、圆、椭圆生成2008

1、扫描转换直线段;第三章 直线、圆、椭圆生成算法;任何图形的光栅化,必须显示在一个窗口内,否则不予显示。即确定一个图形的哪些部分在窗口内,哪些在窗口外,即裁剪。 ;图形显示前需要:扫描转换+裁剪;屏幕坐标定义;;直线段的扫描转换算法;假定直线的起点、终点分别为:(x0,y0), (x1,y1),且都为整数。记直线的斜率为k。;基本思想;即:当x每递增1,y递增k(即直线斜率);;数值微分(DDA)法;数值微分(DDA)法;#include stdlib.h #include math.h 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, dy = yEnd - y0, steps, k; float xIncrement, yIncrement, x = x0, y = y0; if (fabs (dx) fabs (dy)) steps = fabs (dx); else steps = fabs (dy); xIncrement = float (dx) / float (steps); yIncrement = float (dy) / float (steps); setPixel (round (x), round (y)); for (k = 0; k steps; k++) { x += xIncrement; y += yIncrement; setPixel (round (x), round (y)); } };例:画直线段P0(0,0)--P1(5,2);假定直线斜率0k1,且已确定点亮象素点P(xp ,yp ),则下一个与直线最接近的像素只能是P1点或P2点。设M为中点,Q为交点;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;Bresenham画线算法;又;pi 的增量算法;|k|1时直线Bresenham算法;Bresenham画线算法;#include stdlib.h #include math.h /* |m|1.0 Bresenham 画线过程*/ void lineBres (int x0, int y0, int xEnd, int yEnd) { int dx=fabs(xEnd-x0), dy=fabs(yEnd-y0); int p=2*dy-dx; int twoDy=2*dy, twoDyMinusDx=2*(dy-dx); int x, y; /* 确定那一个端点作为画线起点 */ if (x0 xEnd) { x = xEnd; y = yEnd; xEnd = x0; } else { x = x0; y = y0; } setPixel (x, y); ;BresenhamLine(x0,y0,x1,y1,color) int x0,y0,x1,y1,color; { int x,y,dx,dy,e; dx = x1-x0; dy = y1-y0; d= -dx; x=x0; y=y0; for( i=0; i=dx; i++){ drawpixel(x,y,color); x++; d=d+2*dy; if(d =0) {y++; d=d–2*dx;} } } ;圆的扫描转换算法;角度DDA法;利用圆的对称性,只须讨论1/8圆。第二个8

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档