第2章 基本图形的生成及计算--直线、圆、椭圆的生成.ppt

第2章 基本图形的生成及计算--直线、圆、椭圆的生成.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 直线、圆、椭圆生成算法 图形显示前需要:扫描转换+裁剪 裁剪---〉扫描转换:最常用,节约计算时间。 扫描转换---〉裁剪:算法简单; 直线的生成算法 确定最佳逼近该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作 三个常用算法: 数字微分法(DDA) 中点画线法 Bresenham算法 数字微分法(DDA) 假定直线的起点、终点分别为:(xa,ya), (xb,yb),则斜率m为:   m=(yb-ya)/(xb-xa)=dy/dx 数值微分(DDA)法 基本思想 直线的起点和终点分别为(xa,ya), (xb,yb), 斜率m为:m=(yb-ya)/(xb-xa)=dy/dx 直线中每个点坐标由前一点坐标加增量(Dx,Dy)而得到 xi+1=xi+Dx 其中x1=xa yi+1=yi+Dy y1=ya 并且 Dy=m×Dx 数值微分(DDA)法 数值微分(DDA)法 二个规律 (1) |dx| |dy| 时, |Dx|=1, |Dy|=m |dx|≤|dy| 时, |Dx|=1/m, |Dy|=1 (2) Dx、Dy的符号与dx、dy的符号相同 增量算法:在迭代算法中,如果每一步的x、y值是用前一步的值加上增量来获得,则称为增量算法 DDA算法就是一个增量算法 数值微分(DDA)法 数值微分(DDA)法 void dda_line(int xa,int ya,int xb,int yb,int c) { float delta_x,delta_y,x,y; int dx,dy,steps,k; dx=xb-xa; dy=yb-ya; if (abs(dx)abs(dy)) steps=abs(dx); else steps=abs(dy); delta_x=(float)dx/(float)steps; delta_y=(float)dy/(float)steps; x=xa; y=ya; putpixel(x,y,c); for (k=1;k=steps;k++){ x+=delta_x; y+=delta_y; putpixel(x,y,c); } } Bresenham画线算法 由DDA算法可知:yi+1=yi+m。由于m不一定是整数,由此式求出的yi也不一定是整数 本算法于1965年由Bresenham提出 在直线生成的算法中,Bresenham算法是最有效的算法之一 令 m=Δy/Δx,就0≤m≤1的情况来说明Bresenham算法 Bresenham画线算法 设直线从起点(xa,ya)到终点(xb,yb)。直线可表示为方程y=mx+b,其中 b=y1-m?x1, x1=xa,y1=ya m=(yb-ya)/(xb-xa)=dy/dx Bresenham画线算法 设(xi,yi)表示直线上当前点A,B是理想直线上的点,下一个表示直线的点到底取图中的C点还是D点,即当xi+1=xi+1时,yi+1取yi+1还是yi? 选择的原则取决于y与yi及yi+1的距离d1与d2。 Bresenham画线算法 取Pi=(d1-d2)dx,经整理,得 Pi=2xidy-2yidx+2dy+(2b-1)dx 由于在1a象限,有dx0,故Pi仍可以用来判断符号 求递推公式 Pi+1=2xi+1dy-2yi+1dx+2dy+(2b-1)dx =2xidy+2dy-2yi+1dx+2yidx-2yidx+2dy+(2b-1)dx = Pi+2dy-2(yi+1-yi)dx 即求得 Pi+1=Pi+2dy-2(yi+1-yi)dx 求初值 Pi中代入x1和y1,得初值 P1=2dy-dx Bresenham画线算法 算法思想 1. 画点(x1,y1),dx=xb-xa,dy=yb-ya, 计算P1=2dy-dx,i=1; 2. xi+1=xi+1, 如果Pi0,则 yi+1=yi, Pi+1=Pi+2dy; 否则 yi+1=yi+1, Pi+1=Pi+2dy-2dx; 3. 画点(xi+1,yi+1); 4. i=i+1,如果idx+1,转2;否则结束 优点 1. 不必计算斜率,无除法 2. 不用浮点数,只用整数

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档