版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算機(jī)圖形考1
余敦群
湖北大學(xué)教計學(xué)院
第五章基本圖形生成算法
光柵掃描圖形系統(tǒng)的結(jié)構(gòu)2
光柵掃描特點(diǎn):
*數(shù)據(jù)量大
*顯示的離散化
*獨(dú)立的圖形顯示處理器
第五章基本圖形生成算法
圖形顯示處理器(加速引擎)3
任務(wù):進(jìn)行掃描轉(zhuǎn)換(ScanConversion)
掃描轉(zhuǎn)換:將應(yīng)用程序給出的圖形定義數(shù)字化為一組像
素強(qiáng)度值,并放到幀緩存器
.掃描轉(zhuǎn)換的工作內(nèi)容:
-基本圖形的生成
-字符的生成
-填充、裁剪
-線型的處理
-彩色處理
-某些變換和管理
第五章基本圖形生成算法
坐標(biāo)系統(tǒng)4
為描述對象、構(gòu)造場景或完成圖形變換,需要
不同的坐標(biāo)系!
1.建模坐標(biāo)系一定義對象
2.世界坐標(biāo)系定義對象與外界環(huán)境的關(guān)系
3.設(shè)備坐標(biāo)系一定義圖形顯示的位置、大小
4.規(guī)范化坐標(biāo)-為保證互換性(與設(shè)備無
關(guān))而定義的輔助坐標(biāo)
第五章基本圖形生成算法
坐標(biāo)系統(tǒng)5
ModelingCoordinate
LocalCoordinateNormalizedDeviceCoordinate
MasterCoordinateWorldCoordinateCoordinateScreenCoordinate
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換
光柵掃描顯示下畫直線存在的問題:
(1)顯示速度問題:
例:分辨率:1024x768,24Bit彩色,
幀存容量:1024x768x3=2,359,296Byte
刷新車85Hz:85x2,359,296=200,540,160(Byte/S)
存儲器讀出時間:?5ns
(2)顯示質(zhì)量問題:
■階梯狀
■線的粗細(xì)不
■線的亮度差異
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換7
直線的繪制要求:
1.直線要直
2.直線的端點(diǎn)要準(zhǔn)確,即無定向性和斷裂情況
3.直線的亮度、色澤要均勻
4.畫線的速度要快
5.要求直線具有不同的色澤、亮度、線型等
解決的問題:
給定直線兩端點(diǎn)P。(x0,y0)和Pi(xpy),畫出該直線o
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換8
5.1.1數(shù)值微分法(DDA法)
直線的微分方程:
DDA算法原理:
y
X,=X+£?△X
I4-1Z
X
£=l/max(|Ax|,|Ay|)圖5-2DDA算法原理
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換9
5.1.1數(shù)值微分法(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直線的掃描轉(zhuǎn)換10
5.1.1數(shù)值微分法(DDA法)
注意:round(x)=(int)(x+0.5)
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換11
5.1.1數(shù)值微分法(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;
)
)
第五章基本圖形生成算法
直線的掃描轉(zhuǎn)換
5.112
5.1.1數(shù)值微分法(DDA法)
特點(diǎn):
增量算法■!
缺點(diǎn):
浮點(diǎn)運(yùn)算、取整一一》廢時,且不利于硬件實現(xiàn)。
不利于用硬件實現(xiàn)
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換
5.1.2中點(diǎn)畫線法算法
5.1.2中點(diǎn)畫線法算法
原理:
假定直線斜率KvL且已確定
點(diǎn)亮象素點(diǎn)P(Xp,Yp)
M為中點(diǎn),Q為交點(diǎn)
現(xiàn)需確定下一個點(diǎn)亮的象素。
圖5-5Brensemham算法生成直線的原理
顯然可得出如下結(jié)論:若M在Q的下方,選Pu,否則選Pd
k______________________________________________________)
第五章基本圖形生成算法
直線的掃描轉(zhuǎn)換
5.114
5.1.2中點(diǎn)畫線法算法
算法實現(xiàn):
假設(shè)直線的起點(diǎn)、終點(diǎn)分別為:(XO,YO),(X1,Y1)
該直線方程可表示為:.
F(x,y)=a*x+b*y+c(1)
其中:a=YO-Yl,b=XLXO,c=XO*Yl-Xl*YO
當(dāng):F(Xt,Yt)=0一(Xt,Yt)在直線上
F(Xt,Yt)v0一(Xt,Yt)在直線下方
F(Xt9Yt)>0T(Xt,Yt)在直線上方
第五章基本圖形生成算法
圖5-4直線將平面分為三個區(qū)域
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換16
5.1.2中點(diǎn)畫線法算法
因此:將中點(diǎn)M坐標(biāo)代入(
1)式,并判斷其符號即
可確定象素點(diǎn)的選取。構(gòu)
造如下判別式:
d=F(M)
=F(Xp+l,Yp+0.5)
=a(Xp+l)+b(Yp+0.5)+c
由上式可看出,d是x,y線
性函數(shù),可推導(dǎo)d的增量
公式
歹=<
[y(d>o)
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換
5.1.2中點(diǎn)畫線法算法
誤差項的遞推
d<0:
h_____________
9
當(dāng)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直線的掃描轉(zhuǎn)換18
5.1.2中點(diǎn)畫線法算法
誤差項的遞推
d>0:
當(dāng)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直線的掃描轉(zhuǎn)換19
5.1.2中點(diǎn)畫線法算法
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的符號作判斷,為了只包含整數(shù)運(yùn)算,
可取2d代替d,這樣可得如下中點(diǎn)算法程序:
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換20
5.1.2中點(diǎn)畫線法算法
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直線的掃描轉(zhuǎn)換21
5.1.2中點(diǎn)畫線法算法
else{
x++;
d+=dl;
}
drawpixle(x,y,Color);
}/*while*/
}/*MidPointLine*/
按照中點(diǎn)劃線算法,確定直線(0,0)(5,3)的點(diǎn)
亮象素。列出計算過程,并列出所選象素坐標(biāo)。
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換22
5.1.3Bresenham畫線算法
5.1.3改進(jìn)的Bresenham算法
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換23
5.1.3Bresenham畫線算法
假定直線斜率,O〈kvl,起點(diǎn)坐壬+i=/+1
標(biāo)為(x,y);3+18>0.5)
匕+i=<
下一個點(diǎn)亮象素可能是:[兀(d<0.5)
(x+l,y)或(x+l,y+l)。這可
通過d值的大小來確定:
誤差項的計算
d=d+k,當(dāng)d>l時d=d-l;
?d初=0,
當(dāng)d<0.5取(x+l,y),否則取
?每走一步:d=d+k
(x+l,y+l)o
?方向上走了三”>
d=d-l
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換24
5.1.3Bresenham畫線算法
算法步驟:
1.輸入直線的兩端點(diǎn)Po(X0,y0)和P[(X],y1)。
2.計算初始值A(chǔ)x、Ay>d=0>x=x0>y=y0o
.繪制點(diǎn)o
4.d更新為d+k,判斷d的符號。若d>0.5,則(x,y)更新為
(x+l,y+l),同時將d更新為d?1;否則(x,y)更新為(x+1,y)。
5.當(dāng)直線沒有畫完時,重復(fù)步驟3和4。否則結(jié)束。
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換25
5.1.3Bresenham畫線算法
x,=x+1
Z+1Z
改進(jìn)1:令e=d-0.5<'兒.+1(e>0)
兀+i=<
〔兀(e<。)
?e初=?0.5,
?每走一步有e=e+ko
?if(e>0)thene=e-l
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換26
5.1.3Bresenham畫線算法
算法步驟為:
L輸入直線的兩端點(diǎn)Po(Xo,y。)和Pi(Xi,yJ。
2.計算初始值△、、Ay>^e=-O.57^x=xo>y=y0o
3.繪制點(diǎn)(x,y)o
4.e更新坦判斷e的符號。若e>0,則(x,y)更新為
(x+Ly+1),同時將e更畿棗三£)否則(x,y)更新為(x+l,y)。
5.當(dāng)直線沒有畫完時,重復(fù)步驟3和4。否則結(jié)束。
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換27
5.1.3Bresenham畫線算法
改進(jìn)2:用2eZ\x來替換e
€初="Ax,
每走一步有e=e+2△y。
if(e>0)thene=e-2Ax
第五章基本圖形生成算法
5.1直線的掃描轉(zhuǎn)換28
5.1.3Bresenham畫線算法
算法步驟:
1.輸入直線的兩端點(diǎn)Po(Xo,y°)和Pi(Xi洶)o
2.計算初始值△*、N、《21)x=x0、y=y0o
3.繪制點(diǎn)(x,y)o
4.e更新為阡涇“判斷e的符號。若e>0,則(x,y)更新為
(x+Ly+1),同時將e更新為日入“否則(x,y)更新為(x+l,y)。
5.當(dāng)直線沒有畫完時,重復(fù)步驟3和4。否則結(jié)束。
程序如下: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圓線例
直線端點(diǎn)為(20,10)和(30,18),用Bresenham法畫線
解:Ax=10,Ay=8,=Ay/Ax=0.8,2Ay=16,2Ax=20
分=-Ax=—10
畫初始點(diǎn)(20,10),并根據(jù)判別式確定沿線段路徑的后續(xù)像素位置如下表:
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圓的掃描轉(zhuǎn)換31
5.2.1圓的對稱性
利用八分圓的對稱性特點(diǎn)
,可以簡化圓的掃描轉(zhuǎn)
換算法。
如果圓的圓心在原點(diǎn),則
可以由其中某個八分圓
的圓周上的某點(diǎn)(x,y
)計算出其他七個八分
圓圓周上對應(yīng)的點(diǎn)的坐
標(biāo)。
由此可構(gòu)造相應(yīng)算法,由
圖中陰影的圓周復(fù)制生
成整個圓周。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換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圓的掃描轉(zhuǎn)換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圓的掃描轉(zhuǎn)換34
5.2.2角度DDA畫圓算法
角增量0(弧度)的選?。篸e=e/(n-l)
n越大,點(diǎ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圓的掃描轉(zhuǎn)換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圓的掃描轉(zhuǎn)換
5.2.3中點(diǎn)畫圓法
利用圓的對稱性,只須討論1/8圓(第一象限
中的第二個八分圓)。
解決問題:
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換
5.2.3中點(diǎn)畫圓法
基本原理:假設(shè)P(Xp+1,Yp)為當(dāng)前點(diǎn)亮象
素,那么,下一個點(diǎn)亮的象素可能是P1
(Xp+1,Yp)或P2(Xp+1,Yp+l)o
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換38
5.2.3中點(diǎn)畫圓法
2)推導(dǎo)過程:
①構(gòu)造一函數(shù):
222
F(X,Y)=X+Y-R
F(X,Y)=0(X,Y)在圓上;
F(X,Y)<0(X,Y)在圓內(nèi);
F(X,Y)>0(X,Y)在圓外。
M為Pl、P2間的中點(diǎn),M=(Xp+l,Yp?0?5)
有如下結(jié)論:
F(M)<0取P1
F(M)>=0取P2
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換39
5.2.3中點(diǎn)畫圓法
②構(gòu)造判別式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圓的掃描轉(zhuǎn)換
5.2.3中點(diǎn)畫圓法
若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圓的掃描轉(zhuǎn)換41
5.2.3中點(diǎn)畫圓法
算法步驟:
L輸入圓的半徑R。
計算初始值、
2.251)x=0y=Ro
3.繪制點(diǎn)(x,y逆其W分圓中的另外七個對稱點(diǎn)。
4.判斷d的符號。若dWO,則先將d更新式叵吟
再將(X,y)更新為(x+1,y);否則先日才更新4
(x-y再將(x,y)更新為(x+1,y-1)。
5.當(dāng)x〈y時,重復(fù)步驟3和4。否則結(jié)束。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換42
5.2.3中點(diǎn)畫圓法
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圓的掃描轉(zhuǎn)換43
5.2.3中點(diǎn)畫圓法
改進(jìn)1:用d-O.25代替d^e=d-0,25=>e=1-R
隹?■:土取貝Ud<0e<—0.25
舁/玄少麻:而e為整數(shù),則e<—0.25等價
1.輸入圓的半徑R。于e<0o再將e仍用d來表示
2.計算初始喳E)x=0、y=Ro
3.繪制點(diǎn)(x,y)及其在八分圓中的另外七個對稱點(diǎn)。
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.當(dāng)x<y時,重復(fù)步驟3和4。否則結(jié)束。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換44
5.2.3中點(diǎn)畫圓法
改進(jìn)2:因判別式d的增量是x,y的線性函數(shù)。
每當(dāng)x遞增1,d遞增Ax=2;
每當(dāng)y遞增1,d遞減Ay=2;
由于初始象素為(0,r),所以Ax的初
值為3,Ay的初值為一2r+2。再注意到乘2運(yùn)
算可以改用加法實現(xiàn),至此我們可寫出不含乘
法,僅用整數(shù)實現(xiàn)的中點(diǎn)畫圓算法。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換45
5.2.3中點(diǎn)畫圓法
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,圓心在原點(diǎn)的圓弧
46
III
1---A-
解:起點(diǎn)為(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圓的掃描轉(zhuǎn)換47
5.2.3Bresenham畫圓法
5.2.3.Bresenham圓圓算法
為討論方便,僅考慮圓心在原點(diǎn),半徑為R的第一象限
上的一段圓弧。且?。?,R)為起點(diǎn),按順時針方向
繪制該1/4圓弧。
V(x,y-1)D(x+1,y-1)
Figure2
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換48
5.2.3Bresenham畫圓法
原理:
如圖1?3所示,從當(dāng)前點(diǎn)
亮象素出發(fā),按順時針
方向生成圓時,最佳逼
近該圓的下三個象素只
可能為H、D、V三象素
之一。H、D、V中距圓
周邊界距離最小者,即
為所求的象素點(diǎn)。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換49
5.2.3Bresenham畫圓法
算法:
H、D、V三點(diǎn)到圓心的距離平方與圓的半徑平
方差,即為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圓的掃描轉(zhuǎn)換50
5.2.3Bresenham畫圓法
為了根據(jù)這些度量值可確定最佳象素
點(diǎn),首先,將H、D、V與理想圓
弧的關(guān)系進(jìn)行分類。
存在以下五種情況:
1)H、D、V全在圓內(nèi);
2)H在圓外,D、V在圓內(nèi);Figure3
3)D在圓上,H在圓外,V在圓內(nèi);
4)H、D在圓外,V在圓內(nèi);
5)H、D、V全在圓外。
與Bresenham畫線算法一樣,按照上述不同類型
,找出誤差度量的遞推公式,然后判別它的正、
負(fù)性即可確定最佳逼近的象素點(diǎn)。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換51
5.2.3Bresenham畫圓法
當(dāng)AD<0,只可能為1或2種情況。為了確定是H
還是D,可用如下判別式:
=
8HD|AH|-|AD|
6HD<0則應(yīng)選H,否則選D。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換52
5.2.3Bresenham畫圓法
對于第2種情況:
SHD=AH+AD
2222
=(x+1)+y-R+(x+l)+(y-l)-R
=2Ap+2y-1
對于第1種情況:
Vy是x的單調(diào)遞減函數(shù)
??.H為下一點(diǎn)亮象素。
另,止匕時AHvO和AD<0
△H+Ap=2AJ)+2y-1v0
綜上兩種情況可得如下結(jié)論:
在時,若2(A.+y)?lWO,則取H,
否則取力
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換53
5.2.3Bresenham畫圓法
當(dāng)AD>0,只可能有4、5兩種情況。且最佳象素
點(diǎn)為D或V,可用如下判別式:
SDV=|AD|-|Ay|
6DV<0則應(yīng)選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圓的掃描轉(zhuǎn)換54
5.2.3Bresenham畫圓法
綜上兩種情況可得如下結(jié)論:
在AQ〉O時,若2則取D,
否則取V
當(dāng)AD=0此時D是最佳象素。
總結(jié)上述分析結(jié)果:
當(dāng)AD〉0,若2(AD-X)?1>0,取V,否則取D
當(dāng)AD<0,若2(AD+y)」W0,取H,否則取D
當(dāng)AD=0,取D。
第五章基本圖形生成算法
5.2圓的掃描轉(zhuǎn)換55
5.2.3Bresenham畫圓法
關(guān)鍵的問題就是計算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圓的掃描轉(zhuǎn)換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圓的掃描轉(zhuǎn)換57
5.2.3Bresenham畫圓法
有了上述AD的遞推計算公式,還需計算出AD的
初值。
?.*圓弧的起點(diǎn)為(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橢圓的掃描轉(zhuǎn)換60
圖5-14長半軸為a,短半軸為b的標(biāo)準(zhǔn)橢圓
?:?對于橢圓上的點(diǎn),有
F(x,y)=0;
222222
F(x,y)=bx+ay—ab0
?:?對于橢圓外的點(diǎn),F(x,y)>0;
?:?對于橢圓內(nèi)的點(diǎn),F(x,y)<0o
第五章基本圖形生成算法
5.3橢圓的掃描轉(zhuǎn)換61
解決問題:
第五章基本圖形生成算法
5.3橢圓的掃描轉(zhuǎn)換62
橢圓方程廠(》,y)=/J+°2y2一°2b2=。
x分量
圖5-15第一象限的橢圓弧
分界點(diǎn):法向量兩分量相等的點(diǎn),以弧上斜率為一1的點(diǎn)
第五章基本圖形生成算法
5.3橢圓的掃描轉(zhuǎn)換63
當(dāng)前點(diǎn)P(Xj,yj)
候選點(diǎn)Pu(Xj+1,y()
Pd(Xj+1,yj-1)
中點(diǎn)(Xj+1,y-Q.5)
圖5-16中點(diǎn)橢圓繪制算法的原理
引理57:若在當(dāng)前中點(diǎn),法向量的y分量比x分量大,即
2
(x,+1)<a(y.-0.5)
則說明橢圓弧從上部分轉(zhuǎn)入下部分。
第五章基本圖形生成算法
5.3橢圓的掃描轉(zhuǎn)換64
5.3.1橢圓的中點(diǎn)Bresenham算法
5.3.1橢圓的中點(diǎn)Bresenham算法
圖5-16中點(diǎn)橢圓繪制算法的原理
先推導(dǎo)上半部分的橢圓繪制公式
再推導(dǎo)下半部分的橢繪制公式
第五章基本圖形生成算法
5.3橢圓的掃描轉(zhuǎn)換65
5.3.1橢圓的中點(diǎn)Bresenham算法
先推導(dǎo)上半部分的橢圓園繪制公式
判別式誤差項的遞推判別式的初值
第五章基本圖形生成算法
5.3橢圓的掃描轉(zhuǎn)換66
5.3.1橢圓的中點(diǎn)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橢圓的掃描轉(zhuǎn)換67
5.3.1橢圓的中點(diǎn)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橢圓的掃描轉(zhuǎn)換
5.3.1橢圓的中點(diǎn)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雇傭外國勞務(wù)合同模板
- 舞廳合同模板
- 蔬菜配送合同模板
- 鍋爐付款合同模板
- 工程案例代理合同模板
- 專業(yè)委托代付職工薪酬服務(wù)合同(2024年版)一
- 環(huán)境咨詢服務(wù)合同模板
- 保險中標(biāo)合同模板
- 推廣置換合同模板
- 銷售代理員合同模板
- 短線趨勢主圖(通達(dá)信指標(biāo)公式源碼)
- 中級微觀范課堂講義curves
- 小學(xué)數(shù)學(xué)課堂觀察報告
- 國有企業(yè)公務(wù)用車管理辦法(麻七自用修訂版)
- 攪拌站管理辦法及制度
- 急性心功能衰竭搶救流程圖
- SOP京東商家入駐合同
- 對“一次函數(shù)與二元一次方程(組)”課的點(diǎn)評
- 鉛酸蓄電池檢測報告樣本(共6頁)
- 供應(yīng)商合同履約評價表材料類
- 房屋建筑工程竣工驗收檔案館需要資料
評論
0/150
提交評論