




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形考1
余敦群
湖北大学教计学院
第五章基本图形生成算法
光栅扫描图形系统的结构2
光栅扫描特点:
*数据量大
*显示的离散化
*独立的图形显示处理器
第五章基本图形生成算法
图形显示处理器(加速引擎)3
任务:进行扫描转换(ScanConversion)
扫描转换:将应用程序给出的图形定义数字化为一组像
素强度值,并放到帧缓存器
.扫描转换的工作内容:
-基本图形的生成
-字符的生成
-填充、裁剪
-线型的处理
-彩色处理
-某些变换和管理
第五章基本图形生成算法
坐标系统4
为描述对象、构造场景或完成图形变换,需要
不同的坐标系!
1.建模坐标系一定义对象
2.世界坐标系定义对象与外界环境的关系
3.设备坐标系一定义图形显示的位置、大小
4.规范化坐标-为保证互换性(与设备无
关)而定义的辅助坐标
第五章基本图形生成算法
坐标系统5
ModelingCoordinate
LocalCoordinateNormalizedDeviceCoordinate
MasterCoordinateWorldCoordinateCoordinateScreenCoordinate
第五章基本图形生成算法
5.1直线的扫描转换
光栅扫描显示下画直线存在的问题:
(1)显示速度问题:
例:分辨率:1024x768,24Bit彩色,
帧存容量:1024x768x3=2,359,296Byte
刷新车85Hz:85x2,359,296=200,540,160(Byte/S)
存储器读出时间:〜5ns
(2)显示质量问题:
■阶梯状
■线的粗细不
■线的亮度差异
第五章基本图形生成算法
5.1直线的扫描转换7
直线的绘制要求:
1.直线要直
2.直线的端点要准确,即无定向性和断裂情况
3.直线的亮度、色泽要均匀
4.画线的速度要快
5.要求直线具有不同的色泽、亮度、线型等
解决的问题:
给定直线两端点P。(x0,y0)和Pi(xpy),画出该直线o
第五章基本图形生成算法
5.1直线的扫描转换8
5.1.1数值微分法(DDA法)
直线的微分方程:
DDA算法原理:
y
X,=X+£•△X
I4-1Z
X
£=l/max(|Ax|,|Ay|)图5-2DDA算法原理
第五章基本图形生成算法
5.1直线的扫描转换9
5.1.1数值微分法(DDA法)
max(|Ax|9|Ay|)=|Ax|,即|k0的情况:
i
9+1=%+£•△%=壬+----4=J±1
△x
1
+£+
yi+i=yi-=yi--------Ay=y.±k
Ax
max(|Ax|z|Ay|)=|Ay|,此时|k|ZL
ii
X,=X+£-AX=X+•△X=X±-
Z+1III
Ayk
1
匕+]=匕+£•AJ=匕+----•Ay=y7.±i
△y
第五章基本图形生成算法
5.1直线的扫描转换10
5.1.1数值微分法(DDA法)
注意:round(x)=(int)(x+0.5)
第五章基本图形生成算法
5.1直线的扫描转换11
5.1.1数值微分法(DDA法)
VoidDDAIine(intxOJntyO,intx1,inty1)
(
intdx,dy,eps1,k;
floatx,y,xlncre,ylncre;
dx=x1-x0;dy=y1-y0;
x=xO;y=yO;
If(abs(dx)>abs(dy))eps1=abs(dx);
elseeps1=abs(dy);
xlncre=(float)dy/(float)eps1;
ylncre=(float)dy/(float)eps1;
for(k=0;k<=eps1;k++){
putpixel((int)(x+0,5),(int)(y+0.5));
x+=xlncre;
y+=ylncre;
)
)
第五章基本图形生成算法
直线的扫描转换
5.112
5.1.1数值微分法(DDA法)
特点:
增量算法■!
缺点:
浮点运算、取整一一》废时,且不利于硬件实现。
不利于用硬件实现
第五章基本图形生成算法
5.1直线的扫描转换
5.1.2中点画线法算法
5.1.2中点画线法算法
原理:
假定直线斜率KvL且已确定
点亮象素点P(Xp,Yp)
M为中点,Q为交点
现需确定下一个点亮的象素。
图5-5Brensemham算法生成直线的原理
显然可得出如下结论:若M在Q的下方,选Pu,否则选Pd
k______________________________________________________)
第五章基本图形生成算法
直线的扫描转换
5.114
5.1.2中点画线法算法
算法实现:
假设直线的起点、终点分别为:(XO,YO),(X1,Y1)
该直线方程可表示为:.
F(x,y)=a*x+b*y+c(1)
其中:a=YO-Yl,b=XLXO,c=XO*Yl-Xl*YO
当:F(Xt,Yt)=0一(Xt,Yt)在直线上
F(Xt,Yt)v0一(Xt,Yt)在直线下方
F(Xt9Yt)>0T(Xt,Yt)在直线上方
第五章基本图形生成算法
图5-4直线将平面分为三个区域
第五章基本图形生成算法
5.1直线的扫描转换16
5.1.2中点画线法算法
因此:将中点M坐标代入(
1)式,并判断其符号即
可确定象素点的选取。构
造如下判别式:
d=F(M)
=F(Xp+l,Yp+0.5)
=a(Xp+l)+b(Yp+0.5)+c
由上式可看出,d是x,y线
性函数,可推导d的增量
公式
歹=<
[y(d>o)
第五章基本图形生成算法
5.1直线的扫描转换
5.1.2中点画线法算法
误差项的递推
d<0:
h_____________
9
当d〈0时,取象素Pu,此时
Pu(X1+2,yi+1.5)
_______J______
再下一个象素的判别式为:9Q
(
F=F(Xp+2,Yp+L5)(Xi+1,yi+o..5)
=a(Xp+2)+b(Yp+1.5)+c(xi?yi)p:
=a(Xp+l)+b(Yp+0.5)+c+a+b
=d+a+b;d<0
第五章基本图形生成算法
5.1直线的扫描转换18
5.1.2中点画线法算法
误差项的递推
d>0:
当d>=0时,取象素Pd,此
_____P_u41_____
时再下一个象素的判别式「xi+2:yi+0.5)
))1
%:(Xi+1,yi+o.;
—:_0_:_o-----(
T=F(Xp+29Yp+0.5)(Xi,yi)Pd
=a(Xp+2)+b(Yp+0.5)+c
=a(Xp+l)+b(Yp+0.5)+c+ad)>=0
=d+a;
第五章基本图形生成算法
5.1直线的扫描转换19
5.1.2中点画线法算法
d的初始值可按下式计算:
dO=F(X0+l,Y0+0.5)
=a(X0+l)+b(Y0+0.5)+c
=F(X0,Y0)+a+0.5b
=a+0.5b
由于只用d的符号作判断,为了只包含整数运算,
可取2d代替d,这样可得如下中点算法程序:
第五章基本图形生成算法
5.1直线的扫描转换20
5.1.2中点画线法算法
MidpointLine(X0,Y0,XI,Yl,Color)
intX0,Y0,XI,Yl,Color;
(
inta,b,dl,d2,d,x,y;
a=Y0-Yl;b=Xl-X0;
d=a+a+b;
dl=a+a;
d2=a+b+a+b;
x=X0;y=Y0;
drawpixle(x,y,Color);
while(x<Xl){
if(d<0){
x++;y++;
d+=d2;
}
第五章基本图形生成算法
5.1直线的扫描转换21
5.1.2中点画线法算法
else{
x++;
d+=dl;
}
drawpixle(x,y,Color);
}/*while*/
}/*MidPointLine*/
按照中点划线算法,确定直线(0,0)(5,3)的点
亮象素。列出计算过程,并列出所选象素坐标。
第五章基本图形生成算法
5.1直线的扫描转换22
5.1.3Bresenham画线算法
5.1.3改进的Bresenham算法
第五章基本图形生成算法
5.1直线的扫描转换23
5.1.3Bresenham画线算法
假定直线斜率,O〈kvl,起点坐壬+i=/+1
标为(x,y);3+18>0.5)
匕+i=<
下一个点亮象素可能是:[兀(d<0.5)
(x+l,y)或(x+l,y+l)。这可
通过d值的大小来确定:
误差项的计算
d=d+k,当d>l时d=d-l;
•d初=0,
当d<0.5取(x+l,y),否则取
•每走一步:d=d+k
(x+l,y+l)o
•方向上走了三”>
d=d-l
第五章基本图形生成算法
5.1直线的扫描转换24
5.1.3Bresenham画线算法
算法步骤:
1.输入直线的两端点Po(X0,y0)和P[(X],y1)。
2.计算初始值Ax、Ay>d=0>x=x0>y=y0o
.绘制点o
4.d更新为d+k,判断d的符号。若d>0.5,则(x,y)更新为
(x+l,y+l),同时将d更新为d・1;否则(x,y)更新为(x+1,y)。
5.当直线没有画完时,重复步骤3和4。否则结束。
第五章基本图形生成算法
5.1直线的扫描转换25
5.1.3Bresenham画线算法
x,=x+1
Z+1Z
改进1:令e=d-0.5<'儿.+1(e>0)
兀+i=<
〔兀(e<。)
•e初=・0.5,
•每走一步有e=e+ko
•if(e>0)thene=e-l
第五章基本图形生成算法
5.1直线的扫描转换26
5.1.3Bresenham画线算法
算法步骤为:
L输入直线的两端点Po(Xo,y。)和Pi(Xi,yJ。
2.计算初始值△、、Ay>^e=-O.57^x=xo>y=y0o
3.绘制点(x,y)o
4.e更新坦判断e的符号。若e>0,则(x,y)更新为
(x+Ly+1),同时将e更畿枣三£)否则(x,y)更新为(x+l,y)。
5.当直线没有画完时,重复步骤3和4。否则结束。
第五章基本图形生成算法
5.1直线的扫描转换27
5.1.3Bresenham画线算法
改进2:用2eZ\x来替换e
€初="Ax,
每走一步有e=e+2△y。
if(e>0)thene=e-2Ax
第五章基本图形生成算法
5.1直线的扫描转换28
5.1.3Bresenham画线算法
算法步骤:
1.输入直线的两端点Po(Xo,y°)和Pi(Xi汹)o
2.计算初始值△*、N、《21)x=x0、y=y0o
3.绘制点(x,y)o
4.e更新为阡泾“判断e的符号。若e>0,则(x,y)更新为
(x+Ly+1),同时将e更新为日入“否则(x,y)更新为(x+l,y)。
5.当直线没有画完时,重复步骤3和4。否则结束。
程序如下:BresenhamLine(xO,yO,xl,yl,color)
intxO,yO,xl,yl,color;
(
intx,y,dx,dy;
floatk,e;
dx=xl-xO;
dy=yi-yO;
k=dy/dx;
e=-0.5;x=x0;y=yO;e=-dx;
for(i=0;i<=dx;i++){
drawpixel(x,y,color);
x++;e=e+k;el=e-0.5;e=e+2*dy;el=e-dx;
if(el>0)e=e-1;e=e-2*dx;
if(e>=0)y++;
)
)
Bresenham圆线例
直线端点为(20,10)和(30,18),用Bresenham法画线
解:Ax=10,Ay=8,=Ay/Ax=0.8,2Ay=16,2Ax=20
分=-Ax=—10
画初始点(20,10),并根据判别式确定沿线段路径的后续像素位置如下表:
ie'ti+1)
19
06(21,11)
12(22,12)■
2-2(23,12)・
314(24,13)••
410(25,14)•
56(26,15)
62(27,16)・
12••
7-2(28,16)11
814(29,17)・
10.
910(20,18)2021222324252627282930
第五章基本图形生成算法
5.2圆的扫描转换31
5.2.1圆的对称性
利用八分圆的对称性特点
,可以简化圆的扫描转
换算法。
如果圆的圆心在原点,则
可以由其中某个八分圆
的圆周上的某点(x,y
)计算出其他七个八分
圆圆周上对应的点的坐
标。
由此可构造相应算法,由
图中阴影的圆周复制生
成整个圆周。
第五章基本图形生成算法
5.2圆的扫描转换32
5.2.1圆的对称性
算法如下:
intCircle_Points(x,y,value)
intx,y,value;
{drawpixel(x,y,value);
drawpixel(x,-y,value);
drawpixel(-x,y,value);
drawpixel(-x,-y,value);
drawpixel(y,x,value);
drawpixel(-y,x,value);
drawpixel(y,value);
drawpixel(-y,value);
第五章基本图形生成算法
5.2圆的扫描转换33
5.2.2角度DDA画圆算法
1、角度DDA法
若已知圆的方程:x+y=R
下=Xo+Rcos0
iy=y0+Rsin0
jdx=-Rsin0d0
[dy=Rcos0d0
jXn+1=xn+dx
iyn+i=yn+dy
(xn+i=xn-(yn-yo)d0
iyn+i=yn+(xn-xo)d0
第五章基本图形生成算法
5.2圆的扫描转换34
5.2.2角度DDA画圆算法
角增量0(弧度)的选取:de=e/(n-l)
n越大,点越多,速度越慢。所以在不同的精度下,对于不
同的半径给定不同的de:
使max(|Ax|,|Ay|)<1
因:Ax=-(yn-yO)d0
Ay=(xn-xO)d0
即max(|(yn-yO)dO\,|(xn-xO)d0|)<1
又因为|yn-yO|,|xn-xO|最大是R
所以:R|dO|<1^>|de|<l/R
绝对值表示画圆弧有顺时针和逆时针之别,
为精度计,取|d0|=1/(R+1)
第五章基本图形生成算法
5.2圆的扫描转换35
5.2.2角度DDA画圆算法
算法:
Arc-dda(xc,yc,r,al,a2,color)
intxc,yc,r,color;
doubleal,a2;
{inti,steps,x,y;
doubleda,radin;
da=l/(r+l);
radin=a2-al;steps=radin/da;
x=r*cos(al);y=r*Sin(al);
for(i=0;i<steps;i++)
{drawpixel(x+xc,y+yc,color);
x=x-y*da;y=y+x*da;
}
)
第五章基本图形生成算法
5.2圆的扫描转换
5.2.3中点画圆法
利用圆的对称性,只须讨论1/8圆(第一象限
中的第二个八分圆)。
解决问题:
第五章基本图形生成算法
5.2圆的扫描转换
5.2.3中点画圆法
基本原理:假设P(Xp+1,Yp)为当前点亮象
素,那么,下一个点亮的象素可能是P1
(Xp+1,Yp)或P2(Xp+1,Yp+l)o
第五章基本图形生成算法
5.2圆的扫描转换38
5.2.3中点画圆法
2)推导过程:
①构造一函数:
222
F(X,Y)=X+Y-R
F(X,Y)=0(X,Y)在圆上;
F(X,Y)<0(X,Y)在圆内;
F(X,Y)>0(X,Y)在圆外。
M为Pl、P2间的中点,M=(Xp+l,Yp・0・5)
有如下结论:
F(M)<0取P1
F(M)>=0取P2
第五章基本图形生成算法
5.2圆的扫描转换39
5.2.3中点画圆法
②构造判别式d=F(M)=F(xp+1,yp-0.5)
222
=(xp+1)+(yP-0.5)-R
若d<0,则Pl为下一个象素,那么再
下一个象素的判别式为:
pPl
yi-----<)----------cp---1i--------
d=F(xp+2,yp-0.5)
222
=(x+2)+(y-0.5)-Ryii-----------()---4k---
ppP2
=d+2xp+3yi乙
即d的增量为2xp+3.
XiX:+1X:L+2
(a)d<=C)的情;兄
第五章基本图形生成算法
5.2圆的扫描转换
5.2.3中点画圆法
若d>=0,则P2为下一个象素,那
么再下一个象素的判别式为:
pPI
d=F(xp+2,yp-1.5)yi---------\bi-------J
222
=(xp+2)+(yp-1.5)-R
yii)P2,1----
=d+2(xp-yp)+5
即d的增量为2(xp・yp)+5.
yi41----
③计算d的初值:X:1Xi+lx:i+2
dO=F(l9R-0.5)(b)d>0侪J情况
=1+(R-0.5)2-R2
=1.25-R
第五章基本图形生成算法
5.2圆的扫描转换41
5.2.3中点画圆法
算法步骤:
L输入圆的半径R。
计算初始值、
2.251)x=0y=Ro
3.绘制点(x,y逆其W分圆中的另外七个对称点。
4.判断d的符号。若dWO,则先将d更新式叵吟
再将(X,y)更新为(x+1,y);否则先日才更新4
(x-y再将(x,y)更新为(x+1,y-1)。
5.当x〈y时,重复步骤3和4。否则结束。
第五章基本图形生成算法
5.2圆的扫描转换42
5.2.3中点画圆法
MidpointCircle(r,color)
intr,color;
{
intx,y;
floatd;
x=0;y=r;d=1.25-r;else
drawpixel(x,y,color);
while(x<y)d+=2*(x-y)+5;
{x++;y-;
if(d<0)
(
d+=2*x+3;x++;
第五章基本图形生成算法
5.2圆的扫描转换43
5.2.3中点画圆法
改进1:用d-O.25代替d^e=d-0,25=>e=1-R
隹।■:土取贝Ud<0e<—0.25
舁/玄少麻:而e为整数,则e<—0.25等价
1.输入圆的半径R。于e<0o再将e仍用d来表示
2.计算初始喳E)x=0、y=Ro
3.绘制点(x,y)及其在八分圆中的另外七个对称点。
4.判断d的符号。函三Q则先将d更新为d+2x+3,再
将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-
y)+5,再将(x,y)更新为(x+1,y-1)。
5.当x<y时,重复步骤3和4。否则结束。
第五章基本图形生成算法
5.2圆的扫描转换44
5.2.3中点画圆法
改进2:因判别式d的增量是x,y的线性函数。
每当x递增1,d递增Ax=2;
每当y递增1,d递减Ay=2;
由于初始象素为(0,r),所以Ax的初
值为3,Ay的初值为一2r+2。再注意到乘2运
算可以改用加法实现,至此我们可写出不含乘
法,仅用整数实现的中点画圆算法。
第五章基本图形生成算法
5.2圆的扫描转换45
5.2.3中点画圆法
MidpointCircle(r,color)if(d<0)
intr,color;(
d+=deltax;
(
deltax+=2;x++;
intx,y,deltax,deltay,d;
)
x=0;y=r;d=l-r;else
deltax=3;deltay=2-r-r;(
drawpixel(x,y,color);d+=(deltax+deltay);
while(x<y)deltax+=2;deltay+=2;
x++;y-;
例题:画第一象限中,半径R=10,圆心在原点的圆弧
46
III
1---A-
解:起点为(x0,y0)=(0,10)9
8___L
e0=—R=-%(x19y1)=(l,10)
7---r
e1=e。+2x°+3=-6;(x,y)=(2,10)
226___L
e2=ej+2xj+3=-1;(x3,y3)=(3,10)5---r
4---L
e3=e2+2X2+3=6;(x4,y4)=(4,9)(
3II
TTT
------rI-
e=e+2(X-y)+5=-3;(x,y)=(5,9)I
4333552-4++
「一一「I-
I
-
111
;一
e5=e4+2x4+3=8(x6,y6)=(6,8)___L-
-
e=e+2(X5—y)+5=5;(x,y)=(7,7)
655770
123456
若e<09->ei+1=G+2Q+3
e>=09->ei+1=%+2(Xf~yt)+5
第五章基本图形生成算法
5.2圆的扫描转换47
5.2.3Bresenham画圆法
5.2.3.Bresenham圆圆算法
为讨论方便,仅考虑圆心在原点,半径为R的第一象限
上的一段圆弧。且取(0,R)为起点,按顺时针方向
绘制该1/4圆弧。
V(x,y-1)D(x+1,y-1)
Figure2
第五章基本图形生成算法
5.2圆的扫描转换48
5.2.3Bresenham画圆法
原理:
如图1・3所示,从当前点
亮象素出发,按顺时针
方向生成圆时,最佳逼
近该圆的下三个象素只
可能为H、D、V三象素
之一。H、D、V中距圆
周边界距离最小者,即
为所求的象素点。
第五章基本图形生成算法
5.2圆的扫描转换49
5.2.3Bresenham画圆法
算法:
H、D、V三点到圆心的距离平方与圆的半径平
方差,即为H、D、V到圆弧距离的一种度量:
222
AH=(x+1)+y-R;
222-----
AD=(X+1)+(y-1)-R;了
222
Av=x+(y-1)-R;(X,y)]—匚3
------©——OH
第五章基本图形生成算法
5.2圆的扫描转换50
5.2.3Bresenham画圆法
为了根据这些度量值可确定最佳象素
点,首先,将H、D、V与理想圆
弧的关系进行分类。
存在以下五种情况:
1)H、D、V全在圆内;
2)H在圆外,D、V在圆内;Figure3
3)D在圆上,H在圆外,V在圆内;
4)H、D在圆外,V在圆内;
5)H、D、V全在圆外。
与Bresenham画线算法一样,按照上述不同类型
,找出误差度量的递推公式,然后判别它的正、
负性即可确定最佳逼近的象素点。
第五章基本图形生成算法
5.2圆的扫描转换51
5.2.3Bresenham画圆法
当AD<0,只可能为1或2种情况。为了确定是H
还是D,可用如下判别式:
=
8HD|AH|-|AD|
6HD<0则应选H,否则选D。
第五章基本图形生成算法
5.2圆的扫描转换52
5.2.3Bresenham画圆法
对于第2种情况:
SHD=AH+AD
2222
=(x+1)+y-R+(x+l)+(y-l)-R
=2Ap+2y-1
对于第1种情况:
Vy是x的单调递减函数
・•.H为下一点亮象素。
另,止匕时AHvO和AD<0
△H+Ap=2AJ)+2y-1v0
综上两种情况可得如下结论:
在时,若2(A.+y)・lWO,则取H,
否则取力
第五章基本图形生成算法
5.2圆的扫描转换53
5.2.3Bresenham画圆法
当AD>0,只可能有4、5两种情况。且最佳象素
点为D或V,可用如下判别式:
SDV=|AD|-|Ay|
6DV<0则应选D,否则选V。
对于第4种情况:
6DV=AD+Ay(AD>0,Ay<0)
222222
=(x+l)+(y-1)-R+(x)+(y-1)-R
=2(AD-x)-1----•
对于第5种情况:(x4
D,V都在圆外,显然v为所选象素。上2
A>O,A>O
注意:vDVkXkpkn.
F,8Ure3
AAD+AV=2(AD-X)-1>0下「
第五章基本图形生成算法
5.2圆的扫描转换54
5.2.3Bresenham画圆法
综上两种情况可得如下结论:
在AQ〉O时,若2则取D,
否则取V
当AD=0此时D是最佳象素。
总结上述分析结果:
当AD〉0,若2(AD-X)・1>0,取V,否则取D
当AD<0,若2(AD+y)」W0,取H,否则取D
当AD=0,取D。
第五章基本图形生成算法
5.2圆的扫描转换55
5.2.3Bresenham画圆法
关键的问题就是计算AD(见An的计算公式)
采用增量法,获得AD的计算公会。
分三种情况:HM
下一象素为H时,则—一
H=(x',y')=(x+l,y)
222
AD'=((x+l)+l)+(y-l)-R
222
=(x+l)+(y-1)-R+2(x+l)+1
=AD+2(X+1)+1
=AD+2x'+1
第五章基本图形生成算法
5.2圆的扫描转换56
5.2.3Bresenham画圆法
下一象素为D时
D=(x',y')=(x+l,y・l)
222
AD=((X+1)+1)+((y-l)-l)-R
222
=(x+l)+(y-1)-R+2(x+l)-2(y-l)+1
=AD+2(x+l)-2(y-l)+2
、1
下一象素为V时H
-2
V=(x\y5)=(x,y-1)
222
AD=(X+1)+((y-l)-l)-RDFigure3
222
=(X+1)+(y-1)-R-2(y-l)+1
=AD-2(y-l)+13
第五章基本图形生成算法
5.2圆的扫描转换57
5.2.3Bresenham画圆法
有了上述AD的递推计算公式,还需计算出AD的
初值。
•.*圆弧的起点为(0,R)
,AD的初值为:;一
222
AD=(0+1)+(R-I)-R
=2(1-R)
BresenhamCircle(r,color)
intr,color;
(
intx,y,delta,dl,d2,dir
x=0;y=r;
delta=2*(1-r)
while(y>=0){
drawpixel(x,y,color);
if(delta<0){
dl=2*(delta+y)-1;
if(dl<=0)dir=1;
elsedir=2;
)
elseif(delta>0){
d2=2*(delta-x)-l;
if(d2v=0)dir=2;
elsedir=3;
elsedir=2;
switch(dir){
caseX:
x++;
delta+=2*x+1;
break;
case2:
x++;Y—;
delta+=2*(x-y+1)+1;
break;
case3:
delta+=-2*y+1;
break;
}/*endofswitch*/
}/*endofwhile*/
}/*endofBresenhamCircle*/
第五章基本图形生成算法
5.3椭圆的扫描转换60
图5-14长半轴为a,短半轴为b的标准椭圆
♦:♦对于椭圆上的点,有
F(x,y)=0;
222222
F(x,y)=bx+ay—ab0
♦:♦对于椭圆外的点,F(x,y)>0;
♦:♦对于椭圆内的点,F(x,y)<0o
第五章基本图形生成算法
5.3椭圆的扫描转换61
解决问题:
第五章基本图形生成算法
5.3椭圆的扫描转换62
椭圆方程厂(》,y)=/J+°2y2一°2b2=。
x分量
图5-15第一象限的椭圆弧
分界点:法向量两分量相等的点,以弧上斜率为一1的点
第五章基本图形生成算法
5.3椭圆的扫描转换63
当前点P(Xj,yj)
候选点Pu(Xj+1,y()
Pd(Xj+1,yj-1)
中点(Xj+1,y-Q.5)
图5-16中点椭圆绘制算法的原理
引理57:若在当前中点,法向量的y分量比x分量大,即
2
(x,+1)<a(y.-0.5)
则说明椭圆弧从上部分转入下部分。
第五章基本图形生成算法
5.3椭圆的扫描转换64
5.3.1椭圆的中点Bresenham算法
5.3.1椭圆的中点Bresenham算法
图5-16中点椭圆绘制算法的原理
先推导上半部分的椭圆绘制公式
再推导下半部分的椭绘制公式
第五章基本图形生成算法
5.3椭圆的扫描转换65
5.3.1椭圆的中点Bresenham算法
先推导上半部分的椭圆园绘制公式
判别式误差项的递推判别式的初值
第五章基本图形生成算法
5.3椭圆的扫描转换66
5.3.1椭圆的中点Bresenham算法
判别式
222222
d]=F{x,+l,yz.—0.5)=b(x+1)+a{y.-0.5)—ab
♦:♦若(1口0,取PG+la)
5-17上半部分椭圆弧的绘制原理
第五章基本图形生成算法
5.3椭圆的扫描转换67
5.3.1椭圆的中点Bresenham算法
误差项的递推P
yi---------•——・-------Q----------
222222
d1=F(X,+\,y.-0.5)=b(x.+1)+a();-0.5)-ab---------------
yi-1------------------------<1——<1------
yi-2------------------------------------------------------
情况一:
xixi+1xi+2
d[W0:(a)d<=0的情况
222222
di=F(x,+2,、/—0.5)=b(x,+2)+a(y.—0.5)—ab
,2,,22,,22,2,2
=b(x.+\)++a(y.—0.5)—ab+b(2x.+3)
2
=d、+b(2x.+3)
第五章基本图形生成算法
5.3椭圆的扫描转换
5.3.1椭圆的中点Bresenham算法
误差项的递推yi_
■,2,22,22,2
7
d}-7(x.+l,j;.-0.5)=b(x.+1)+a(y.-0.5)-ab------
yi-1----------------9------Q
yi-2------------------------19-----
情况二:
xixi+1xi+2
d":
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖批发商的供应链优化策略考核试卷
- 知艾防艾 共享健康-防艾滋病传染病教育主题班会
- 春季防溺水安全教育主题班会
- 加快建设教育强国的路径与实践
- 2025企业员工团体意外伤害保险合同样本
- 2025YY借用人员合同范本
- 2025租赁合同到期不续签如何处理赔偿问题
- 2025商业店铺租赁经营合同
- 2025年土地置换住宅合同
- 2025标准二手车买卖合同协议书样本
- 义务兵家庭优待金审核登记表
- GA 255-2022警服长袖制式衬衣
- GB/T 5202-2008辐射防护仪器α、β和α/β(β能量大于60keV)污染测量仪与监测仪
- GB/T 39560.4-2021电子电气产品中某些物质的测定第4部分:CV-AAS、CV-AFS、ICP-OES和ICP-MS测定聚合物、金属和电子件中的汞
- GB/T 3452.4-2020液压气动用O形橡胶密封圈第4部分:抗挤压环(挡环)
- 计划生育协会基础知识课件
- 【教材解读】语篇研读-Sailing the oceans
- 抗肿瘤药物过敏反应和过敏性休克
- 排水管道非开挖预防性修复可行性研究报告
- 交通工程基础习习题及参考答案
- 线路送出工程质量创优项目策划书
评论
0/150
提交评论