第2章 基本图形的生成与计算--直线、圆、椭圆的生成.ppt
《第2章 基本图形的生成与计算--直线、圆、椭圆的生成.ppt》由会员分享,可在线阅读,更多相关《第2章 基本图形的生成与计算--直线、圆、椭圆的生成.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),栅格交点表示象素点位置,。,。,。,。,浙江师范大学数理与信息
3、工程学院 计算机图形学,数值微分(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=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
4、1b false 1/m 1 3b false -1/m -1 2a true -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算法就是一个增量算法,浙江师范大学数理与信息工程学院 计算机图形学,数值微分(D
5、DA)法,#include “stdio.h“ #include “graphics.h“ void dda_line(int 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
6、_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算法
7、可知:yi+1=yi+m。由于m不一定是整数,由此式求出的yi也不一定是整数 本算法于1965年由Bresenham提出 在直线生成的算法中,Bresenham算法是最有效的算法之一 令 m=y/x,就0m1的情况来说明Bresenham算法,浙江师范大学数理与信息工程学院 计算机图形学,Bresenham画线算法,设直线从起点(xa,ya)到终点(xb,yb)。直线可表示为方程y=mx+b,其中 b=y1-mx1, x1=xa,y1=ya m=(yb-ya)/(xb-xa)=dy/dx,浙江师范大学数理与信息工程学院 计算机图形学,Bresenham画线算法,设(xi,yi)表示直线上当前点
8、A,B是理想直线上的点,下一个表示直线的点到底取图中的C点还是D点,即当xi+1=xi+1时,yi+1取yi+1还是yi? 选择的原则取决于y与yi及yi+1的距离d1与d2。,xi,xi+1,yi,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
9、-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
10、-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. 不用浮点数,只用整数 3. 只做整数加/减运算,乘2运算可用移位实现,浙江师范大学数理与信息工程学院 计算机图形学,程序如下: BresenhamLine(int xa,int ya,int xb,int yb,int color) int x,y,dx,dy,p,i; putp
11、ixel(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*dx; x+; putpixel(x,y,color); ,Bresenham画线算法,浙江师范大学数理与信息工程学院 计算机图形学,直角坐标法,给定圆心坐标(xc,yc)和半径r, 则 当x-xc从-r到r加1递增时, 可得相应的y值。 缺点:浮点运算、开方、 取整、不均匀,浙江师范大学数理与信息工程学
12、院 计算机图形学,极坐标法,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值后,即可以增量方式获得圆周上的坐标,然后取整可得象素坐标 缺点:浮点运算、乘法运算、取整运算,浙江师范大学数理与信息工程学院 计算机图形学,Bresenham画圆算法,下面仅以圆心为(xc,yc)、半径R为整数的圆为例,讨论圆的生成算法 设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 基本图形的生成与计算-直线、圆、椭圆的生成 基本 图形 生成 计算 直线 椭圆
链接地址:https://www.31doc.com/p-3423253.html