Phépbi n it l làm thay ikích thư c itư ng. cohaygiãn t a c a m t i m P(x, y) theo tr c hoành và tr c tung l n lư t là Sx và Sy(g i là các h s t l ),tanhân Sxvà Syl nlư tchocáct a c a P.
• Khi các giá tr Sx, Sy nh hơn 1, phép bi n i s thu nh i tư ng. Ngư c l i, khi các giá tr này l n hơn 1,phép bi n i s phóng l n i tư ng.
• Khi Sx= Sy,ngư itag i ólàphép ngd ng. ây làphépbi n ib o toàntínhcânx ngc a itư ng.Tag ilàphépphóng in u|S|>1vàlà phépthunh n u|S|<1.
N uhaih s t l khácnhauthì tag i làphépkhông ngd ng.Trong trư ng h pho c Sxho c Sy cógiátr 1,tag i ólàphépcăng.
4.4 Phép quay
Phépquaylàmthay ihư ngc a itư ng.M tphépquay òih iph icótâm quay, gócquay.Gócquaydươngthư ng ư cquiư c làchi ungư cchi ukim ng h .
Giáotrình H aMáyTính 57
• Phép quay quanh g c t a
hình4.2): Hay Q = P.M,trong ó: Hình 4.2 : Phép quay quanh g c t a • Phép quay quanh m t i m b t kỳ Hình 4.3 : Phép quay quanh m t i m b t kỳ. Giáotrình H aMáyTính 58
Xét i m P(P.x, P.y) quay quanh i m V(V.x, V.y) m t góc θ n i m
b nsau:
Phéptnhti n(-V.x, -V.y) dchchuy ntâmquayv g ct a . Quayquanhg ct a Om tgócθ.
Phéptnhti n(V.x, V.y) ưatâmquayv v tríban u. Tac nxác nht a c a i m Q(xemhình4.3).
T phéptnhti n(-V.x,-V.y)bi n i i m Pthành P' ta ư c:
P' = P + V
Hay
P'.x = P.x - V.x P'.y = P.y - V.y
Phépquayquanhg ct a bi n i i m P'thành Q'
Q' = P'.M
Hay
Q'.x = P'.x.cosθ - P'.y.sinθ Q'.y = P'.x.sinθ + P'.y.cosθ
Phéptnhti n(V.x, V.y)bi n i i m Q'thành Q ta ư c
Q = Q' + V
Hay
Q.x = Q'.x + V.x Q.y = Q'.y + V.y
Giáotrình H aMáyTính 59
Q.y =(P.x - V.x)sinθ +(P.y - V.y) cosθ + V.y
Q.x = P.x.cosθ - P.y.sinθ + V.x (1- cosθ) + V.y.sinθ Q.y = P.x.sinθ + P.y.cosθ - V.x.sinθ + V.y(1- cosθ) V y, Q = P.M + tr,trong ó:
4.5 Phép i x ng
Phép ix ngtr ccó th xem làphép quay quanh tr c i x ng mõtgóc 1800. Phươngtrìnhban u: Q.x=a.P.x+c.P.y+tr x Q.y=b.P.x+d.P.y+tr y Hay o Tr c ix nglàtr choành: Tacó: o Tươngt tr c ix nglàtr ctung: Tacó: 4.6 Phép bi n d ng
Phép bi n d ng làm thay i, méo mó hình d ng c a các i tư ng. Bi n d ng theophươngtr c xs làmthay ihoành còntung gi nguyên.
Giáotrình H aMáyTính 60
phépbi n i ư cbi udi nb iphươngtrìnhsau:
Q.x = P.x + h.P.y Q.y = P.y
- Bi n d ng theo phương tr c y s làm thay i tung còn hoành gi nguyên. Q.x = P.x Q.y = g.P.x + P.y 4.7 Phép bi n i Affine ngư c Phépbi n ingư cdùng khôiph cm tphépbi n i ãth chi n.G i Qlà nhc a Pquaphépbi n i Tcómatr nbi n i Mlà P.M Phépbi n ingư c T-1 s có matr n bi n i là M-1là matr nnghch oc a matr n M.V imatr nbi n iAffined ng: thìmatr nnghch olà: • Phép t nh ti n Giáotrình H aMáyTính 61
• Phép quay • Phép bi n it l • Phép bi n d ng 4.8 H t a thu n nh t T a thu nnh t c am t i m trênm tph ng ư cbi udi nb ng b bas t l (xh, yh,h) không ng th i b ng 0và liên h v i cáct a (x, y) c a i m ób i côngth c: N um t i mcót a thu nnh tlà(x, y, z)thìnócũngcót a thu nnh tlà (h.x, h.y, h.z),trong ó hlà s th ckhác0b tkỳ.M t i m P(x, y) s ư cbi u di n dư i d ng t a thu n nh t là (x, y,1). Trong h t a thu n nh t các ma tr n c a
Giáotrình H aMáyTính 62
• Phép t nh ti n
• Phép quay
• Phép bi n it l
Thu n l i c ah t a thu nnh tlà khitak th phaihaynhi u phépbi n i affinethi matr nh p c anhi uphép bi n i ư c tínhb ng cách nhâncác ma tr n c acácphépbi n ithànhph n.
4.9 K t h p các phép bi n i
Quá trìnhápd ng các phépbi n iliên ti p t o nênm t phépbi n i t ng th ư cg ilàs k th pcácphépbi n i. • K t h p phép t nh ti n N u ta th c hi n phép tnh ti n lên i m P ư c i m P', r i l i th c hi n ti p m t phép tnhti n khác lên P' ư c i m Q.Như v y, i m Q là nh c aphép bi n ik th phaiphéptnhti nliênti p. Giáotrình H aMáyTính 63
V y k t h p hai phép tnh ti n là m t phép tnh ti n. T ó, ta có k t h p c a nhi uphéptnhti nlàm tphéptnhti n.
• K t h p phép quay
Tương t , ta có t a i m Q là i m k t qu sau khi k t h p hai phép quay quanhg ct a M
R1(θ
1) và MR2(θ 2)là:
• K t h p phép bi n it l
Tương t như phép tnh ti n,ta cót a i m Q là i m có ư c sau haiphép tnhti nM
1(Sx1,Sy1), M2(Sx2,Sy2)là:
Bài t p chương 4
1. V m thìnhbìnhhànhb ngcáchs d ngphéptnhti n.(V o nth ngAB, sau ótnhti nABthành o nth ngCD//AB;v AD,tnhti nADthànhBC. 2. Vi tchươngtrìnhv m thìnhvuôngABCD(xemhìnhv ).
Giáotrình H aMáyTính 64
• PhóngtohìnhvuôngABCD.
• Bi nd nghìnhvuôngthànhhìnhthoi.
3. V m telip, sau óv thêm 3elip kháccócùng tâmv ielip ãcho,có dãn tr cOxlà kvàOylà1.
4. Vi tchươngtrìnhmôph ngs chuy n ngc atrái tquayquanhm ttr i. 5. Vi t chương trình v m t ư ng tròn tâm O bán kính R. V m t ư ng kính
AB,vàquay ư ngkínhnàyquanhtâm ư ngtròn.
6. Tìmv trím ic atamgiác A(1,1), B(3, 2), C(2, 4)quaphépquaygóc30oqua i m(5,5).
Giáotrình H aMáyTính 65
GIAO CÁC I TƯ NG H A
N idung chính
Kháini mc as .
Thi tk vàcài t ư ccácthu ttoántìmgiaocác itư ng h a: ư ng th ng, hìnhch nh t, agiác.
K thu tRaytracing.
5.1. M u
Hình nh trong h t a th gi i th c ư c hi n th trên các h t a thi t b d atrênh t a h a.Ch ngh n,trongm tvùng h atac nxác nhvùngnào c ahình nh s ư chi nth và mu n tnó âu trênh t a thi t b.M t vùng ơnl ho cvàivùngc ahình nhcóth ư cch n.Nh ngvùngnàycóth ư c t nh ngv trítách bi t, ho c m t vùngcó th ư c chènvào m t vùngl nhơn. Quá trìnhbi n inàyliênquan nnh ngthaotácnhưtnhti n,bi n i t l vùng ư c ch nvàxóab nh ngph nbênngoàivùng ư cch n.
Vùngcód nghìnhch nh t ư cxác nhtrongh t a th gi ith c ư cg i làm t c a s (window).Cònvùnghìnhch nh ttrênthi tb hi nth c as óánh x n ư cg ilàm t vùng quan sát (viewport).
Hình5.1:C a s vàvùngquansát
Giáotrình H aMáyTính 66
nh ngph n trongph mvic as .M ith bênngoàic as s b lo ib .Cácth t c lo ib cácph nhình nhn mbênngoàibiênc as ư cg ilàcácthu ttoántìm giaoho cc txén(clipping).
V n tra trên âycũng làm t trongnh ng v n cơs ,quantr ng c a h a máy tính như xác nh ph n giao c a các i tư ng h a: giao c a hai o n th ng, o nth ng và hìnhch a nh t, agiác và hìnhch nh t, … Các thu t toánc n th chi nnhanhnh tcóth minhh ac pnh tcáck tqu thay itrong ngd ng
h a.Phươngphápgi itích ư cdùng gi iquy tcácbàitoántrongchươngnày.
5.2. Giaoc ahai o nth ng
Taxétgiaoc ahai ư ngth ng iquahai i m ư cminhh athôngquathíd ơngi nsau: ư ngth ng iquat a (4,2) vàt a (2,0)cógiaov i o nth ng i qua(0,4)và(4,0)?
Gi i pháp
- Xác nh phương trình ư ng th ng qua 2 i m y= ax +b,trong ó a =(y 2 - y 1)/(x2 -x1) - T thíd trên,tacó: y= x -2và y=- x +4 giao i mt i(3,1) T ngquát:n utacóy=a 1 +b1x vày=a2 +b2xthìgiao i ms t i: x i =-(a1 -a2)/(b1 -b2) y i = a1 +b1xi
Trư ngh p cbi t: ư ngth ngsongsongv itr c xhaytr c y,haysongsong v inhau.N us d ngphươngpháptìmgiao ư ngth ng: òih iki mtrat a c a giao ư ngth ngcón mtrongcác o nth ng.
Phươngphápbi udi n o nth ngb ngthams s hi uqu hơn, o nth ngth nh t t (xA,yA) n(xB,yB); o n th ngth hai t (xC,yC) n(xD, yD); tính toángiao c a2 o nth ngt it a cót,s:
và
Hình 5.2: Bi u di n tham s c a o n th ng
5.3. o nth ngvàhìnhch nh t
V trítương ic a o nth ngvàhìnhch nh t(R)cób ntrư ngh psau: 1. C hai umútc a o nth ngn mtronghìnhch nh t,ch ngh nAB. 2. M ttrong hai umútc a o n th ngn m tronghìnhch nh t, ch ng h n
BC.
3. C hai u mút c a o n th ng n m ngoài hình ch nh t nhưng có giao i m,ch ngh nCD.
Giáotrình H aMáyTính 68
i m,ch ngh nDE.
Hình5.3:Cáctrư ngh pgiaoc a o nth ngvàhìnhch nh t
Hai trư ng h p 1 và 4 g i là các trư ng h p t m thư ng, t c là xác nh ư c ngay có t n t i giao i m hay không. Các trư ng h p còn l i ta ph iti n hành thu t toánxác nhgiao i ms ư ctrìnhbàytrongph nti ptheosau.
Hình5.4:Haitrư ngh pt mthư ngc agiao o nth ngvàhìnhch nh t
5.3.1 Tìm giaob ng cáchgi ih phươngtrình
ưabàitoánv xác nhgiao i mc ahai o nth ng ư ctrìnhbàytrongph n 3.2. Theophươngpháp này,chúng tac ntính toánvàki mtra nhi ukh năng; do ó khônghi uqu .
5.3.2 Thu ttoánchianh phân
Giáotrình H aMáyTính 69
Sutherland. M i i m hai u mút o n th ng trong hình nh s ư c gán m t mã nh phân4bit, ư cg ilàmãvùng, giúpnh nravùngt a c am t i m.Cácvùng này ư cxâyd ngd atrêns xemxétv i biênc as ,như hình6-8. M iv tríbit trong mãvùng ư cdùng ch ram ttrongb nv trít a tương ngc a i mso v i c a s : bên trái(left), ph i(right), trên nh (top),dư i áy (bottom). Vi c ánh s theov tríbittrongmãvùngt 1 n4chot ph isangtrái, cácvùngt a cóth liênquanv iv tríbitnhưsau:
Hình 5.5: Mã hóa các u mút c a o n th ng
Giátr 1 b tkỳv trínàoch rar ng i m v trítương ng,ngư cl ibit v trí ólà 0. N u m t i m n m trongc a s ,mã v trí là0000. M t i m bêndư i và bêntráic as cómãvùnglà0101.
Cài t minh h a thu t toán mã hóa
byte EncodePoint(Point LeftTop, Point RightBottom, Point P) { byte code = 0; if (P.X < LeftTop.X) { code |= 8; } if (P.X > RightBottom.X) { code |= 4; } if (P.Y < RightBottom.Y) Giáotrình H aMáyTính 70 {
code |= 2; } if (P.Y > LeftTop.Y) { code |= 1; } return code; }
Thu t toán chia nh phân
1. N u E(A)=0và E(B)=0k tlu n AB∩(R)= AB;thu ttoánd ng. 2. N u[E(A)AND E(B)]!=0k tlu n AB∩(R)=∅;k tthúcthu ttoán. 3. N u E(A)=0và E(B) ≠ 0(t c A∈(R)và B∉ (R))th chi n:
a. t C= A, D= B.
b. Trongkhi dài||CD||l nhơn ε t Mlàtrung i mc a o n CD.
N u E(M)=0thìc pnh t C= Mngư cl i D= M. c. K tlu n AB∩(R)= AM;k tthúcthu ttoán.
4. N u E(A)=0và E(B)=0,hoán ivaitròc a Avà B;l pl ibư c3. 5. Ngư cl i,th chi n:
a. t C= A, D= B.
b. Trongkhi dài||CD||l nhơn ε t Mlàtrung i mc a o n CD.
N u E(M) = 0 áp d ng Bư c 3 cho hai o n MC và MD. K t lu n
AB∩(R)= CD;k tthúcthu ttoán.
N u[E(M)AND E(R)]!=0 t C= M.
Giáotrình H aMáyTính 71
N u[E(R)AND E(D)]!=0k tlu n AB∩(R)=∅;k tthúcthu ttoán.
Hình 5.6: Minh h a c a thu t toán chia nh phân.
5.3.3 Thu ttoánCohen-Sutherland
Xác nh nhanh o n th ng có c n c t xén hay không nh các phép toán logíc ANDvàOR:
• K t qu phép OR hai mã u mút o n th ng cho k t qu 0: c hai i m n mtrongch nh t.
• K tqu phépAND haimã umút o nth ngchok tqu khác0:c hai i mn mngoàich nh t.
Hình 5.7: o n th ng giao v i hình ch nh t
Giaoc a o nth ngv icácc nhch nh tsongsongtr ctung: • xcógiátr Xmin,Xmaxvàh s góca=(y2-y1)/(x2-x1)
Giáotrình H aMáyTính 72
Giao o nth ngv icácc nhsongsongtr choành: • ycógiátr Ymin,Ymaxvàh s góca=(y2-y1)/(x2-x1) • x=x1+(y-y1)/a
Cài t thu t toán Cohen-Shutherland
void InterLineRectangle(Point LeftTop, Point RightBottom, Point A, Point B) {
byte codeA, codeB, codeOut; float x = 0, y = 0;
codeA = EncodePoint(LeftTop, RightBottom, A); codeB = EncodePoint(LeftTop, RightBottom, B); while (true)
{
if (codeA == 0 && codeB == 0) {
return true; }
if ((codeA & codeB) != 0) {
return false; }
if (codeA != 0) codeOut = codeA; else codeOut = codeB;
if ((codeOut & 8) != 0)//L {
x = LeftTop.X;
y = A.Y + (float)((x - A.X) * (B.Y - A.Y)) / (float)(B.X - A.X); }
Giáotrình H aMáyTính 73
{
x = RightBottom.X;
y = A.Y + (float)((x - A.X) * (B.Y - A.Y)) / (float)(B.X - A.X); }
else if ((codeOut & 2) != 0)//B {
y = RightBottom.Y;
x = A.X + (float)((y - A.Y) * (B.X - A.X)) / (float)(B.Y - A.Y); }
else if ((codeOut & 1) != 0)//T {
y = LeftTop.Y;
x = A.X + (float)((y - A.Y) * (B.X - A.X)) / (float)(B.Y - A.Y); }
if (codeOut == codeA) {
A.X = (int)x; A.Y = (int)y;
codeA = EncodePoint(LeftTop, RightBottom, A); }
else {
B.X = (int)x; B.Y = (int)y;
codeB = EncodePoint(LeftTop, RightBottom, B); }
} }
5.3.4 Thu ttoánLiang-Barsky
Giáotrình H aMáyTính 74
tham s ã ư c phát tri n b i Liang và Barsky. Nh n xét r ng hình ch nh t (R) g m t p các i m n m trong m t ph ng gi i h n b i các ư ng th ng qua các c nh