资源描述:
《 基本图形的生成与计算-直线、圆、椭圆的生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章直线、圆、椭圆生成算法图形的扫描转换(光栅化):确定像素、显示图形的过程。步骤如下:确定像素用图形属性,对像素进行写操作一维图形,用一个像素宽的直线来显示图形二维图形的光栅化,即区域的填充:确定像素,填色或图案。图形的光栅化,必须显示在窗口内,否则不予显示。确定图形的哪些部分在窗口内,哪些在窗口外,即裁剪浙江师范大学数理与信息工程学院计算机图形学图形显示前需要:扫描转换+裁剪裁剪---〉扫描转换:最常用,节约计算时间。扫描转换---〉裁剪:算法简单;浙江师范大学数理与信息工程学院计算机图形学本章内容直线的生成算法圆的生成算法区域填充算法字符的生成
2、图形求交图形裁剪浙江师范大学数理与信息工程学院计算机图形学直线的生成算法确定最佳逼近该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作三个常用算法:数字微分法(DDA)中点画线法Bresenham算法浙江师范大学数理与信息工程学院计算机图形学数字微分法(DDA)假定直线的起点、终点分别为:(xa,ya),(xb,yb),则斜率m为:m=(yb-ya)/(xb-xa)=dy/dx(xi,yi)(xi+1,yi+k)(xi,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=xayi+1=yi+Dyy1=ya并且Dy=m×Dx浙江师范大学数理与信息工程学院计算机图形学数值微分(DDA)法直线方向的8个象限在1a取Dx=1,Dy=m;在1b取Dx=1/m,Dy=1;…得到象限
4、dx
5、>
6、dy
7、?DxDy象限
8、dx
9、>
10、dy
11、?DxDy1atrue1m3atrue-1-m1bfalse1/m13bfalse-1/m-12atrue-1m4a
12、true1-m2bfalse-1/m14btrue1/m-1浙江师范大学数理与信息工程学院计算机图形学数值微分(DDA)法二个规律(1)
13、dx
14、>
15、dy
16、时,
17、Dx
18、=1,
19、Dy
20、=m
21、dx
22、≤
23、dy
24、时,
25、Dx
26、=1/m,
27、Dy
28、=1(2)Dx、Dy的符号与dx、dy的符号相同增量算法:在迭代算法中,如果每一步的x、y值是用前一步的值加上增量来获得,则称为增量算法DDA算法就是一个增量算法浙江师范大学数理与信息工程学院计算机图形学数值微分(DDA)法#include"stdio.h"#include"graphics.h"voiddda_line(i
29、ntxa,intya,intxb,intyb,intc);voidmain(){intdriver=DETECT,mode;intx0,y0,x1,y1,background=WHITE,color=RED;scanf("%d,%d,%d,%d",&x0,&y0,&x1,&y1);initgraph(&driver,&mode,"d:\tc");setbkcolor(backround);dda_line(x0,y0,x1,y1,color);getch();closegraph();}浙江师范大学数理与信息工程学院计算机图形学数值微分(DDA)法v
30、oiddda_line(intxa,intya,intxb,intyb,intc){floatdelta_x,delta_y,x,y;intdx,dy,steps,k;dx=xb-xa;dy=yb-ya;if(abs(dx)>abs(dy))steps=abs(dx);elsesteps=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+=de
31、lta_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-mx1,x1=xa,y1=
32、yam=(yb-ya)/(xb-xa)=dy/dx浙江师范大学数理与信息工程学院计算机图形学B