基本图形的生成与计算-直线、圆、椭圆的生成.ppt
《基本图形的生成与计算-直线、圆、椭圆的生成.ppt》由会员分享,可在线阅读,更多相关《基本图形的生成与计算-直线、圆、椭圆的生成.ppt(36页珍藏版)》请在三一办公上搜索。
1、浙江师范大学数理与信息工程学院 计算机图形学,第二章 直线、圆、椭圆生成算法,图形的扫描转换(光栅化):确定像素、显示图形的过程。步骤如下:确定像素用图形属性,对像素进行写操作一维图形,用一个像素宽的直线来显示图形二维图形的光栅化,即区域的填充:确定像素,填色或图案。图形的光栅化,必须显示在窗口内,否则不予显示。确定图形的哪些部分在窗口内,哪些在窗口外,即裁剪,浙江师范大学数理与信息工程学院 计算机图形学,图形显示前需要:扫描转换+裁剪裁剪-扫描转换:最常用,节约计算时间。扫描转换-裁剪:算法简单;,浙江师范大学数理与信息工程学院 计算机图形学,本章内容,直线的生成算法圆的生成算法区域填充算法
2、字符的生成图形求交图形裁剪,浙江师范大学数理与信息工程学院 计算机图形学,直线的生成算法,确定最佳逼近该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作三个常用算法:数字微分法(DDA)中点画线法Bresenham算法,浙江师范大学数理与信息工程学院 计算机图形学,数字微分法(),假定直线的起点、终点分别为:(xa,ya),(xb,yb),则斜率m为:m=(yb-ya)/(xb-xa)=dy/dx,(x i,yi),(x i+1,yi+k),(x i,int(yi+0.5),栅格交点表示象素点位置,。,。,。,。,浙江师范大学数理与信息工程学院 计算机图形学,数值微分(DDA)法,基本思
3、想直线的起点和终点分别为(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=mDx,浙江师范大学数理与信息工程学院 计算机图形学,数值微分(DDA)法,直线方向的8个象限 在1a取Dx=1,Dy=m;在1b取Dx=1/m,Dy=1;得到 象限|dx|dy|?Dx Dy 象限|dx|dy|?Dx Dy 1a true 1 m 3a true-1-m 1b false 1/m 1 3b false-1/m-1 2a true
4、-1 m 4a true 1-m 2b false-1/m 1 4b true 1/m-1,浙江师范大学数理与信息工程学院 计算机图形学,数值微分(DDA)法,二个规律(1)|dx|dy|时,|Dx|=1,|Dy|=m|dx|dy|时,|Dx|=1/m,|Dy|=1(2)Dx、Dy的符号与dx、dy的符号相同增量算法:在迭代算法中,如果每一步的x、y值是用前一步的值加上增量来获得,则称为增量算法DDA算法就是一个增量算法,浙江师范大学数理与信息工程学院 计算机图形学,数值微分(DDA)法,#include stdio.h#include graphics.hvoid dda_line(int
5、xa,int ya,int xb,int yb,int c);void main()int driver=DETECT,mode;int x0,y0,x1,y1,background=WHITE,color=RED;scanf(%d,%d,%d,%d,浙江师范大学数理与信息工程学院 计算机图形学,数值微分(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)
6、;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算法是最有效的算法之一令
7、m=y/x,就0m1的情况来说明Bresenham算法,浙江师范大学数理与信息工程学院 计算机图形学,Bresenham画线算法,设直线从起点(xa,ya)到终点(xb,yb)。直线可表示为方程y=mx+b,其中b=y1-mx1,x1=xa,y1=yam=(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。,xi,xi+1,y
8、i,yi+1,C,D,B,y=m(xi+1)+b d1=y-yi d2=yi+1-y如果d1-d20,yi+1取D(yi+1),否则取C(yi)。因此算法的关键在于求出d1-d2的符号。d1-d2=(y-yi)-(yi+1-y)=2y-2yi-1=2dy/dx(xi+1)-2yi+2b1,A,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)
9、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=
10、i+1,如果idx+1,转2;否则结束优点 1.不必计算斜率,无除法 2.不用浮点数,只用整数 3.只做整数加/减运算,乘2运算可用移位实现,浙江师范大学数理与信息工程学院 计算机图形学,程序如下:BresenhamLine(int xa,int ya,int xb,int yb,int color)int x,y,dx,dy,p,i;putpixel(xa,ya,color);dx=xb-xa;dy=yb-ya;p=2*dy-dx;x=xa;y=ya;putpixel(x,y,color);for(i=2;i=dx;i+)if(p0)y+;p=p+2*dy;else p=p+2*dy-2*d
11、x;x+;putpixel(x,y,color);,Bresenham画线算法,浙江师范大学数理与信息工程学院 计算机图形学,直角坐标法,给定圆心坐标(xc,yc)和半径r,则当x-xc从-r到r加1递增时,可得相应的y值。缺点:浮点运算、开方、取整、不均匀,浙江师范大学数理与信息工程学院 计算机图形学,极坐标法,x=x0+Rcos y=y0+Rsin dx=-Rsind dy=Rcosd xn+1=x n+dx=x n-Rsind x n-(y n-y 0)d y n+1=y n+dy=y n+Rcosd y n+(x n-x 0)d 显然,确定x,y的初值及d值后,即可以增量方式获得圆周上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 图形 生成 计算 直线 椭圆
链接地址:https://www.31ppt.com/p-6559952.html