II.1. Khicómộtcạnhcủahìnhchữnhậtsongsongvới trụctoạđộ
B(xb,yb)
xmin xmax
KhiđóhìnhchữnhậtDvăđoạnthẳngFcóthểđượcmôtảnhưsau:
D=(x,y)∈R2 x=xA +(xB −xA)t 2 0≤ t ≤1
Trongđó(xmin,ymin),(xmax,ymax)lăhaiđỉnhxâc địnhnínhìnhchữnhật,vă (xA,yA), (xB,yB)lătoạđộhaiđầumútcủađoạnthẳng FkíhiệulăAB.
TrongtrườnghợpnăyClipD(F)cóthểlărỗnghaylămột đoạnthẳng(cóthể suybiếnthănh1điểm).Theođịnhnghĩathìthuậttoâncóthểmôtảnhưsau:
B
ướ c 1: Tìm nghiệmcủahệbấtphươngtrình
Trang51
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
xmin ≤ xA+(xB −xA)t≤ xmax
(II.1)
Nghiệmcủahệnăysẽlă[t1,t2]hay∅,tagọiNlătậpcâcnghiệmcủahệ
B
ướ c 2:
+NếuN=∅:thìClipD(F)=∅
+NgượclạithìN=[t1,t2](quyước t1≤t2).GọiC,Dlăhaiđiểmxâcđịnhbởi:
xC =xA +(xB −xA)t1;yC =yA+(yB − yA)t1 xD =xA +(xB −xA)t2;yD = yA +(yB −yA)t2
ThìClipD(AB)=CD
Thuật toân trín vừa đòi hỏi phải tính toân vă lượng giâ nhiều trín câc số thực. Trong thực tế người ta dùng một thuật toân khâc hiệu quả hơn.ở đđy chung ta sẽ xem xĩt đến câc thuật toân như Cohen-Sutherland, thuật toân chia nhị phđn, hay một thuật toân được cải biến vă gọt giũatừ thuậttoân tổng quâ trín vớitíngọi lă thuậttoânLiang-Barsky
II.1.a. ThuậttoânCohen-Sutherland
Xĩt mộtcâch tổngquât sẽ cócâc tìnhhuốngsaucho băitoân xĩnmột đoạn
xmin ≤ x≤ xmax vă F =(x,y)∈R y= yA +(yB −yA)t ymin ≤ y≤ ymax ymin ≤ yA+(yB − yA)t≤ ymax 0≤ t ≤1
thẳngvăotrongmộthình chữnhật.
D
E
C B A
+ Trường hợp cả haiđầu mút của đoạn thẳng đều nằmtrong hình chữnhật (nhưđoạnAB) thìClipD(F)sẽlăđoạnthẳngđêcho.
+ Trường hợp có một đầu mút của đoạn thẳng nằm ngoăi hình chữ nhật (nhưđoạnBC) thìClipD(F)sẽlămộtphầnđoạnthẳngđêcho.
+ Trường hợp cả hai đầu mút của đoạn thẳng nằm ở ngoăi hình chữ nhật
song có một phần của đoạn thẳng nằm trong h
ình chữ n hật thì đoạn thẳng F cắt
hình chữ nhật D đúng hai điểm vă khi đó ClipD
(F) sẽ lă đoạn thẳng tạo bởi hai
điểmđó.
Trang52
Chương 3: Các phép xén hình &
tô màu - Nguyễn Hữu Tài
+ Trườnghợpcảhai đầumút củađoạnthẳng nằmở ngoăi hìnhchữnhật vă không có phầnnăo của đoạnthẳng nằmtrong hình chữ nhật (không có giao điểm vớihìnhchữnhật)thìClipD(F)=∅
Vớicâctìnhhuốngnhưtríngiảithuậtsẽđượctiếpcậntheohướngnhưsau: Trước hết người ta đânh mê vùng cho không gian mặt phẳng đang xĩt để sau đó tiếnhănhthuậttoânxĩndựatríncơsởxĩtmêvùngcủacâcđiểm.
Phươngphâpđânhmêvùng: Mỗi vùng trong mặt phẳng Oxy được đânh một mê số tuỳ theo vị trí của chúng so với hình chữ nhật D như hình vẽ sau. Mỗi mê số có 4bít, mỗi bít đóngvai trò như một cờ hiệubâo cho tabiết một trạng thâi năo đó của vùng; cụ thể lă: bít 0 chỉ được bật (bằng 1) khi vùng có mê
đang xĩt nằm về bín Trâi hình chữ nhật, bít 1 chỉ được bật khi vùng có mê
đang xĩtnằmvề bín Phải của hình chữ nhật,bít 2đượcbật khivùng nằmbín
Dưới,văbít3đượcbậtkhivùngnằmbínTrín.
1001 1000 1010
0001 0000 0010
Bảngquytắcđânhmê
bít3 bít2 bít1 bít0 Trín Dưới Phải Trâi
0101 0100 0110
Như vậymặtphẳngOXYđượcchia lăm9phần,mỗiphầnđượcđânhmộtmê4bít biểuhiệntrạngthâikhâcnhaucủatừngvùng.
Xĩt một điểmP (xp,yp) trong mặt phẳng,ta gắn cho nó một mê trùng vớimêcủa vùngchứanó.TừđótacóthểsuyracâchxâcđịnhmêcủaPnhưsau:
1 nÕu xp <xmin 0 nÕung−îcl¹i 1 nÕu yp <ymin 0 nÕung−îcl¹i 1 nÕu xp >xmax 0 nÕung−îcl¹i 1 nÕu yp > ymax 0 nÕung−îcl¹i
Bđygiờ xĩtmộtđoạnthẳngABtasẽcócâctrườnghợpsau:
Trang53
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
i/ĐoạnABnằmhoăntoăn bíntronghình chữnhậtnếuvăchỉnếumê(A)=0000vă mê(B)=0000
ii/ Nếu [mê(A) & mê(B)]≠0000 thì đoạn AB nằm hoăn toăn bín ngoăi hình chữ nhật (ở đđy phĩp toân & được hiểu lă phĩp AND lôgiccủa câc bít tương ứng, ví dụ: 1101 & 1011 = 1001). Thật vậy, từ giả thiết suy ra mê(A)≠0000 vă mê(B)≠0000,nghĩa lăA văB cùngnằmbín ngoăihìnhchữ nhật,mặt khâcdo kết quả lăkhâc0000có nghĩalăphảitồntạiítnhấtmộtbíttạivịtrínăođóbằng1,giả sử đólă bíti, suyracảmê(A)vă mê(B)đều cóbíticó giâtrị1.Điềunăycó nghĩa lă AvăBnằmvềcùngmộtphía năođócủahình chữnhậtD.CảAvă Bđềuởbín ngoăi vă nằmvề cùng một phía của hình chữ nhật D nín hiển nhiín lă đoạn AB khôngthểcóphầnchungvớihìnhchữnhậtD.
iii/Trườnghợp[mê(A)&mê(B)]=0000vă[mê(A)≠0000hoặcmê(B)≠0000] Ta có thểgiả sửmê(A)≠0000 (nếucầncó thểđổivaitròcủaAvăBđể thoả mên giảthiếttrín),điềunăytươngđươngvớiviệcAnằmbínngoăihìnhchữnhật.
Nếu xA=xB thìABlă một đoạnthẳng đứng,dođóta suyra ngaycâchxâc định ClipD(AB)
BÝt0= BÝt1=
ĐặtđiểmClăgiaođiểmcủaABvớihình Dnhưsau: xC=xA
Nếu ATrín=1(hiểurằngmêcủaAcóbít3bằng1)thìyC=ymax
Ngược lại(tứcADưới=1)thìyC=ymin
ĐặtđiểmDnhưsau: xD=xA
Nếu mê(B)=0000thì yD=yB
Ngược lạithì: yD=ymax nếuBTrín=1 yD=ymin nếuBDưới=1 ClipD(AB)=CD
Khi xA≠xB, Khi đóAB lă một đoạn thẳng nằm xiín. Đặt C=A, D=B. Bởivì C nằmbínngoăihìnhchữnhậtnínquytrìnhxĩnđượcthựchiệnnhưsau:
Nếu CTrâi=1thì có thểthay C bởigiaođiểm của đoạnCDvă cạnh Trâinối dăicủahìnhchữnhậtD
Nếu Cphải=1thìcóthểthayCbởigiao điểmcủađoạnCD vă cạnhPhảinối dăicủahìnhchữnhậtD
Nếu CDưới =1 thì có thể thay C bởi giao điểm của đoạn CD vă cạnh Dưới nốidăicủahìnhchữnhậtD
Trang54
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
Nếu CTrín=1thìcó thểthay CbởigiaođiểmcủađoạnCDvăcạnhTrínnối dăicủahìnhchữnhậtD
Quâ trìnhtrín được lặp đi lặp lại, sau mỗi lần nhớ chú ýtính lại mêcủa C vă đổi vai tròcủa Cvă Dnếu cần để đảm bảo C luôn nằmbín ngoăi hìnhchữ nhật. Quâ trình trín sẽ dừng khi ta có câc điểm CD rơi văo câc trường hợp i/ hoặc ii/ tức tươngứngvớiClipD(AB)=CDhoặcClipD(AB)=∅.
II.1.a.i. Kếtthúcgiảithuật
Hướng dẫn: Công thức tính giao điểm của CD với câc cạnh Trâi, Phải, Trín, Dưới có thể được suy ra từ phương trình biểu diễn CD vă câc cạnh của hình chữnhật: PhươngtrìnhAB: y− yA yB − yA = x−xA xB −xA hay y−yA ∆y = x−xA ∆x ;
PhươngtrìnhcạnhTrâix=xmin S u
yratoạđộgiaođiểmvớic ạnh trâinếucó lă(xmin;
∆ y
∆x(xmin −xA)+yA).Côngthức tínhtoạđộgiaođiểmvớicâccạnhcònlạiđượcsuyratươngtự.
Việc tính mê có thể được thực hiện dễ dăng nhờ toân tử OR, với toântử năy cho phĩptadễdăngbậtcâcbít(chobằng1).
II.1.a.ii. Sauđđylămộthămtínhmê
{Văo : x,y chứa giâ trị toạ độ của điểm P; xmin,ymin,xmax,ymax: biểu diễn toạ độcủahình chữnhật D
Ra :Mộtbytecó4bítđầuchứamêcủaPvă4bítsaubằng0} FunctionMa(x,y,xmin,ymin,xmax,ymax:integer):Byte;
Varm:byte; Begin
m:=0 {m=0000}
Ifx<xminthenm:=mor1;{Tức mor0001Bin,Đặtbít0bằng1} Ifx>xmaxthenm:=mor2;{Tứcmor0010Bin,Đặtbít1bằng1} Ify<yminthenm:=mor4;{Tức mor0100Bin,Đặtbít2bằng1} Ify>ymaxthenm:=mor8;{Tứcmor1000Bin,Đặtbít3bằng1} Ma:=m;
Trang55
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
End;
II.1.a.iii. Căiđặtthuậttoân
Sinh viíncầnxđydựng:
+MộtthủtụcxĩntheothuậttoânCohen-Sutherland
+Mộtchương trìnhsửdụngthủtụcxĩnđểminhhọacâctìnhhuốngđê xĩttrongthuậttoân.
II.1.b. ThuậttoânChianhịphđn
Thuật giải năy xuất phât từ tư tưởng của phương phâp "giải phương trình bằngphươngphâpchianhịphđn"
Tư tưởngcủa thuậtgiảinhư sau:lấy trungđiểmcủađoạn thẳngvă kiểmtra mêcủa nóđể loạidần câcđoạncon khôngchứagiao điểm,vă cuốicùngcho điểm giữa hội tụ về giaođiểm của đoạnthẳng vớihình chữ nhật, kếtquả lă ta thuđược đoạnconnằmtronghìnhchữnhật(nếucó)
Thuật toânđượcphâcthảonhưsau:
i/Nếumê(A)=0000vămê(B)=0000thìClipD(AB)=AB ii/Nếumê(A)=0000vămê(B)≠0000thì:
ĐặtC:=A;D:=B; while|xC-xD|+|yC-yD|≥1do
begin
lấytrungđiểmMcủaCD
+Nếumê(M)≠0000thì D:=M
+Ngượclại: C:=M
end; ClipD(AB)=AC
iii/Nếumê(A)≠0000vămê(B)=0000: ĐổivaitròcủaAvăBrồiâpdụngii/ iv/[Nếumê(A)&mê(B)]≠0000thìClipD(AB)=∅
v/Nếumê(A)≠0000vămê(B)≠0000vă[mê(A)&mê(B)]=0000 ĐặtC:=A;D:=B;
LấytrungđiểmMcủaCD
Trang56
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
While(mê(M)≠0000)and(|xC-xD|+|yC-yD|≥1)do begin
+Nếumê(M)&mê(C)≠0000thìC:=M {đoạn CM ở ngoăi theo iv/}
+ Ngược lại (tức mê(M)&mê(C)=0000) thì D:=M {đoạn DM ở ngoăi,tựchứngminh}
LấytrungđiểmMcủaCD end;
+Nếumê(M)≠0000thìClipD(AB)=∅
+Ngượclại:âpdụngii/chocâcđoạnMAvăMB tađược ClipD(MA)=MA1
SuyraClipD(AB)=A1B1
II.1.b.i. Căiđặtthuậttoân
Sinh viíncầnxđydựng:
+Mộtthủtụcxĩntheothuậttoânchianhịphđn
+Mộtchương trìnhsửdụngthủtụcxĩnđểminhhọacâctìnhhuốngđê xĩttrongthuậttoân.
II.1.c. ThuậttoânLiang-Barsky
Thuật toânnăy lămột giải phâpcụ thểchophương phâpchungđê đềcập ở phầnđầutrong(mụcII.1).Thuậttoân năynhưsau:
Ta đặt ∆x=xB-xA ∆y=yB-yA
P1=-∆x Q1=xA-xmin
P2=∆x Q2=xmax-xA
P3=-∆y Q3=yA-ymin
P4=∆y Q4=ymax-yA
Thìhệbấtphươngtrình(II.1)cóthểviếtlạilă:
Pkt≤Qk; k=1,2,3,4
(II.1.c)
Xĩtcâctrườnghợpsau:
Trang57
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
i/ Nếu ∃k∈{1,2,3,4} sao cho (Pk=0 vă Qk<0) thì suy ra ClipD(AB)=∅(Vì hệ bất phươngtrình(II.1.c)vônghiệm)
ii/∀k∈{1,2,3,4},Pk≠0hoặcQk≥0:thìkhiđócâcbấtphươngtrìnhứng vớiPk=0sẽ bịloạibỏbởivìchúnglăhiểnnhiín.Dovậytađặt
K1={k|Pk>0} K2={k|Pk<0} Qk Pk Qk Pk 0≤t≤1 U1=min k∈K1 U{1} U2=max k∈K2 U{0}
Nếu U1<U2thìClipD(AB)=∅
Ngược lại: thì [U2, U1] chính lă đoạn nghiệm của hệ bất phương trình trín (tương đươngvới[t1,t2] măphươngphâptổngquâtđê níu).Nín gọiC,Dlăhai điểmthoả
xC =xA +∆xU1;yC = yA +∆yU1 xD =xA +∆xU2;yD = yA +∆yU2 ThìClipD(AB)=CD
II.1.c.i. Căiđặtthuậttoân
Sinh viíncầnxđydựng:
+MộtthủtụcxĩntheothuậttoântrínLiang-Barsky
+Mộtchương trìnhsửdụngthủtụcxĩnđểminhhọacâctìnhhuốngđê xĩttrongthuậttoân.
+ Viết đânh giâ so sânh ưu nhược điểm của 3 phương phâp xĩn hình trín.
II.2. Khi1cạnh củahìnhchữnhậttạovới trụchoănh mộtgóc α:
Tadùngphĩpquayhìnhđểđưabăitoânvềtrườnghợpxĩnđườngthẳngvăohình chữnhậtcócạnhsongsongvớitrụctoạđộ.Thuậttoânđượcphâcthảonhưsau:
i/QuayhìnhchữnhậtDvăđườngthẳngABmộtgóc -αđểđượcD'văA'B'. ii/XâcđịnhClipD'(A'B')
iii/ Sẽcóhaitình huốngxảyra:
Nếu ClipD'(A'B')=∅thìkếtquảClipD(AB)=∅.
NgượclạinếuClipD'(A'B')=C'D'thìquayC'D'mộtgócα tađượcCD.Suyra ClipD(AB)=CD
Trang58
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
III. Clippingmột đa giâc văo một vùng hình chữ nhật III.1. Giảithuật Sutherland–Hodgman
Đagiâc
. .
Kếtquảthuđược HìnhchữnhậtD
(ClippingWindow)
(hình1) (hình1.a) (hình1.b) (hình1.c) (hình1.d)
Tưtưởngcủagiảithuậtnhưsau:
Để Clipping một đa giâc F văo trong một hình chữ nhật D ta tiến hănh câc bước sau:
Bước 1: Với đa giâc F thực hiện cắt bỏ những phần nằm bín trâi hình chữ nhật (nghĩalăbíntrâicủacạnhtrâinốidăi)tathuđượcđagiâcmớiF1(hình1.a)
Bước 2:Với đa giâc F1 thực hiệncắt bỏnhững phầnnằm bín phảihình chữ nhật tathuđượcđagiâcmớiF2(hình1.b)
Bước3: Vớiđa giâcF2thựchiệncắtbỏnhữngphầnnằmbín trínhìnhchữnhậtta thuđượcđagiâcmớiF3 (hình1.c)
Bước 4: Với đa giâc F3 thực hiện cắtbỏ nhữngphần nằmbín dưới hình chữnhật tathuđượcđagiâcmớiF4(hình1.d)
Kết quả:NếuF4 =∅thì ClipD(F)=∅. Ngược lạithìtathu đượckếtquả xĩn lăđa giâc F4,hayClipD(F)=F4
Đểthựchiệncâcbước(1,2,3,4)tasẽtiếnhănhtheophươngphâpsau:
Trang59
Chương 3: Các phép xén hình
& tô màu - Nguyễn Hữu Tài
Chẳng hạncho bước1:Xuấtphât từ mộtđỉnhnăo đócủađa giâc, tatiến hănhđi dọctheocâccạnhđếncâcđỉnhkhâcchođếnkhivề lạiđỉnhđầu.
Trínquâtrìnhdichuyển:
Nếu gặp một đỉnh vă đỉnh đó ở trín hay bín phải của cạnh trâi (nối dăi) hình chữnhậtthìtalưuđiểmđóvăoF1.
văoF1
Kết quả ta có F1 lă một tập câcđiểm biểudiễn đa giâc F khiđê xĩn đi mất phầnbíntrâi.
Câcbướccònlạithựchiệntươngtự.
III.1.a. Căiđặtthuậttoân Sinh viíncầnxđydựng:
+Mộtthủtụcxĩnđagiâctheothuậttoântrín
+Mộtchươngtrìnhsửdụngthủtụcxĩnđểminhhọa
III.1.b. NhượcđiểmthuậtgiảiSutherland-Hodgmanvăcâchkhắcphục
Thuật giải xĩn đa giâc Sutherland - Hodgeman còn mắc phải một nhược điểm đó lă khi kết quả xĩn lă 2đa giâc riíng biệt thì nógộp lạilăm một bởi môt cạnhliínkết.
Vídụ:
Phươngphâpkhắcphục:Sinhviíntựnghiíncứu.
IV. Một số thuật toân tômăuIV.1. Giải thuậtvết dầuloang