Trường hợp xĩn một đoạn thẳng văo một vùng hình chữ nhật của R2

Một phần của tài liệu giáo trình lý thuyết đồ họa (Trang 52 - 62)

II.1. Khimộ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 +(xBxA)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

xminxA+(xBxA)txmax

 

(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 +(xBxA)t1;yC =yA+(yByA)t1 xD =xA +(xBxA)t2;yD = yA +(yByA)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 ≤ xxmax  vă F =(x,y)∈R y= yA +(yByA)tymin ≤ yymax     ymin ≤ yA+(yByA)tymax 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: yyA yByA = xxA xBxA hay yyAy = xxAx ;

PhươngtrìnhcạnhTrâix=xmin S u

yratoạđộgiaođiểmvớic ạnh trâinếucó lă(xmin;

y

x(xminxA)+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đđymộthămtính

{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ă:

PktQk; 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   kK1 U{1}  U2=max   kK2 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 SutherlandHodgman

Đ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ưở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 măuIV.1. Giải thuậtvết dầuloang

Một phần của tài liệu giáo trình lý thuyết đồ họa (Trang 52 - 62)

Tải bản đầy đủ (DOCX)

(150 trang)
w