Nối tiếp phần 1, phần 2 của giáo trình Đồ họa máy tính I tiếp tục trình bày các nội dung chính sau: Giao của các đối tượng, giao của đoạn thẳng và đa giác lồi, giao hai đa giác, vùng định nghĩa bởi pixel, thuật toán tô màu đa giác. Mời các bạn cùng tham khảo để nắm nội dung chi tiết.
Trang 1Nhu d¯˜a d¯ˆe` cˆa.p trong Chu.o.ng 1, c´ac thuˆa.t to´an cˆa`n thu c hiˆe.n nhanh nhˆa´t c´o thˆe˙’ d¯u.o cd¯ˆe˙’ cung cˆa´p ngu.`o.i su.˙’ du.ng cˆa.p nhˆa.t nhanh c´ac kˆe´t qua˙’ thay d¯ˆo˙’i trong ´u.ng du.ng Ch´ung
ta s˜e ´ap du.ng c´ac phu.o.ng ph´ap gia˙’i t´ıch d¯ˆe˙’ gia˙’i quyˆe´t c´ac b`ai to´an trong chu.o.ng n`ay
Mˆo.t b`ai to´an thˆong du.ng trong d¯ˆo` ho.a m´ay t´ınh l`a x´ac d¯i.nh giao cu˙’a hai d¯oa.n thˇa˙’ng D- ˆayl`a mˆo.t phˆa`n quyˆe´t d¯i.nh cu˙’a nh˜u.ng thuˆa.t to´an t`ım giao (chˇa˙’ng ha.n, giao hai d¯a gi´ac) v`axuˆa´t hiˆe.n trong nhiˆe` u tiˆe´n tr`ınh kh´ac Phˆa` n n`ay ´ap du.ng viˆe.c tham sˆo´ ho´a cu˙’a d¯oa.n thˇa˙’ngd¯ˆe˙’ gia˙’i quyˆe´t b`ai to´an sau
B`ai to´an
Trong mˇa.t phˇa˙’ng cho hai d¯oa.n thˇa˙’ng AB v`a CD X´ac d¯i.nh giao d¯iˆe˙’m cu˙’a ch´ung nˆe´u c´o.
Trang 2A B
C D
A B
C D
A B
C D
H`ınh 3.1: C´ac tru.`o.ng ho p v´o.i hai d¯oa.n thˇa˙’ng
3.2.1 Phˆ an t´ıch
C´o nhiˆe` u tru.`o.ng ho p xa˙’y ra v´o.i hai d¯oa.n thˇa˙’ng nhu trong H`ınh 3.1: Ch´ung c´o thˆe˙’ khˆong giao nhau, c´o thˆe˙’ cˇa´t nhau ta.i mˆo.t d¯iˆe˙’m hoˇa.c phu˙’ lˆa´p mˆo.t phˆa`n lˆen nhau
X´et c´ac phu.o.ng tr`ınh tham sˆo´ tu.o.ng ´u.ng hai d¯oa.n thˇa˙’ng AB v`a CD l`a
P (t) := A + t(B − A), t ∈ [0, 1],
v`a
Q(u) := C + u(D − C) u ∈ [0, 1].
Viˆe.c su.˙’ du.ng c´ac tham sˆo´ kh´ac nhau v´o.i hai d¯oa.n thˇa˙’ng d¯ˆe˙’ biˆe˙’u diˆe˜n c´ac d¯iˆe˙’m kh´ac nhau trˆen hai d¯oa.n mˆo.t c´ach d¯ˆo.c lˆa.p
K´y hiˆe.u l1 v`a l2 l`a c´ac d¯u.`o.ng thˇa˙’ng d¯i qua A, B v`a C, D tu.o.ng ´u.ng Phu.o.ng ph´ap o.˙’ d¯ˆay tru.´o.c hˆe´t l`a t`ım giao d¯iˆe˙’m cu˙’a hai d¯u.`o.ng thˇa˙’ng l1 v`a l2 (nˆe´u c´o) v`a sau d¯´o x´ac d¯i.nh giao d¯iˆe˙’m c´o nˇa`m trˆen hai d¯oa.n thˇa˙’ng hay khˆong Trong tru.`o.ng ho p hai d¯u.`o.ng thˇa˙’ng giao nhau, ta cˆa` n x´ac d¯i.nh c´ac tham sˆo´ t0 v`a u0 sao cho P (t0) = Q(u0) D- iˆe` u kiˆe.n n`ay chı˙’ ra
x A + (x B − x A )t0 = x C + (x D − x C )u0, (3.1)
y A + (y B − y A )t0 = y C + (y D − y C )u0. (3.2) Suy ra
d × t0 = d 0 ,
Trang 3Trong tru.`o.ng ho p n`ay, tˆo`n ta.i duy nhˆa´t tham sˆo´ t0 = d 0
d Nˆe´u t0 khˆong thuˆo.c d¯oa.n [0, 1] th`ı kˆe´t luˆa.n hai d¯oa.n thˇa˙’ng AB v`a CD khˆong giao nhau; ngu.o c la.i x´ac d¯i.nh tham sˆo´ u0 t`u
Phu.o.ng tr`ınh (3.1) hoˇa.c (3.2) Nˆe´u u0 thuˆo.c d¯oa.n [0, 1] th`ı hai d¯oa.n thˇa˙’ng giao nhau v`a to.a d¯ˆo d¯iˆe˙’m giao c´o thˆe˙’ x´ac d¯i.nh bo.˙’i P (t0) = Q(u0).
d bˇa`ng khˆong
Nˆe´u d = 0 th`ı hai d¯u.`o.ng thˇa˙’ng l1 v`a l2 song song hoˇa.c tr`ung nhau C´ac d¯oa.n thˇa˙’ng c´o thˆe˙’phu˙’ lˆa´p lˆen nhau nhu.ng d¯iˆe` u n`ay chı˙’ c´o thˆe˙’ xa˙’y ra khi hai d¯u.`o.ng thˇa˙’ng tr`ung nhau D- ˆe˙’kiˆe˙’m tra d¯iˆe` u d¯´o, ta chı˙’ cˆa` n x´ac d¯i.nh d¯iˆe˙’m C c´o nˇa`m trˆen d¯u.`o.ng thˇa˙’ng l1 d¯i qua hai d¯iˆe˙’m
A v`a B khˆong Ta c´o C thuˆo.c l1 nˆe´u to.a d¯ˆo cu˙’a n´o thoa˙’ m˜an d 00 (x C , y C ) = 0, trong d¯´o
Trong tru.`o.ng ho p ngu.o c la.i, hai d¯u.`o.ng thˇa˙’ng l1 v`a l2 song song v`a khˆong tr`ung nhau; suy
ra hai d¯oa.n thˇa˙’ng khˆong giao nhau Do d¯´o tiˆe´n tr`ınh cuˆo´i c`ung l`a kiˆe˙’m tra hai d¯oa.n thˇa˙’ngc´o phu˙’ lˆa´p lˆen nhau khˆong
D- ˆe˙’ thu c hiˆe.n d¯iˆe`u n`ay, ta cˆa`n x´ac d¯i.nh hai tham sˆo´ thu c t C v`a t D sao cho C = P (t C)
v`a D = P (t D ) V`ı hai d¯u.`o.ng thˇa˙’ng tr`ung nhau nˆen chı˙’ cˆa ` n x´et phu.o.ng tr`ınh theo x (nˆe´u l1khˆong song song v´o.i tru.c tung; ngu.o c la.i su.˙’ du.ng phu.o.ng tr`ınh theo y) Dˆe˜ d`ang kiˆe˙’m tra
Trang 4D- oa.n thˇa˙’ng AB bˇa´t d¯ˆa`u v`a kˆe´t th´uc tu.o.ng ´u.ng ta.i t = 0 v`a t = 1 v`a bˇa`ng c´ach kiˆe˙’m tra th´u tu cu˙’a bˆo´n tham sˆo´ 0, 1, t C v`a t D ch´ung ta c´o thˆe˙’ x´ac d¯i.nh d¯u.o c vi tr´ı tu.o.ng d¯ˆo´i
cu˙’a hai d¯oa.n thˇa˙’ng Tˆo`n ta.i phˆa`n chung gi˜u.a hai d¯oa.n tr`u khi ca˙’ hai tham sˆo´ t C v`a t D c`ungnho˙’ ho.n 0 hoˇa.c l´o.n ho.n 1 Trong tru.`o.ng ho p c´o d¯oa.n chung, c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´i c´o thˆe˙’ dˆe˜
d`ang x´ac d¯i.nh t`u c´ac gi´a tri t C v`a t D
3.2.2 Thuˆ a.t to´an x´ac d¯i.nh giao hai d¯oa.n thˇa˙’ng
Trˆen co so.˙’ cu˙’a nh˜u.ng tha˙’o luˆa.n trˆen ta c´o thˆe˙’ viˆe´t la.i thuˆa.t to´an chi tiˆe´t nhu sau D- ˆa`uv`ao gˆo`m bˆo´n d¯iˆe˙’m A, B, C v`a D; d¯ˆa` u ra gˆo`m giao d¯iˆe˙’m I (nˆe´u c´o) v`a biˆe´n Kind nhˆa.n mˆo.t trong ba gi´a tri 0, 1 hoˇa.c 2 tu`y theo khˆong tˆo`n ta.i d¯iˆe˙’m giao, tˆo`n ta.i mˆo.t d¯iˆe˙’m giao I hoˇa.c
hai d¯oa.n phu˙’ lˆa´p lˆen nhau mˆo.t phˆa`n
1 Kho.˙’i ta.o Kind = 0 T´ınh d.
2 Nˆe´u d 6= 0 (t´u.c l`a c´ac d¯oa.n thˇa˙’ng khˆong song song) thu c hiˆe.n
• T´ınh t0 Nˆe´u t0 6∈ [0, 1] th`ı d`u.ng, hai d¯oa.n thˇa˙’ng khˆong giao nhau.
• T´ınh u0 Nˆe´u u0 6∈ [0, 1] th`ı d`u.ng, hai d¯oa.n thˇa˙’ng khˆong giao nhau.
• Ngu.o c la.i, kˆe´t luˆa.n Kind = 1 v`a hai d¯oa.n thˇa˙’ng giao nhau ta.i
I = A + t0(B − A) = C + u0(D − C).
3 Ngu.o c la.i (c´ac d¯oa.n thˇa˙’ng song song) v`a nˆe´u d¯iˆe˙’m C nˇa`m trˆen d¯u.`o.ng thˇa˙’ng AB
• X´ac d¯i.nh t C v`a t D
• Nˆe´u ca˙’ hai t C v`a t D c`ung nho˙’ ho.n 0 hoˇa.c c`ung l´o.n ho.n 1 th`ı hai d¯oa.n thˇa˙’ng
khˆong giao nhau Ngu.o c la.i, d¯ˇa.t Kind = 2; giao hai d¯oa.n thˇa˙’ng l`a mˆo.t d¯oa.n
thˇa˙’ng (t`ım hai d¯ˆa` u m´ut?)
V´ı du 3.2.1 (a) Gia˙’ su.˙’ A(1, 4), B(7, 6), C(4, 8) v`a D(7, 9) Ta c´o
Suy ra hai d¯u.`o.ng thˇa˙’ng AB v`a CD song song hoˇa.c tr`ung nhau D- ˆe˙’ kˆe´t luˆa.n, thay to.a d¯ˆo
d¯iˆe˙’m C v`ao phu.o.ng tr`ınh d 00 (x, y) ta d¯u.o c
Trang 5Trong phˆa` n n`ay ch´ung ta t`ım hiˆe˙’u mˆo.t sˆo´ thuˆa.t to´an x´ac d¯i.nh giao cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh
ch˜u nhˆa.t (R) (c´o c´ac ca.nh song song v´o.i c´ac tru.c to.a d¯ˆo.) H`ınh 3.2 chı˙’ ra bˆo´n tru.`o.ng ho p
c´o thˆe˙’:
• Ca˙’ hai d¯iˆe˙’m d¯ˆa ` u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng, chˇa˙’ng ha.n AB, nˇa`m ho`an to`an trong h`ınh ch˜u.
nhˆa.t Hiˆe˙’n nhiˆen khi d¯´o phˆa`n giao ch´ınh l`a d¯oa.n thˇa˙’ng n`ay
• Mˆo.t trong hai d¯ˆa`u m´ut cu˙’a d¯oa.n thˇa˙’ng, chˇa˙’ng ha.n BC, nˇa`m trong h`ınh ch˜u nhˆa.t.
• Ca˙’ hai d¯iˆe˙’m d¯ˆa ` u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng, chˇa˙’ng ha.n CD, nˇa`m ngo`ai h`ınh ch˜u nhˆa.t nhu.ng
c´o giao kh´ac trˆo´ng v´o.i h`ınh ch˜u nhˆa.t
• Ca˙’ hai d¯iˆe˙’m d¯ˆa ` u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng (chˇa˙’ng ha.n DE) nˇa`m ho`an to`an vˆe` “nu.˙’a mˇa.t
phˇa˙’ng ngo`ai” x´ac d¯i.nh bo.˙’i mˆo.t ca.nh (bˆen tr´ai) cu˙’a h`ınh ch˜u nhˆa.t Ta c´o phˆa`n giaobˇa`ng trˆo´ng T`ınh huˆo´ng n`ay thu.`o.ng xa˙’y ra khi h`ınh ch˜u nhˆa.t d¯u˙’ nho˙’ v`a do d¯´o c´onhiˆe` u d¯oa.n nˇa`m ngo`ai h`ınh ch˜u nhˆa.t
Trang 6H`ınh ch˜u nhˆa.t (R)
D C B A E H`ınh 3.2: C´ac d¯oa.n thˇa˙’ng v`a h`ınh ch˜u nhˆa.t (R).
. A • B • C • D • xmin | xmax ymin — ymax —
H`ınh 3.3: C´ac tru.`o.ng ho p chˆa´p nhˆa.n hoˇa.c loa.i bo˙’ cu˙’a mˆo.t d¯oa.n thˇa˙’ng
H˜ay quan s´at vi tr´ı tu.o.ng d¯ˆo´i cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh ch˜u nhˆa.t (R), ch´ung ta s˜e thˆa´y
c´o nhiˆe` u t`ınh huˆo´ng c´o thˆe˙’ xa˙’y ra m`a thuˆa.t to´an pha˙’i xu.˙’ l´y D- oa.n thˇa˙’ng c´o thˆe˙’ nˇa`m bˆen tr´ai, bˆen pha˙’i, ph´ıa du.´o.i hay ph´ıa trˆen cu˙’a h`ınh ch˜u nhˆa.t Hoˇa.c n´o c´o thˆe˙’ cˇa´t bˆa´t k`y mˆo.t (hay hai) ca.nh h`ınh ch˜u nhˆa.t, v`a vˆan vˆan T´om la.i vˆa´n d¯ˆe` c´o ve˙’ rˇa´c rˆo´i v`ı c´o thˆe˙’ c´o nhiˆe` u kha˙’ nˇang kh´ac nhau c´o thˆe˙’ xa˙’y ra Do d¯´o ch´ung ta cˆa` n mˆo.t c´ach tˆo˙’ ch´u.c v`a tiˆe´p cˆa.n hiˆe.u qua˙’ gia˙’i quyˆe´t b`ai to´an trong tru.`o.ng ho p tˆo˙’ng qu´at v`a t´ınh to´an c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´i m´o.i cu˙’a phˆa` n giao T´ınh hiˆe.u qua˙’ d¯ˇa.c biˆe.t quan tro.ng do c´o thˆe˙’ c´o h`ang trˇam, thˆa.m ch´ı h`ang ng`an, d¯oa.n thˇa˙’ng trong mˆo.t h`ınh v`a mˆo˜i d¯oa.n cˆa`n loa.i bo˙’ phˆa`n nˇa`m ngo`ai h`ınh ch˜u nhˆa.t Phˆa` n n`ay tr`ınh b`ay mˆo.t sˆo´ thuˆa.t to´an t`ım giao cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh ch˜u nhˆa.t
Tru.´o.c hˆe´t nhˆa.n x´et rˇa`ng c´o hai tru.`o.ng ho p tˆa`m thu.`o.ng (xem H`ınh 3.3) c´o thˆe˙’ xa˙’y ra:
1 Tru.`o.ng ho p tˆa`m thu.`o.ng d¯ˆa`u tiˆen, go.i l`a chˆa´p nhˆa.n, l`a hai d¯iˆe˙’m d¯ˆa`u cuˆo´i d¯oa.n thˇa˙’ng
Trang 7ch´u.a trong h`ınh ch˜u nhˆa.t.
2 Tru.`o.ng ho p tˆa`m thu.`o.ng th´u hai, go.i l`a loa.i bo˙’, ca˙’ hai d¯iˆe˙’m d¯ˆa`u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng
nˇa`m ho`an to`an vˆe` nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i mˆo.t ca.nh cu˙’a h`ınh ch˜u nhˆa.t
3.3.1 T`ım giao bˇ a `ng c´ach gia˙’i hˆe c´ac phu.o.ng tr`ınh
C´ach tiˆe´p cˆa.n ch´ınh trong tru.`o.ng ho p A v`a B khˆong d¯ˆo`ng th`o.i nˇa`m trong (R) l`a kiˆe˙’m tra d¯oa.n thˇa˙’ng AB c´o giao v´o.i c´ac ca.nh cu˙’a h`ınh ch˜u nhˆa.t khˆong; nˆe´u c´o, x´ac d¯i.nh c´ac giao
d¯iˆe˙’m v`a suy ra phˆa` n giao Do d¯´o d¯u.a vˆe` b`ai to´an x´ac d¯i.nh giao cu˙’a hai d¯oa.n thˇa˙’ng v`a c´othˆe˙’ ´ap du.ng nh˜u.ng kˆe´t qua˙’ trong Phˆa`n 3.2 Theo phu.o.ng ph´ap n`ay, ch´ung ta cˆa`n t´ınh to´anv`a kiˆe˙’m tra nhiˆe` u kha˙’ nˇang; do d¯´o khˆong hiˆe.u qua˙’
3.3.2 Thuˆ a.t to´an chia nhi phˆan
´
Y ch´ınh cu˙’a thuˆa.t to´an n`ay tu.o.ng tu thuˆa.t to´an t`ım nghiˆe.m cu˙’a phu.o.ng tr`ınh f(x) = 0 trˆen d¯oa.n [a, b] v´o.i f liˆen tu.c v`a f(a)f(b) < 0 bˇa`ng phu.o.ng ph´ap chia nhi phˆan (bisection): X´ac d¯i.nh c´ac giao d¯iˆe˙’m (nˆe´u c´o) cu˙’a d¯oa.n thˇa˙’ng AB v`a h`ınh ch˜u nhˆa.t bˇa`ng phu.o.ng ph´ap
chia nhi phˆan
Thuˆa.t to´an tru.´o.c hˆe´t kiˆe˙’m tra hai tru.`o.ng ho p chˆa´p nhˆa.n v`a loa.i bo˙’ Nˆe´u khˆong xa˙’y
ra, n´o chia d¯oa.n thˇa˙’ng th`anh hai phˆa`n bˇa`ng nhau v`a loa.i bo˙’ nh˜u.ng phˆa`n nˇa`m ngo`ai h`ınhch˜u nhˆa.t Sau d¯´o phˆa`n c`on la.i d¯u.o c xu.˙’ l´y lˇa.p la.i bˇa`ng c´ach kiˆe˙’m tra c´ac Tru.`o.ng ho p 1 v`a
2 v`a tiˆe´p tu.c phˆan chia (nˆe´u cˆa`n) cho d¯ˆe´n khi phˆa`n c`on la.i ho`an to`an nˇa`m trong h`ınh ch˜u.nhˆa.t hoˇa.c nˇa`m trong nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i mˆo.t d¯u.`o.ng thˇa˙’ng bˆen tr´ai, bˆenpha˙’i, bˆen du.´o.i hoˇa.c bˆen trˆen n`ao d¯´o
D- ˆe˙’ x´ac d¯i.nh c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´i khi n`ao nˇa`m ngo`ai hay trong mˆo.t h`ınh ch˜u nhˆa.t, ch´ung
ta d¯ˇa.t mˆo.t m˜a “nu.˙’a mˇa.t phˇa˙’ng” cho mˆo˜i d¯iˆe˙’m Mˆo˜i ca.nh cu˙’a h`ınh ch˜u nhˆa.t x´ac d¯i.nh mˆo.t
d¯u.`o.ng thˇa˙’ng d¯i qua n´o; d¯u.`o.ng thˇa˙’ng n`ay chia mˇa.t phˇa˙’ng th`anh nu.˙’a mˇa.t phˇa˙’ng trong v`a
nu.˙’a mˇa.t phˇa˙’ng ngo`ai nhu trong H`ınh 3.4 d¯ˆo´i v´o.i ca.nh bˆen pha˙’i: Ta quy u.´o.c nu.˙’a mˇa.t phˇa˙’ng
trong tu.o.ng ´u.ng ch´u.a h`ınh ch˜u nhˆa.t; ngu.o c la.i l`a nu.˙’a mˇa.t phˇa˙’ng ngo`ai
Do c´o bˆo´n ca.nh, ta s˜e su.˙’ du.ng chuˆo˜i bˆo´n bit d¯ˆe˙’ m˜a ho´a mˆo.t d¯iˆe˙’m P trong mˇa.t phˇa˙’ng K´y hiˆe.u E(P ) l`a m˜a cu˙’a d¯iˆe˙’m P Mˆo˜i bit trong t`u m˜a d¯u.o c d¯ˇa.t bˇa`ng 1 (TRUE) hoˇa.c 0 (FALSE); bˆo´n bit trong t`u m˜a E(P ) tu.o.ng ´u.ng c´ac d¯iˆe` u kiˆe.n sau:
Trang 8
Nu.˙’a mˇa.t phˇa˙’ng trong
Nu.˙’a mˇa.t phˇa˙’ng ngo`ai
xmax
H`ınh 3.4: C´ac nu.˙’a mˇa.t phˇa˙’ng d¯u.o c x´ac d¯i.nh bo.˙’i ca.nh bˆen pha˙’i
• Bit th´u nhˆa´t d¯ˇa.t bˇa`ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i ca.nh
bˆen tr´ai;
• Bit th´u hai d¯ˇa.t bˇa`ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i ca.nh
bˆen pha˙’i;
• Bit th´u ba d¯ˇa.t bˇa`ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i ca.nh bˆen
trˆen;
• Bit th´u tu d¯ˇa.t bˇa`ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i ca.nh bˆen
du.´o.i
Do d¯´o c´ac d¯iˆe˙’m nˇa`m trong h`ınh ch˜u nhˆa.t c´o m˜a 0000; c´ac d¯iˆe˙’m thuˆo.c v`ung nˇa`m ph´ıa trˆen v`a bˆen tr´ai h`ınh ch˜u nhˆa.t d¯u.o c g´an t`u m˜a l`a 1001 Viˆe.c xˆay du ng m˜a cu˙’a mˆo.t d¯iˆe˙’m d¯o.n thuˆa` n l`a bˆo´n ph´ep so s´anh: Ho`anh d¯ˆo cu˙’a d¯iˆe˙’m d¯u.o c so s´anh v´o.i ca.nh bˆen tr´ai xmin;
tung d¯ˆo d¯u.o c so s´anh v´o.i ca.nh bˆen du.´o.i ymin; v.v C´ac d¯u.`o.ng thˇa˙’ng d¯i qua c´ac ca.nh cu˙’a h`ınh ch˜u nhˆa.t chia mˇa.t phˇa˙’ng th`anh ch´ın v`ung C´ac d¯iˆe˙’m trong mˆo.t v`ung c´o c`ung mˆo.t m˜a nhu chı˙’ ra trong H`ınh 3.5 V`ı d¯o.n vi nho˙’ nhˆa´t c´o thˆe˙’ d¯o.c, ghi trˆen m´ay t´ınh l`a byte, nˆen ch´ung ta su.˙’ du.ng kiˆe˙’u byte d¯ˆe˙’ m˜a ho´a mˆo.t d¯iˆe˙’m trong d¯´o bˆo´n bit thˆa´p tu.o.ng ´u.ng t`u m˜a cu˙’a n´o v`a bˆo´n bit cao d¯u.o c d¯ˇa.t bˇa`ng khˆong Thu˙’ tu.c Encode() thu c hiˆe.n tiˆe´n tr`ınh n`ay:
void Encode(Point2D P, float Left, float Right, float Bottom, float Top,
char *Code) {
Trang 91010 1000 1001
0010 0000 0001
0110 0100 0101
ymin
ymax
H`ınh 3.5: C´ac t`u m˜a tu.o.ng ´u.ng h`ınh ch˜u nhˆa.t (R).
*Code = 0;
if (P.x < Left) *Code |= 8;
if (P.x > Right) *Code |= 4;
if (P.y < Bottom) *Code |= 2;
if (P.y > Top) *Code |= 1;
}
C´ac d¯iˆe˙’m A, B d¯u.o c m˜a ho´a th`anh c´ac t`u m˜a E(A) v`a E(B) Trˆen co so.˙’ d¯´o ch´ung ta c´o thˆe˙’ x´ac d¯i.nh d¯oa.n thˇa˙’ng AB nˇa`m ho`an to`an bˆen trong h`ınh ch˜u nhˆa.t hoˇa.c thuˆo.c nu.˙’a
mˇa.t phˇa˙’ng ngo`ai n`ao d¯´o Ta c´o
1 Chˆa´p nhˆa.n nˆe´u v`a chı˙’ nˆe´u E(A) = E(B) = 0.
2 Loa.i bo˙’ nˆe´u v`a chı˙’ nˆe´u [E(A) AND E(B)] != 0.
Trˆen co so.˙’ cu˙’a nh˜u.ng phˆan t´ıch trˆen ta c´o thˆe˙’ viˆe´t la.i thuˆa.t to´an chia nhi phˆan nhu sau:
1 Nˆe´u E(A) = 0 v`a E(B) = 0 kˆe´t luˆa.n AB ∩ (R) = AB; thuˆa.t to´an d`u.ng.
2 Nˆe´u [E(A) AND E(B)] != 0 kˆe´t luˆa.n AB ∩ (R) = ∅; kˆe´t th´uc thuˆa.t to´an.
Trang 103 Nˆe´u E(A) = 0 v`a E(B) 6= 0 (t´u.c A ∈ (R) v`a B / ∈ (R)) thu c hiˆe.n
• D - ˇa.t C = A, D = B.
• Trong khi d¯ˆo d`ai kCDk l´o.n ho.n ² (sˆo´ du.o.ng nho˙’ t`uy ´y)
D- ˇa.t M l`a trung d¯iˆe˙’m cu˙’a d¯oa.n CD.
Nˆe´u E(M) = 0 th`ı cˆa.p nhˆa.t C = M ngu.o c la.i D = M.
• Kˆe´t luˆa.n AB ∩ (R) = AM; kˆe´t th´uc thuˆa.t to´an.
4 Nˆe´u E(A) 6= 0 v`a E(B) = 0 (t´u.c A / ∈ (R) v`a B ∈ (R)), ho´an d¯ˆo˙’i vai tr`o cu˙’a A v`a B;
lˇa.p la.i Bu.´o.c 3
5 Ngu.o c la.i thu c hiˆe.n
• D - ˇa.t C = A, D = B.
• Trong khi d¯ˆo d`ai kCDk l´o.n ho.n ²
D- ˇa.t M l`a trung d¯iˆe˙’m cu˙’a d¯oa.n CD.
Nˆe´u E(M) = 0 ´ap du.ng Bu.´o.c 3 cho hai d¯oa.n MC v`a MD Kˆe´t luˆa.n AB ∩(R) =
CD; kˆe´t th´uc thuˆa.t to´an.
Nˆe´u [E(M) AND E(C)] != 0 d¯ˇa.t C = M.
Nˆe´u [E(M) AND E(D)] != 0 d¯ˇa.t D = M.
Nˆe´u [E(C) AND E(D)] != 0 kˆe´t luˆa.n AB ∩ (R) = ∅; kˆe´t th´uc thuˆa.t to´an.
x
y xmin | xmax | ymin — ymax —
• A
• B
•
M1
•
M2M •3
H`ınh 3.6: Minh ho.a cu˙’a thuˆa.t to´an chia nhi phˆan
V´ı du 3.3.1 X´et v´ı du t`ım giao cu˙’a h`ınh ch˜u nhˆa.t
R := {(x, y) ∈ R2 | 3 ≤ x ≤ 7, 2 ≤ y ≤ 5}
Trang 11v`a hai d¯iˆe˙’m A(5, 3) v`a B(10, 5) Ba bu.´o.c d¯ˆa` u tiˆen cu˙’a thuˆa.t to´an chia nhi phˆan cho trongba˙’ng sau
H`ınh 3.6 minh ho.a ba bu.´o.c lˇa.p d¯ˆa`u tiˆen cu˙’a thuˆa.t to´an chia nhi phˆan v´o.i c´ac d¯iˆe˙’m gi˜u.a
tu.o.ng ´u.ng l`a M1, M2, v`a M3.
Nhˆa.n x´et rˇa`ng phu.o.ng ph´ap chia nhi phˆan khˆong hiˆe.u qua˙’ do t´ınh to´an nhiˆe` u d¯ˆe˙’ x´acd¯i.nh c´ac giao d¯iˆe˙’m
Thuˆa.t to´an Cohen-Sutherland thu.`o.ng d¯u.o c su.˙’ du.ng trong c´ac ´u.ng du.ng cˇa´t x´en do t´ınhhiˆe.u qua˙’ v`a phˆo˙’ biˆe´n cu˙’a n´o Thuˆa.t to´an cung cˆa´p mˆo.t c´ach tiˆe´p cˆa.n chia d¯ˆe˙’ tri rˆa´t hiˆe.uqua˙’ gia˙’i b`ai to´an x´ac d¯i.nh giao cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh ch˜u nhˆa.t
Tu.o.ng tu phu.o.ng ph´ap chia nhi phˆan, thuˆa.t to´an Cohen-Sutherland tru.´o.c hˆe´t kiˆe˙’mtra Tru.`o.ng ho p 1 (chˆa´p nhˆa.n) v`a 2 (loa.i bo˙’) Nˆe´u khˆong xa˙’y ra, n´o chia d¯oa.n thˇa˙’ng th`anhhai phˆa` n v`a loa.i bo˙’ phˆa`n nˇa`m ngo`ai h`ınh ch˜u nhˆa.t Sau d¯´o phˆa`n c`on la.i d¯u.o c xu.˙’ l´y lˇa.pla.i bˇa`ng c´ach kiˆe˙’m tra c´ac Tru.`o.ng ho p 1 v`a 2 v`a tiˆe´p tu.c phˆan chia (nˆe´u cˆa`n) cho d¯ˆe´n khiphˆa` n c`on la.i ho`an to`an nˇa`m trong h`ınh ch˜u nhˆa.t hoˇa.c nˇa`m trong nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´acd¯i.nh bo.˙’i mˆo.t d¯u.`o.ng thˇa˙’ng bˆen tr´ai, bˆen pha˙’i, bˆen du.´o.i hoˇa.c bˆen trˆen n`ao d¯´o
Thuˆa.t to´an d¯ˇa.c biˆe.t hiˆe.u qua˙’ trong hai tru.`o.ng ho p chung: Trong Tru.`o.ng ho p 1, h`ınhch˜u nhˆa.t ch´u.a tˆa´t ca˙’ hoˇa.c hˆa`u hˆe´t v`ung hiˆe˙’n thi., v`a do d¯´o phˆa`n l´o.n c´ac nguyˆen so l`a chˆa´pnhˆa.n Tru.`o.ng ho p 2 na˙’y sinh trong b`ai to´an cho.n c´ac d¯ˆo´i tu.o ng nˇa`m trong h`ınh ch˜u nhˆa.tbao quanh con cha.y (xem [9])
Nˆe´u khˆong xa˙’y ra hai Tru.`o.ng ho p 1 hoˇa.c 2 ch´ung ta cˆa`n phˆan chia d¯oa.n thˇa˙’ng AB
th`anh hai phˆa` n sao cho mˆo.t hoˇa.c ca˙’ hai d¯oa.n con c´o thˆe˙’ bi loa.i bo˙’ Muˆo´n vˆa.y x´et d¯u.`o.ng
thˇa˙’ng x´ac d¯i.nh bo.˙’i ca.nh cu˙’a h`ınh ch˜u nhˆa.t chia d¯oa.n thˇa˙’ng AB th`anh hai phˆa`n: Phˆa`n
thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai s˜e bi loa.i bo˙’ C´o thˆe˙’ cho.n c´ac ca.nh d¯ˆe˙’ kiˆe˙’m tra theo th´u tu tu`y
´y, nhu.ng cˆa` n nhˆa´t qu´an trong thuˆa.t to´an Ch´ung ta s˜e su.˙’ du.ng th´u tu t`u tr´ai sang pha˙’i
Trang 12v`a t`u du.´o.i lˆen trˆen trong t`u m˜a Ch´u ´y rˇa`ng, bit trong t`u m˜a d¯u.o c d¯ˇa.t bˇa`ng 1 tu.o.ng ´u.ng
ca.nh cˆa`n x´et: Nˆe´u, chˇa˙’ng ha.n, A thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai x < xmin v`a AB khˆong thoa˙’ Tru.`o.ng ho p 2 th`ı d¯iˆe˙’m B pha˙’i thuˆo.c nu.˙’a mˇa.t phˇa˙’ng trong x > xmin v`a d¯oa.n thˇa˙’ng AB pha˙’i cˇa´t d¯u.`o.ng thˇa˙’ng x = xmin Do d¯´o thuˆa.t to´an luˆon luˆon cho.n mˆo.t d¯iˆe˙’m thuˆo.c nu.˙’a mˇa.t
phˇa˙’ng ngo`ai v`a su.˙’ du.ng t`u m˜a cu˙’a n´o d¯ˆe˙’ x´ac d¯i.nh ca.nh d¯u.o c x´et; ca.nh d¯u.o c cho.n tu.o.ng
´u.ng bit d¯u.o c d¯ˇa.t bˇa`ng 1 theo th´u tu t`u tr´ai sang pha˙’i v`a t`u du.´o.i lˆen trˆen; t´u.c l`a, n´o l`a bitbˆen tr´ai nhˆa´t bˇa`ng 1 trong t`u m˜a
Thuˆa.t to´an gˆo`m c´ac bu.´o.c nhu sau
1 M˜a ho´a c´ac d¯iˆe˙’m A, B bˇa`ng c´ac t`u m˜a E(A) v`a E(B).
2 Nˆe´u E(A) = E(B) = 0 th`ı AB ∩ (R) = AB.
3 Nˆe´u [E(A) AND E(B)] != 0 th`ı AB ∩ (R) = ∅.
4 Ngu.o c la.i cho.n mˆo.t d¯iˆe˙’m nˇa`m ngo`ai v`a du a v`ao t`u m˜a cu˙’a n´o d¯ˆe˙’ x´ac d¯i.nh ca.nh s˜ecˇa´t Sau d¯´o x´ac d¯i.nh giao d¯iˆe˙’m, loa.i bo˙’ phˆa`n nˇa`m ngo`ai Cˆa.p nhˆa.t d¯iˆe˙’m ngo`ai l`a giaod¯iˆe˙’m v`a m˜a ho´a n´o Chuyˆe˙’n sang Bu.´o.c 2
V´ı du 3.3.2 (a) Chˇa˙’ng ha.n, x´et d¯oa.n thˇa˙’ng AD trong H`ınh 3.7 D - iˆe˙’m D c´o m˜a 0000 v`a d¯iˆe˙’m A c´o m˜a 0110 D - oa.n thˇa˙’ng AD khˆong thoa˙’ m˜an c´ac Tru.`o.ng ho p 1 v`a 2 Do d¯´o cho.n d¯iˆe˙’m ngo`ai l`a A T`u m˜a E(A) cho biˆe´t d¯oa.n thˇa˙’ng AD cˇa´t c´ac d¯u.`o.ng thˇa˙’ng bˆen pha˙’i
x = xmax v`a bˆen du.´o.i y = ymin Theo th´u tu kiˆe˙’m tra, ch´ung ta su.˙’ du.ng ca.nh bˆen pha˙’i d¯ˆe˙’
cˇa´t d¯oa.n thˇa˙’ng AD l`a DC Thay d¯iˆe˙’m A l`a C v`a cˆa.p nhˆa.t t`u m˜a cu˙’a A l`a 0000 Trong bu.´o.c lˇa.p kˆe´ tiˆe´p, kiˆe˙’m tra ta thˆa´y DC thoa˙’ m˜an Tru.`o.ng ho p 1, do d¯´o kˆe´t th´uc thuˆa.t to´an (b) X´et d¯oa.n thˇa˙’ng EI M˜a cu˙’a c´ac d¯iˆe˙’m E v`a I tu.o.ng ´u.ng l`a 1001 v`a 0010 D- oa.n
thˇa˙’ng EI khˆong tho˙’a m˜an c´ac Tru.`o.ng ho p 1 v`a 2 Cho.n d¯iˆe˙’m ngo`ai, chˇa˙’ng ha.n E Do
bit kh´ac khˆong d¯ˆa` u tiˆen trong t`u m˜a cu˙’a E l`a bit th´u nhˆa´t nˆen d¯u.`o.ng thˇa˙’ng d¯u.o c cho.n l`a x = xmin Giao cu˙’a EI v´o.i d¯u.`o.ng thˇa˙’ng n`ay ta.i F Cˆa.p nhˆa.t E l`a F tu.o.ng ´u.ng t`u m˜a
0001 Bu.´o.c lˇa.p kˆe´ tiˆe´p, F I khˆong thoa˙’ m˜an c´ac Tru.`o.ng ho p 1 v`a 2, nˆen cho.n d¯iˆe˙’m ngo`ai, chˇa˙’ng ha.n l`a F Chı˙’ c´o mˆo.t bit (th´u ba) trong E(F ) kh´ac khˆong, nˆen cho.n d¯u.`o.ng thˇa˙’ng cˇa´t l`a y = ymax Ta c´o G = F I ∩ ymax Do d¯´o cˆa.p nhˆa.t E l`a G v`a cˆa.p nhˆa.t m˜a cu˙’a n´o l`a 0000.
Lˇa.p la.i mˆo.t bu.´o.c n˜u.a, ta d¯u.o c GH = EI ∩ (R) Kˆe´t qua˙’ n`ay c˜ung nhˆa.n d¯u.o c nˆe´u ta xuˆa´t ph´at t`u d¯iˆe˙’m I.
Trang 13
• A • B • C • D
• E • F • G • H • I
H`ınh 3.7: Minh ho.a cu˙’a thuˆa.t to´an Cohen-Sutherland
V´ı du 3.3.3 X´et v´ı du t`ım giao cu˙’a h`ınh ch˜u nhˆa.t
R := {(x, y) ∈ R2 | 0 ≤ x ≤ 8, 0 ≤ y ≤ 4}
v`a hai d¯iˆe˙’m A(−1, −2) v`a B(10, 9) Phu.o.ng tr`ınh d¯u.`o.ng thˇa˙’ng AB c´o da.ng
y = x − 1;
hay tu.o.ng d¯u.o.ng
x = y + 1.
C´ac bu.´o.c cu˙’a thuˆa.t to´an Cohen Sutherland c´o thˆe˙’ tˆo˙’ng kˆe´t trong ba˙’ng sau
k A B E(A) E(B) CodeOut D - u.`o.ng thˇa˙’ng cˇa´t To.a d¯ˆo giao I
Vˆa.y giao cu˙’a d¯oa.n thˇa˙’ng AB v`a h`ınh ch˜u nhˆa.t l`a d¯oa.n thˇa˙’ng nˆo´i hai d¯iˆe˙’m C(1, 0) v`a
D(5, 4).
Nh˜u.ng ´y tu.o.˙’ng trˆen d¯u.o c tˆa.p ho p trong thu˙’ tu.c Cohen Sutherland() C´ac bu.´o.c lˇa.p kiˆe˙’m tra c´ac tru.`o.ng ho p chˆa´p nhˆa.n hay loa.i bo˙’ Mˆo˜i lˆa`n trong v`ong lˇa.p hai d¯iˆe˙’m d¯ˆa`u cuˆo´i d¯u.o c cˆa.p nhˆa.t c`ung v´o.i t`u m˜a cu˙’a ch´ung v`a sau d¯´o tiˆe´n h`anh kiˆe˙’m tra
Trang 14D- ˆe˙’ thuˆa.t to´an hiˆe.u qua˙’ ho.n, ch´ung ta nˆen t´ınh c´ac hˆe sˆo´ g´oc chı˙’ mˆo.t lˆa`n Tuy nhiˆen,v´o.i ca˙’i tiˆe´n n`ay, thuˆa.t to´an khˆong pha˙’i l`a hiˆe.u qua˙’ nhˆa´t Do viˆe.c kiˆe˙’m tra v`a loa.i bo˙’ d¯u.o cthu c hiˆe.n theo mˆo.t th´u tu nhˆa´t d¯i.nh, thuˆa.t to´an d¯ˆoi khi thu c hiˆe.n tiˆe´n tr`ınh loa.i bo˙’ khˆongcˆa` n thiˆe´t, chˇa˙’ng ha.n trong tru.`o.ng ho p giao d¯iˆe˙’m cu˙’a d¯oa.n thˇa˙’ng v´o.i mˆo.t ca.nh cu˙’a h`ınhch˜u nhˆa.t l`a “d¯iˆe˙’m giao ngo`ai”; t´u.c l`a, khi n´o khˆong nˇa`m trˆen biˆen cu˙’a h`ınh ch˜u nhˆa.t (v´ı
du., d¯iˆe˙’m F trˆen d¯oa.n thˇa˙’ng EI trong H`ınh 3.7) Thuˆa.t to´an cu˙’a Nicholl v`a Lee tr´anh viˆe.c
t´ınh to´an c´ac giao d¯iˆe˙’m ngo`ai bˇa`ng c´ach phˆan chia mˇa.t phˇa˙’ng th`anh nhiˆe` u v`ung ho.n (xem[14])
Boolean Cohen_Sutherland(Point2D *A, Point2D *B, float Left,
float Right, float Bottom, float Top){
char CodeA, CodeB, CodeOut;
float x, y;
Encode(*A, Left, Right, Bottom, Top, &CodeA);
Encode(*B, Left, Right, Bottom, Top, &CodeB);
while (1)
{
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) // Left
Trang 153.3.4 Thuˆ a.t to´an Liang-Barsky
Sau khi thuˆa.t to´an cˇa´t d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo`i cu˙’a Cyrus v`a Beck cˆong bˆo´ nˇam 1978(d¯u.o c tr`ınh b`ay trong phˆa`n kˆe´ tiˆe´p), nˇam 1984, Liang (d¯ˆo.c lˆa.p v´o.i Barsky) d¯˜a xˆay du ngthuˆa.t to´an giao d¯oa.n thˇa˙’ng v`a h`ınh ch˜u nhˆa.t rˆa´t hiˆe.u qua˙’ theo c´ach ho`an to`an kh´ac v´o.inh˜u.ng thuˆa.t to´an tr`ınh b`ay trˆen Phu.o.ng ph´ap n`ay du a trˆen tham sˆo´ ho´a cu˙’a d¯oa.n thˇa˙’ngv`a gia˙’i hˆe c´ac bˆa´t phu.o.ng tr`ınh tuyˆe´n t´ınh theo mˆo.t ˆa˙’n sˆo´
Nhˆa.n x´et rˇa`ng h`ınh ch˜u nhˆa.t (R) gˆo`m tˆa.p c´ac d¯iˆe˙’m trong mˇa.t phˇa˙’ng gi´o.i ha.n bo.˙’i c´ac
d¯u.`o.ng thˇa˙’ng qua c´ac ca.nh cu˙’a n´o; t´u.c l`a
(R) = {(x, y) ∈ R2 | xmin ≤ x ≤ xmax, ymin ≤ y ≤ ymax}.
Trang 16Tham sˆo´ ho´a ho´a d¯oa.n AB bo.˙’i P (t) := A + t(B − A) v´o.i t ∈ [0, 1].
Nhu vˆa.y b`ai to´an x´ac d¯i.nh giao cu˙’a h`ınh ch˜u nhˆa.t (R) v`a d¯oa.n thˇa˙’ng AB d¯u.a vˆe` x´ac
d¯i.nh c´ac gi´a tri tham sˆo´ t thoa˙’ hˆe c´ac bˆa´t phu.o.ng tr`ınh
ymin ≤ y A + t(y B − y A) ≤ ymax.
Hay tu.o.ng d¯u.o.ng (
Suy ra nˆe´u tˆo`n ta.i chı˙’ sˆo´ i ∈ {0, 1, 2, 3} sao cho p i = 0 v`a q i > 0 th`ı hˆe bˆa´t phu.o.ng
tr`ınh vˆo nghiˆe.m; trong tru.`o.ng ho p n`ay, d¯oa.n thˇa˙’ng AB giao v´o.i h`ınh ch˜u nhˆa.t (R) bˇa`ng
trˆo´ng Ngu.o c la.i d¯ˇa.t
2 Kho.˙’i ta.o i = 0 v`a t0 = 0, t1 = 1.
3 Nˆe´u p i = 0 v`a q i > 0 kˆe´t luˆa.n AB ∩ (R) = ∅; thuˆa.t to´an d`u.ng.
Trang 174 Nˆe´u p i > 0 d¯ˇa.t t0 = max{t0, q i
p i } Chuyˆe˙’n sang Bu.´o.c 7.
5 Nˆe´u p i < 0 d¯ˇa.t t1 = min{t1, q i
p i } Chuyˆe˙’n sang Bu.´o.c 7.
6 Nˆe´u t0 > t1 kˆe´t luˆa.n AB ∩ (R) = ∅; thuˆa.t to´an d`u.ng.
7 Nˆe´u i < 3 thay i = i + 1 v`a lˇa.p la.i Bu.´o.c 3; ngu.o c la.i, kˆe´t luˆa.n AB ∩ (R) = CD, trong
d¯´o
C = A + t0(B − A),
D = A + t1(B − A).
V´ı du 3.3.4 H`ınh 3.8 minh ho.a mˆo.t v´ı du cu˙’a thuˆa.t to´an Lang-Barsky
1 2 3 4 5 6 7
(R)
A •
@t0 = 0
B
•
@t1 = 1
C
@t0 = 1
5
D
@t1 = 2
3
H`ınh 3.8: Mˆo.t v´ı du cu˙’a thuˆa.t to´an Liang-Barsky
V´ı du 3.3.5 X´et h`ınh ch˜u nhˆa.t
R := {(x, y) ∈ R2 |0 ≤ x ≤ 8, 0 ≤ y ≤ 4}
v`a hai d¯iˆe˙’m A(−1, −2) v`a B(10, 9) Phu.o.ng tr`ınh tham sˆo´ d¯oa.n thˇa˙’ng AB c´o da.ng
(1 − t)A + tB.
Ta cˆa` n gia˙’i hˆe c´ac bˆa´t phu.o.ng tr`ınh
0 ≤ (1 − t)(−1) + t(10) ≤ 8,
0 ≤ (1 − t)(−2) + t(9) ≤ 4.
Trang 18Hay tu.o.ng d¯u.o.ng
3.4.1 Vi tr´ı tu.o.ng d¯ˆo´i cu˙’a mˆo.t d¯iˆe˙’m v´o.i d¯u.`o.ng thˇa˙’ng
Trong nhiˆe` u ´u.ng du.ng ta thu.`o.ng quan tˆam kh´ai niˆe.m nu.˙’a mˇa.t phˇa˙’ng trong v`a nu.˙’a mˇa.t
phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i mˆo.t d¯u.`o.ng thˇa˙’ng (xem Chu.o.ng 1) Kh´ai niˆe.m n`ay liˆen quan mˆa.t
thiˆe´t d¯ˆe´n ph´ap vector cu˙’a d¯u.`o.ng thˇa˙’ng
Nhˇa´c la.i l`a phu.o.ng tr`ınh tˆo˙’ng qu´at cu˙’a d¯u.`o.ng thˇa˙’ng l c´o da.ng
ax + by + c = 0.
Hay tu.o.ng d¯u.o.ng
ax + by = −c.
N´oi c´ach kh´ac, l = {P ∈ R2 | h OP , ni = D}, trong d¯´o n = (a, b) −→ t l`a ph´ap vector cu˙’a d¯u.`o.ng
thˇa˙’ng v`a D = −c K´y hiˆe.u
(l+) := {P ∈ R2 | h OP , ni > D}, −→
(l − ) := {P ∈ R2 | h OP , ni < D}, −→
Trang 19
n Q A •
Nu.˙’a mˇa.t phˇa˙’ng ngo`ai (l −)
Nu.˙’a mˇa.t phˇa˙’ng trong (l+)
l / / / / / / / / / / / / / / / / / / / / / / / θ
H`ınh 3.9: Vi tr´ı tu.o.ng d¯ˆo´i cu˙’a d¯iˆe˙’m Q v´o.i d¯u.`o.ng thˇa˙’ng l.
l`a c´ac nu.˙’a mˇa.t phˇa˙’ng ngo`ai v`a nu.˙’a mˇa.t phˇa˙’ng trong x´ac d¯i.nh bo.˙’i l (xem H`ınh 3.9).
Vˆa´n d¯ˆe` d¯ˇa.t ra o.˙’ d¯ˆay l`a v´o.i mˆo.t d¯iˆe˙’m Q t`uy ´y trong mˇa.t phˇa˙’ng, h˜ay x´ac d¯i.nh d¯iˆe˙’m
Q nˇa`m trong nu.˙’a mˇa.t phˇa˙’ng n`ao? Gia˙’ su.˙’ A l`a d¯iˆe˙’m nˇa`m trˆen d¯u.`o.ng thˇa˙’ng l K´y hiˆe.u θ l`a
g´oc gi˜u.a vector n v`a vector AQ Dˆe˜ d`ang thˆa´y rˇa`ng g´oc θ nho˙’ ho.n 90 −→ 0 nˆe´u Q thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai v`a do d¯´o hn, AQi > 0 Tu.o.ng tu , g´oc θ l´o.n ho.n 90 −→ 0 nˆe´u Q thuˆo.c nu.˙’a mˇa.t phˇa˙’ng trong v`a do d¯´o hn, AQi < 0 Cuˆo´i c`ung, g´oc θ bˇa`ng 90 −→ 0 nˆe´u Q thuˆo.c d¯u.`o.ng thˇa˙’ng l v`a do d¯´o hn, AQi = 0 Vˆa.y −→
1 Q ∈ (l+) nˆe´u hn, AQi > 0 −→
2 Q ∈ (l − ) nˆe´u hn, AQi < 0 −→
3 Q ∈ l nˆe´u hn, AQi = 0 −→
Ch´u ´y rˇa`ng
hn, AQi > 0 −→
tu.o.ng d¯u.o.ng
hn, OQi > D −→
Do d¯´o ta c´o thˆe˙’ viˆe´t la.i tiˆeu chuˆa˙’n kiˆe˙’m tra d¯iˆe˙’m Q thuˆo.c nu.˙’a mˇa.t phˇa˙’ng n`ao nhu sau:
1 Q ∈ (l+) nˆe´u hn, OQi > D −→
2 Q ∈ (l − ) nˆe´u hn, OQi < D −→
3 Q ∈ l nˆe´u hn, OQi = D −→
Chˇa˙’ng ha.n, gˆo´c to.a d¯ˆo (0, 0) thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai nˆe´u v`a chı˙’ nˆe´u D < 0.
Trang 20B
(R)
H`ınh 3.10: Giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo`i
3.4.2 Thuˆ a.t to´an t`ım giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo `i
Nˇam 1978, Cyrus v`a Beck [5] d¯˜a xˆay du ng thuˆa.t to´an x´ac d¯i.nh giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo`i v`a c´o thˆe˙’ mo.˙’ rˆo.ng dˆe˜ d`ang trong ba chiˆe`u H`ınh ch˜u nhˆa.t l`a mˆo.t tru.`o.ng ho p d¯ˇa.c biˆe.t cu˙’a d¯a gi´ac lˆo`i v`a do d¯´o c´o thˆe˙’ ´ap du.ng thuˆa.t to´an n`ay Thuˆa.t to´an Liang-Barsky tr`ınh b`ay trong phˆa` n tru.´o.c du a trˆen c´ach tiˆe´p cˆa.n cu˙’a Cyrus v`a Beck Thuˆa.t to´an Cyrus-Beck du a trˆen tiˆeu chuˆa˙’n loa.i bo˙’ d¯o.n gia˙’n bˇa`ng c´ach x´et vi tr´ı tu.o.ng d¯ˆo´i cu˙’a mˆo.t d¯iˆe˙’m v´o.i mˆo.t d¯u.`o.ng thˇa˙’ng
Nhˇa´c la.i l`a trong thuˆa.t to´an Cohen-Sutherland, d¯ˆo´i v´o.i c´ac d¯oa.n thˇa˙’ng khˆong nˇa`m
trong h`ınh ch˜u nhˆa.t hoˇa.c bi loa.i bo˙’ ho`an to`an, ta cˆa`n t´ınh to.a d¯ˆo giao d¯iˆe˙’m (x, y) cu˙’a d¯oa.n thˇa˙’ng v´o.i mˆo.t ca.nh n`ao d¯´o bˇa`ng c´ach thˆe´ gi´a tri d¯˜a biˆe´t x hoˇa.c y v`ao phu.o.ng tr`ınh ca.nh
d¯´u.ng hay ngang tu.o.ng ´u.ng Tuy nhiˆen, trong thuˆa.t to´an tham sˆo´ ho´a d¯oa.n thˇa˙’ng, ta s˜e
t`ım c´ac gi´a tri tham sˆo´ t trong khoa˙’ng biˆe˙’u diˆe˜n cu˙’a d¯oa.n thˇa˙’ng cho d¯iˆe˙’m giao cu˙’a d¯u.`o.ng
thˇa˙’ng v`a ca.nh d¯u.o c x´et N´oi chung, v`ı tˆa´t ca˙’ c´ac ca.nh s˜e giao v´o.i d¯u.`o.ng thˇa˙’ng, nˆen bˆo´n
gi´a tri t cˆa`n d¯u.o c t´ınh V´o.i mˆo.t loa.t c´ac ph´ep so s´anh d¯o.n gia˙’n s˜e cho biˆe´t c´ac tham sˆo´ trong bˆo´n gi´a tri n`ay tu.o.ng ´u.ng v´o.i c´ac d¯iˆe˙’m giao thu c su Sau d¯´o c´ac to.a d¯ˆo (x, y) cu˙’a
mˆo.t hoˇa.c hai giao d¯iˆe˙’m d¯u.o c x´ac d¯i.nh N´oi chung c´ach tiˆe´p cˆa.n n`ay s˜e tiˆe´t kiˆe.m th`o.i gian ho.n thuˆa.t to´an cˇa´t x´en Cohen-Sutherland do n´o tr´anh v`ong lˇa.p cˆa`n thiˆe´t d¯ˆe˙’ cˇa´t nhiˆe` u ca.nh cu˙’a h`ınh ch˜u nhˆa.t Ho.n n˜u.a, c´ac ph´ep t´ınh trong khˆong gian tham sˆo´ 1D d¯o.n gia˙’n ho.n trong khˆong gian 2D
Gia˙’ su.˙’ d¯a gi´ac lˆo`i (R) d¯u.o c d¯i.nh ngh˜ıa nhu mˆo.t d˜ay c´ac d¯ı˙’nh P i = (x i , y i ), i =
0, 1, , L, trong hˆe to.a d¯ˆo thu c v´o.i P0 = P L Mu.c d¯´ıch cu˙’a phˆa`n n`ay l`a loa.i bo˙’ nh˜u.ng phˆa`n
cu˙’a d¯oa.n thˇa˙’ng AB khˆong nˇa`m trong “cu.˙’a sˆo˙’” (R) (H`ınh 3.10).
Trang 21K´y hiˆe.u l i , i = 0, 1, , L, l`a d¯u.`o.ng thˇa˙’ng d¯i qua hai d¯ı˙’nh liˆen tiˆe´p P i v`a P i+1 D- ˇa.t
(l+i ) := {P ∈ R2 | h OP , n −→ i i > D i },
(l −
i ) := {P ∈ R2 | h OP , n −→ i i < D i },
l`a c´ac nu.˙’a mˇa.t phˇa˙’ng ngo`ai v`a mˇa.t phˇa˙’ng trong x´ac d¯i.nh bo.˙’i l i , trong d¯´o n i l`a ph´ap vector
cu˙’a l i d¯u.o c cho.n hu.´o.ng ra nu.˙’a mˇa.t phˇa˙’ng ngo`ai v`a D i l`a hˇa`ng sˆo´ n`ao d¯´o V`ı (R) l`a mˆo.t tˆa.p lˆo`i, nˆen phˆa`n trong cu˙’a d¯a gi´ac (R) ch´ınh l`a giao cu˙’a c´ac nu.˙’a mˇa.t phˇa˙’ng bˆen trong cu˙’a mˆo˜i ca.nh x´ac d¯i.nh bo.˙’i (R); t´u.c l`a
Y tu.o.˙’ng cu˙’a thuˆa.t to´an nhu sau V´o.i mˆo˜i d¯u.`o.ng thˇa˙’ng l i , i = 0, 1, , L, ch´ung ta
loa.i bo˙’ phˆa`n cu˙’a d¯oa.n thˇa˙’ng AB thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo.˙’i l i v`a cˆa.p nhˆa.t
AB = AB ∩ (l − i ) Nˆe´u o.˙’ bu.´o.c n`ao d¯´o AB ⊂ (l+i ) th`ı kˆe´t luˆa.n giao cu˙’a d¯oan thˇa˙’ng v`a d¯agi´ac lˆo`i bˇa`ng trˆo´ng; ngu.o c la.i, o.˙’ bu.´o.c cuˆo´i c`ung phˆa`n d¯oa.n thˇa˙’ng AB c`on la.i s˜e nˇa`m bˆen trong (R) ch´ınh l`a phˆa` n giao cˆa` n t`ım
D- ˆe˙’ dˆe˜ d`ang xu.˙’ l´y, ch´ung ta biˆe˙’u diˆe˜n AB o.˙’ da.ng tham sˆo´
P (t) = A + ct
trong d¯´o c = −−−→ BA l`a vector chı˙’ phu.o.ng cu˙’a d¯u.`o.ng thˇa˙’ng AB Khi t = 0, P (t) d¯ˇa.t ta.i d¯iˆe˙’m
A v`a t = 1, P (t) d¯ˇa.t ta.i d¯iˆe˙’m B Ta n´oi P (t) “di chuyˆe˙’n” t`u A d¯ˆe´n B khi t tˇang t`u 0 d¯ˆe´n
1 v`a c l`a hu.´o.ng di chuyˆe˙’n.
Khi x´et d¯u.`o.ng thˇa˙’ng l i ch´ung ta su.˙’ du.ng hai gi´a tri t in v`a t out d¯ˆe˙’ x´ac d¯i.nh pha.m vi
thay d¯ˆo˙’i cu˙’a tham sˆo´ t d¯ˆo´i v´o.i d¯oa.n thˇa˙’ng AB c`on la.i T´u.c l`a, du a trˆen c´ac tham sˆo´ n`ay ch´ung ta c´o thˆe˙’ x´ac d¯i.nh phˆa`n c`on la.i cu˙’a d¯oa.n AB o.˙’ bu.´o.c d¯ang x´et ch´ınh l`a tˆa.p c´ac d¯iˆe˙’m
P (t) v´o.i t in ≤ t ≤ t out L´uc ban d¯ˆa ` u t in = 0 v`a t out = 1 Khoa˙’ng thay d¯ˆo˙’i cu˙’a tham sˆo´ t s˜e tiˆe´p tu.c co la.i khi kiˆe˙’m tra v´o.i mˆo.t ca.nh m´o.i v`a nh˜u.ng phˆa`n khˆong nˇa`m trong d¯a gi´ac (R)
s˜e bi loa.i bo˙’ Nˆe´u o.˙’ bu.´o.c n`ao d¯´o, khoa˙’ng n`ay bˇa`ng trˆo´ng thuˆa.t to´an s˜e kˆe´t th´uc v`a ta c´o
giao cu˙’a d¯oa.n thˇa˙’ng AB v´o.i d¯a gi´ac (R) bˇa`ng trˆo´ng Trong tru.`o.ng ho p ngu.o c la.i, d¯oa.n c`on la.i [t in , t out ] s˜e x´ac d¯i.nh phˆa`n giao AB ∩ (R).
X´et d¯u.`o.ng thˇa˙’ng l i d¯i qua hai d¯ı˙’nh P i v`a P i+1 C´o hai tru.`o.ng ho p xa˙’y ra:
Trang 22D- u.`o.ng thˇa˙’ng l i song song v´o.i d¯oa.n thˇa˙’ng AB.
D- u.`o.ng thˇa˙’ng l i song song v´o.i d¯oa.n thˇa˙’ng AB nˆe´u ph´ap vector n i vuˆong g´oc v´o.i vector c; t´u.c l`a hn i , ci = 0 Trong tru.`o.ng ho p n`ay, d¯oa.n thˇa˙’ng AB nˇa`m ho`an to`an trong nu.˙’a mˇa.t
phˇa˙’ng ngo`ai (l+
i ) hoˇa.c nu.˙’a mˇa.t phˇa˙’ng trong (l −
i ) D- ˆe˙’ kiˆe˙’m tra tru.`o.ng ho p n`ao xa˙’y ra, tachı˙’ cˆa` n x´et vi tr´ı tu.o.ng d¯ˆo´i cu˙’a mˆo.t d¯iˆe˙’m, chˇa˙’ng ha.n A, v´o.i d¯u.`o.ng thˇa˙’ng l i D - ˇa.t a = −−−→ OA
Khi d¯´o
1 D- oa.n thˇa˙’ng AB thuˆo.c nu.˙’a mˇa.t phˇa˙’ng trong (l −
i ) nˆe´u hn i , ai < D i Trong tru.`o.ng ho p
n`ay ta khˆong cˆa` n cˆa.p nhˆa.t la.i c´ac tham sˆo´ t in v`a t out
2 Ngu.o c la.i, nˆe´u hn i , ai > D i th`ı d¯oa.n thˇa˙’ng AB thuˆo.c nu.˙’a mˇa.t phˇa˙’ng ngo`ai (l+
i ) v`a do
d¯´o theo (3.3) th`ı AB ∩ (R) = ∅; thuˆa.t to´an kˆe´t th´uc.
D- u.`o.ng thˇa˙’ng l i khˆong song song v´o.i d¯oa.n thˇa˙’ng AB.
Nˆe´u d¯u.`o.ng thˇa˙’ng l i khˆong song song v´o.i AB th`ı gi´a tri hn i , ci kh´ac khˆong v`a l i pha˙’i cˇa´t
d¯u.`o.ng thˇa˙’ng qua hai d¯iˆe˙’m A, B; t´u.c l`a tˆo `n ta.i t i sao cho P (t i ) ∈ l i Dˆe˜ d`ang kiˆe˙’m tra rˇa`ng
C´o hai tru.`o.ng ho p nhu trong H`ınh 3.11:
1 D - i v`ao D - oa.n thˇa˙’ng AB d¯i t`u nu.˙’a mˇa.t phˇa˙’ng ngo`ai (l+
i ) v`ao nu.˙’a mˇa.t phˇa˙’ng trong
(l −
i ) (H`ınh 3.11(a))
2 D - i ra D - oa.n thˇa˙’ng AB d¯i t`u nu.˙’a mˇa.t phˇa˙’ng trong (l −
i ) ra nu.˙’a mˇa.t phˇa˙’ng ngo`ai (l+
i )(H`ınh 3.11(b))
Trang 23Nu.˙’a mˇa.t phˇa˙’ng ngo`ai
Nu.˙’a mˇa.t phˇa˙’ng trong
Nu.˙’a mˇa.t phˇa˙’ng ngo`ai
Nu.˙’a mˇa.t phˇa˙’ng trong
l i //////////////////////////////////
(b)
H`ınh 3.11: D- oa.n thˇa˙’ng AB d¯i v`ao hay d¯i ra nu.˙’a mˇa.t phˇa˙’ng x´ac d¯i.nh bo.˙’i l i
D- ˆe˙’ x´ac d¯i.nh tru.`o.ng ho p n`ao xa˙’y ra, ch´ung ta x´et g´oc θ ho p bo.˙’i c´ac vector c v`a n i
Nˆe´u g´oc θ nho˙’ ho.n 900 (t´u.c l`a hn i , ci > 0) th`ı tu.o.ng ´u.ng d¯i ra; ngu.o c la.i ´u.ng v´o.i d¯i v`ao.
Trong tru.`o.ng ho p d¯i v`ao, th`ı phˆa`n ´u.ng v´o.i t < t i nˇa`m ngo`ai d¯a gi´ac (R) v`a do d¯´o cˆa` n
cˆa.p nhˆa.t la.i t in := max(t in , t i ) Ngu.o c la.i, nˆe´u d¯i ra, phˆa`n ´u.ng v´o.i t > t i nˇa`m ngo`ai d¯a gi´ac
(R) v`a do d¯´o cˆa.p nhˆa.t la.i t out := min(t out , t i ).
Ch´u ´y rˇa`ng, o.˙’ bu.´o.c n`ao d¯´o nˆe´u xa˙’y ra tru.`o.ng ho p t in > t out th`ı thuˆa.t to´an s˜e kˆe´tth´uc: phˆa` n giao AB ∩ (R) = ∅.
Trong tru.`o.ng ho p ngu.o c la.i, o.˙’ bu.´o.c cuˆo´i c`ung, AB ∩ (R) l`a d¯oa.n thˇa˙’ng tu.o.ng ´u.ng
hai d¯iˆe˙’m d¯ˆa` u cuˆo´i P (t in ) v`a P (t out ).
H`am Cyrus Beck() tra˙’ vˆe` tri False nˆe´u giao cu˙’a d¯oa.n thˇa˙’ng AB v`a d¯a gi´ac (R) (d¯u.o c
lu.u trong danh s´ach Poly kiˆe˙’u VertPtr2D) bˇa`ng trˆo´ng; ngu.o c la.i l`a True v`a phˆa`n giao l`a
d¯oa.n AB m´o.i D- ˆe˙’ ho`an thiˆe.n thu˙’ tu.c, ch´ung ta cˆa`n pha˙’i thˆem c´ac d`ong lˆe.nh kiˆe˙’m tra c´acd¯iˆe` u kiˆe.n biˆen
Boolean Cyrus_Beck(Point2D *A, Point2D *B, VertPtr2D Poly)
{
float t_in = 0, t_out = 1, t_hit, Denom, D;
Point2D F, S;
Trang 24Vector2D c, n, f, a;
VertPtr2D Tempt = Poly;
if (Tempt == NULL) return False;
Trang 25Trong hˆa` u hˆe´t c´ac ´u.ng du.ng, c´ac d¯a gi´ac d¯u.o c d¯i.nh ngh˜ıa nhu mˆo.t d˜ay c´ac d¯ı˙’nh trong hˆe.to.a d¯ˆo thu c Mˆo.t cu.˙’a sˆo˙’ c˜ung d¯u.o c d¯i.nh ngh˜ıa nhu vˆa.y v`a trong nhiˆe` u tru.`o.ng ho p ch´ung
ta muˆo´n v˜e phˆa` n d¯ˆo´i tu.o ng nˇa`m bˆen trong cu.˙’a sˆo˙’ x´ac d¯i.nh bo.˙’i d¯a gi´ac
V´o.i d¯ˆo´i tu.o ng l`a mˆo.t d¯oa.n thˇa˙’ng, ta c´o thˆe˙’ ´ap du.ng phu.o.ng ph´ap Cyrus-Beck trongPhˆa` n 3.4: d¯oa.n thˇa˙’ng d¯u.o c cˇa´t d¯ˆo´i v´o.i mˆo˜i d¯u.`o.ng biˆen cu˙’a d¯a gi´ac, v`a c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´id¯u.o c h`ınh th`anh V´o.i c´ac d¯ˆo´i tu.o ng l`a d¯a gi´ac th`ı viˆe.c t`ım giao (hay cˇa´t x´en) c´o phˆa`n ph´u.cta.p ho.n bo.˙’i v`ı trong qu´a tr`ınh xu.˙’ l´y thuˆa.t to´an cˇa´t, mˆo.t d¯a gi´ac c´o thˆe˙’ bi phˆan ma˙’nh th`anhnhiˆe` u d¯a gi´ac con kh´ac nhu trong H`ınh 3.12 D- a gi´ac c´o thˆe˙’ d¯u.o c tˆo m`au v´o.i mˆa˜u tˆo chotru.´o.c v`a do d¯´o c´ac ma˙’nh d¯a gi´ac pha˙’i d¯u.o c nˆo´i kˆe´t v´o.i mˆa˜u tˆo d¯´o
Ta s˜e quy u.´o.c rˇa`ng d¯a gi´ac bi cˇa´t l`a d¯a gi´ac d¯ˆo´i tu.o ng (S) Cu.˙’a sˆo˙’ s˜e d¯u.o c go.i l`a d¯a gi´ac cˇa´t (C) Vˆa´n d¯ˆe` d¯ˇa.t ra l`a l`am sao ta.o ra mˆo.t danh s´ach c´ac d¯ı˙’nh cu˙’a phˆa`n giao gi˜u.ahai d¯a gi´ac n`ay?
Trong nh˜u.ng phˆa` n sau, ch´ung ta s˜e x´et hai phu.o.ng ph´ap:
Trang 26H`ınh 3.12: Giao hai d¯a gi´ac.
1 Thuˆa.t to´an Sutherland-Hodgman [25] Phu.o.ng ph´ap n`ay ho`an to`an d¯o.n gia˙’n v`a thu c
hiˆe.n qu´a tr`ınh cˇa´t mˆo.t d¯a gi´ac bˆa´t k`y v´o.i mˆo.t d¯a gi´ac lˆo`i Cu.˙’a sˆo˙’ h`ınh ch˜u nhˆa.t l`amˆo.t tru.`o.ng ho p d¯ˇa.c biˆe.t cu˙’a c´ac d¯a gi´ac lˆo`i Thuˆa.t to´an n`ay c´o thˆe˙’ sinh thˆem nh˜u.ngca.nh m´o.i v`a do d¯´o cˆa`n loa.i bo˙’ sau khi kˆe´t th´uc
2 Thuˆa.t to´an Weiler-Atherton [27] C´ach tiˆe´p cˆa.n n`ay ph´u.c ta.p ho.n nhu.ng cho ph´ep
cˇa´t hai d¯a gi´ac bˆa´t k`y; thˆa.m ch´ı c´o thˆe˙’ c´o lˆo˜ hˆo˙’ng trong c´ac d¯a gi´ac
V`ı c´o nhiˆe` u tru.`o.ng ho p xa˙’y ra khi d¯a gi´ac d¯ˆo´i tu.o ng (S) d¯u.o c cˇa´t bo.˙’i d¯a gi´ac lˆo`i (C)
nˆen ch´ung ta cˆa` n phu.o.ng ph´ap tˆo˙’ ch´u.c c´ac phˆa` n d¯˜a d¯i qua trong qu´a tr`ınh xu.˙’ l´y Thuˆa.tto´an Sutherland-Hodgman ´ap du.ng phu.o.ng ph´ap chia d¯ˆe˙’ tri.: Phˆan t´ıch b`ai to´an kh´o th`anhnh˜u.ng b`ai to´an con d¯o.n gia˙’n ho.n D- ˇa.c biˆe.t, tu.o.ng tu thuˆa.t to´an Cyrus-Beck, n´o lo i du.ngt´ınh chˆa´t cu˙’a d¯a gi´ac lˆo`i: mˆo.t d¯u.`o.ng thˇa˙’ng d¯i qua ca.nh bˆa´t k`y cu˙’a d¯a gi´ac s˜e chia mˇa.tphˇa˙’ng th`anh phˆa` n trong (ch´u.a d¯a gi´ac) v`a phˆa` n ngo`ai Thuˆa.t to´an s˜e cˇa´t d¯a gi´ac (S) v´o.i d¯u.`o.ng thˇa˙’ng qua mˆo˜i ca.nh cu˙’a d¯a gi´ac (C) v`a gi˜u la.i phˆa`n thuˆo.c nu.˙’a mˇa.t phˇa˙’ng trong Tiˆe´n tr`ınh d¯u.o c lˇa.p la.i cho mo.i ca.nh cu˙’a (C) H`ınh 3.14 minh ho.a thuˆa.t to´an cˇa´t cu˙’a d¯a gi´ac (S) v`a h`ınh ch˜u nhˆa.t (C) Danh s´ach c´ac d¯ı˙’nh cu˙’a Subj xuˆa´t ph´at l`a A, B, C, D, E, F, G, A.
D- a gi´ac n`ay d¯u.o c cˇa´t v´o.i c´ac ca.nh bˆen tr´ai, bˆen du.´o.i, bˆen pha˙’i v`a bˆen trˆen cu˙’a (C); trong mˆo˜i bu.´o.c, mˆo.t danh s´ach m´o.i d¯u.o c sinh ra v`a g´an la.i cho (S) Danh s´ach sinh ra o.˙’ bu.´o.c
Trang 27cuˆo´i c`ung tu.o.ng ´u.ng mˆo.t hoˇa.c nhiˆe` u d¯a gi´ac liˆen kˆe´t la.i v´o.i nhau cho ta thˆong tin giao cu˙’ahai d¯a gi´ac.
K´y hiˆe.u Subj v`a Clip l`a danh s´ach c´ac d¯ı˙’nh cu˙’a hai d¯a gi´ac (S) v`a (C) tu.o.ng ´u.ng Danh s´ach Subj s˜e d¯u.o c cˆa.p nhˆa.t sau mˆo˜i tiˆe´n tr`ınh cˇa´t v´o.i mˆo.t ca.nh cu˙’a d¯a gi´ac (C) V`ı (C) l`a d¯a gi´ac lˆo`i, nˆen d¯u.`o.ng thˇa˙’ng d¯i qua ca.nh bˆa´t k`y cu˙’a n´o s˜e chia mˇa.t phˇa˙’ng th`anhphˆa` n ngo`ai v`a phˆa` n trong X´et hai d¯ı˙’nh liˆen tiˆe´p P i v`a P i+1 cu˙’a (C) v`a d¯u.`o.ng thˇa˙’ng l i d¯i
qua hai d¯iˆe˙’m n`ay K´y hiˆe.u (l+
Trong mˆo˜i tru.`o.ng ho p, ta xuˆa´t mˆo.t (hoˇa.c hai) d¯iˆe˙’m ra mˆo.t danh s´ach m´o.i nhu trong H`ınh3.13
Trang 28E F
G H
.
67
65
(d)
.
1 Hai d¯ı˙’nh F v`a S nˇa`m trong: xuˆa´t S.
2 D- ı˙’nh F nˇa`m trong v`a S nˇa`m ngo`ai: t`ım giao d¯iˆe˙’m I v`a xuˆa´t n´o.
3 Hai d¯ı˙’nh F v`a S nˇa`m ngo`ai: khˆong xuˆa´t.
4 D- ı˙’nh F nˇa`m ngo`ai v`a S nˇa`m trong: t`ım giao d¯iˆe˙’m I; xuˆa´t I v`a sau d¯´o xuˆa´t S.
Bˆay gi`o ta ´ap du.ng c´ach xu.˙’ l´y n`ay cho H`ınh 3.14
1 Danh s´ach Subj sau khi cˇa´t (S) v´o.i ca.nh bˆen tr´ai cu˙’a (C) :
(1, 2, D, E, F, G, 3, 4, I, A, 1).
2 Danh s´ach Subj sau khi cˇa´t (S) v´o.i ca.nh bˆen du.´o.i cu˙’a (C) :
(5, 6, E, F, 7, 5, 4, I, A, 1, 5).
Trang 293 Danh s´ach Subj sau khi cˇa´t (S) v´o.i ca.nh bˆen pha˙’i cu˙’a (C) :
(8, 9, F, 7, 5, 4, I, A, 1, 5, 8).
4 Danh s´ach Subj sau khi cˇa´t (S) v´o.i ca.nh bˆen trˆen cu˙’a (C) :
(9, F, 7, 5, 4, I, 10, 11, 5, 8, 9).
Ch´u ´y rˇa`ng c´o thˆem nh˜u.ng ca.nh phu nhu (5, 4) nˆo´i hai ma˙’nh d¯a gi´ac d¯u.o c ta.o ra
trong qu´a tr`ınh thu c hiˆe.n thuˆa.t to´an Nh˜u.ng ca.nh nhu vˆa.y c´o thˆe˙’ gˆay kh´o khˇan trong mˆo.tsˆo´ ´u.ng du ng, chˇa˙’ng ha.n tˆo m`au d¯a gi´ac Ta c´o thˆe˙’ loa.i bo˙’ nh˜u.ng ca.nh nhu vˆa.y; tuy nhiˆend¯ˆay l`a b`ai to´an khˆong tˆa` m thu.`o.ng (xem [24])
Trong mˆo˜i tiˆe´n tr`ınh thu c hiˆe.n thuˆa.t to´an Sutherland-Hodgman, mˆo.t danh s´ach m´o.id¯u.o c ta.o ra v`a sau d¯´o g´an la.i cho danh s´ach Subj Do d¯´o ch´ung ta cˆa`n mˆo.t danh s´ach trunggian NewSubj M˜a gia˙’ cu˙’a thuˆa.t to´an nhu sau:
V´o.i mˆo˜i d¯u.`o.ng thˇa˙’ng l d¯i qua hai d¯ı˙’nh liˆen tiˆe´p cu˙’a d¯a gi´ac (C) thu c hiˆe.n
• X´ac d¯i.nh ph´ap vector n v`a hˇa`ng sˆo´ D t`u d¯u.`o.ng thˇa˙’ng l.
• Kho.˙’i ta.o danh s´ach NewSubj = NULL.
• V´o.i hai d¯ı˙’nh F, S liˆen tiˆe´p cu˙’a d¯a gi´ac (S), kiˆe˙’m tra c´ac tru.`o.ng ho p cu˙’a ca.nh
F S v´o.i d¯u.`o.ng thˇa˙’ng l; tu`y theo mˆo˜i Tru.`o.ng ho p 1, 2 hoˇa.c 4, cˆa´t mˆo.t hoˇa.c hai
d¯iˆe˙’m v`ao danh s´ach NewSubj
• G´an Subj = NewSubj.
3.5.2 Thuˆ a.t to´an Weiler-Atherton
Trong mˆo.t sˆo´ ´u.ng du.ng nhu khu.˙’ bo˙’ mˇa.t khuˆa´t hay d¯´anh b´ong mˇa.t, ch´ung ta cˆa`n x´ac d¯i.nhphˆa` n chung cu˙’a hai d¯a gi´ac Trong tru.`o.ng ho p n`ay, tiˆe´n tr`ınh rˆa´t ph´u.c ta.p C´ach tiˆe´p cˆa.ncu˙’a Weiler-Atherton nhˇa`m t`ım giao cu˙’a hai d¯a gi´ac bˆa´t k`y, thˆa.m ch´ı cho ph´ep c´o lˆo˜ hˆo˙’ngtrong c´ac d¯a gi´ac Ngo`ai ra ta c˜ung c´o thˆe˙’ ta.o ra c´ac phˆa`n ho p v`a hiˆe.u cu˙’a hai d¯a gi´ac
X´et v´ı du trong H`ınh 3.15: Hai d¯a gi´ac (S) v`a (C) d¯u.o c biˆe˙’u diˆe˜n bo.˙’i c´ac danh s´ach d¯ı˙’nh, k´y hiˆe.u Subj = (A, B, C, D, E, A) v`a Clip = (a, b, c, d, e, a) tu.o.ng ´u.ng D- ˆe˙’ thuˆa.n tiˆe.n,ch´ung ta lu.u danh s´ach c´ac d¯ı˙’nh sao cho phˆa` n trong cu˙’a v`ung nˇa`m vˆe` ph´ıa tay tr´ai cu˙’a mˆo˜ica.nh khi di chuyˆe˙’n xung quanh d¯a gi´ac t`u d¯ı˙’nh n`ay d¯ˆe´n d¯ı˙’nh kh´ac trong danh s´ach Chˇa˙’ng
Trang 30ha.n, phˆa`n trong cu˙’a (S) nˇa`m vˆe ` bˆen tay tr´ai cu˙’a ca.nh t`u A d¯ˆe´n B v`a bˆen tr´ai cu˙’a ca.nh t`u.
B d¯ˆe´n C D- iˆe` u n`ay giˆo´ng nhu danh s´ach c´ac d¯ı˙’nh d¯u.o c lu.u theo th´u tu ngu.o c chiˆe`u kimd¯ˆo`ng hˆo`
Tˆa´t ca˙’ c´ac giao d¯iˆe˙’m cu˙’a hai d¯a gi´ac d¯u.o c x´ac d¯i.nh v`a lu.u trong mˆo.t danh s´ach
Chˇa˙’ng ha.n, trong v´ı du n`ay, c´o s´au giao d¯iˆe˙’m Bˆay gi`o ta cˇa´t (S) v´o.i d¯a gi´ac (C) bˇa`ng
c´ach lˆa` n theo “hu.´o.ng thuˆa.n” (t´u.c l`a, sao cho phˆa`n trong cu˙’a n´o nˇa`m bˆen tr´ai) cho d¯ˆe´n khigˇa.p giao d¯iˆe˙’m “d¯i v`ao”: l`a d¯iˆe˙’m giao m`a d¯i theo danh s´ach Subj s˜e di chuyˆe˙’n t`u ph´ıa ngo`aiv`ao ph´ıa trong cu˙’a d¯a gi´ac Clip Trong tru.`o.ng ho p n`ay l`a 1, v`a xuˆa´t ra danh s´ach lu.u tr˜u.thˆong tin (c´ac) d¯a gi´ac d¯u.o c cˇa´t
H`ınh 3.15: Cˇa´t x´en Weiler-Atherton
Tiˆe´n tr`ınh bˆay gi`o d¯o.n gia˙’n khi ph´at biˆe˙’u da.ng h`ınh ho.c: Duyˆe.t do.c theo Subj, dichuyˆe˙’n theo t`u.ng d¯oa.n, cho d¯ˆe´n khi gˇa.p mˆo.t giao d¯iˆe˙’m (2 trong v´ı du n`ay) Kˆe´ tiˆe´p ta dichuyˆe˙’n v`a lˆa` n theo Clip thay cho Subj C´o hai c´ach di chuyˆe˙’n trˆen Clip Di chuyˆe˙’n trˆenClip theo hu.´o.ng thuˆa.n cu˙’a n´o Nhu vˆa.y phˆa`n trong cu˙’a d¯a gi´ac Subj v`a Clip luˆon luˆon nˇa`mbˆen tay tr´ai trong qu´a tr`ınh di chuyˆe˙’n Khi gˇa.p mˆo.t giao d¯iˆe˙’m, ta chuyˆe˙’n sang Subj theohu.´o.ng thuˆa.n cu˙’a n´o v`a vˆan vˆan Mˆo˜i d¯ı˙’nh hay giao d¯iˆe˙’m bˇa´t gˇa.p d¯u.o c d¯ˇa.t v`ao danh s´ach.Lˇa.p la.i tiˆe´n tr`ınh “di chuyˆe˙’n theo hu.´o.ng thuˆa.n v`a nha˙’y gi˜u.a hai d¯a gi´ac” cho d¯ˆe´n khi gˇa.p
d¯ı˙’nh xuˆa´t ph´at Danh s´ach xuˆa´t ra d¯ˆe´n l´uc n`ay l`a (1, B, 2, 1).
Tiˆe´p tu.c kiˆe˙’m tra giao d¯iˆe˙’m v`ao kˆe´ tiˆe´p cu˙’a Subj chu.a d¯u.o c d¯i qua Ta c´o giao d¯iˆe˙’m
3 v`a lˇa.p la.i tiˆe´n tr`ınh trˆen, danh s´ach sinh ra l`a (3, 4, 5, 6, 3) Kiˆe˙’m tra thˆem, khˆong c`on giao
d¯iˆe˙’m v`ao cu˙’a Subj n`ao chu.a d¯u.o c viˆe´ng thˇam, nˆen tiˆe´n tr`ınh cˇa´t kˆe´t th´uc Ta c´o hai d¯a
gi´ac d¯u.o c sinh ra (1, B, 2, 1) v`a (3, 4, 5, 6, 3).
Mˆo.t c´ach sˇa´p xˆe´p h˜u.u hiˆe.u d¯ˆe˙’ thu c hiˆe.n tiˆe´n tr`ınh “lˆa`n theo hu.´o.ng thuˆa.n v`a nha˙’y”
Trang 31l`a xˆay du ng hai danh s´ach
Subj: (A, 1, B, 2, C, 3, 4, D, 5, 6, E, A)
Clip: (a, b, 4, 5, c, d, e, 6, 3, 2, 1, a).
d¯ˆe˙’ lˆa` n theo mˆo˜i d¯a gi´ac (sao cho phˆa` n trong cu˙’a n´o bˆen tay tr´ai) v`a danh s´ach c´ac d¯ı˙’nh v`ac´ac d¯iˆe˙’m giao d¯u.o c lu.u theo th´u tu ch´ung bˇa´t gˇa.p (D- iˆe` u g`ı xa˙’y ra nˆe´u khˆong c´o giao d¯iˆe˙’mgi˜u.a hai ca.nh cu˙’a hai d¯a gi´ac?) Nhu vˆa.y viˆe.c lˆa`n theo d¯a gi´ac tu.o.ng ´u.ng duyˆe.t danh s´achv`a nha˙’y gi˜u.a hai d¯a gi´ac tu.o.ng ´u.ng nha˙’y gi˜u.a hai danh s´ach
Ch´u ´y rˇa`ng ngay khi danh s´ach d¯u.o c xˆay du ng, c´o rˆa´t ´ıt thˆong tin h`ınh ho.c trongd¯´o-nhu kh´o c´o thˆe˙’ kiˆe˙’m tra “d¯iˆe˙’m nˇa`m ngo`ai d¯a gi´ac” d¯ˆe˙’ x´ac d¯i.nh ch´ınh x´ac d¯ı˙’nh v`ao.Hu.´o.ng thu c su d¯ˆe˙’ di chuyˆe˙’n d¯ˆo´i v´o.i mˆo˜i d¯a gi´ac d¯u.o c nh´ung trong th´u tu cu˙’a danh s´ach.Trong v´ı du tru.´o.c, tiˆe´n tr`ınh di chuyˆe˙’n trong thuˆa.t to´an d¯u.o c cho bo.˙’i H`ınh 3.16
Subj: A
◦ 1• B • 2• C ◦ 3• 4• D ◦ 5• 6• E ◦ A ◦
Clip: a
◦ b
◦ d
◦ e
D- ˜a d¯u.o c viˆe´ng thˇam
• = d¯iˆe˙’m d¯u.o c xuˆa´t ra
H`ınh 3.16: ´Ap du.ng phu.o.ng ph´ap Weiler-Atherton
Cuˆo´i c`ung, d¯ˆe˙’ ho`an thiˆe.n thuˆa.t to´an, ch´ung ta cˆa`n kiˆe˙’m tra nh˜u.ng tru.`o.ng ho p c´acca.nh cu˙’a Clip v`a Subj song song hay phu˙’ lˆa´p lˆen nhau mˆo.t phˆa`n
3.5.3 C´ ac ph´ ep to´ an tˆ a.p ho p trˆen c´ac d¯a gi´ac
Phˆa` n trˆen ta d¯˜a x´et b`ai to´an x´ac d¯i.nh giao cu˙’a hai d¯a gi´ac Phu.o.ng ph´ap tr`ınh b`ay n`ayc˜ung c´o thˆe˙’ ´ap du.ng d¯ˆe˙’ t`ım hiˆe.u v`a ho p cu˙’a hai d¯a gi´ac
Trang 321 Ho p cu˙’a hai d¯a gi´ac (S) v`a (C) D- i trˆen danh s´ach Subj theo hu.´o.ng thuˆa.n cho d¯ˆe´n
khi gˇa.p giao “d¯iˆe˙’m ra”: l`a d¯iˆe˙’m m`a d¯i theo ca.nh cu˙’a (S) s˜e di chuyˆe˙’n t`u phˆa`n trong
ra phˆa` n ngo`ai cu˙’a (C) Xuˆa´t giao d¯iˆe˙’m n`ay v`a duyˆe.t theo Subj cho d¯ˆe´n khi gˇa.p giao
d¯iˆe˙’m kh´ac v´o.i Clip Nha˙’y sang danh s´ach Clip v`a d¯i theo hu.´o.ng thuˆa.n cu˙’a n´o chod¯ˆe´n khi gˇa.p giao d¯iˆe˙’m kˆe´ tiˆe´p; xuˆa´t c´ac d¯ı˙’nh trong qu´a tr`ınh d¯i ngang qua v`a nha˙’ysang danh s´ach Subj rˆo`i d¯i theo hu.´o.ng thuˆa.n Qu´a tr`ınh kˆe´t th´uc khi gˇa.p d¯ı˙’nh xuˆa´tph´at ban d¯ˆa` u; t`ım giao d¯iˆe˙’m ra kˆe´ tiˆe´p chu.a d¯u.o c viˆe´ng thˇam v`a lˇa.p la.i tiˆe´n tr`ınhtrˆen
2 Hiˆe.u cu˙’a hai d¯a gi´ac (S) v`a (C) D- i trˆen danh s´ach Subj theo hu.´o.ng thuˆa.n cho d¯ˆe´nkhi gˇa.p giao d¯iˆe˙’m v`ao Nha˙’y sang danh s´ach Clip v`a d¯i theo hu.´o.ng ngu.o c (do d¯´ophˆa` n trong d¯a gi´ac (C) nˇa`m bˆen tay pha˙’i trong hu.´o.ng di chuyˆe˙’n) cho d¯ˆe´n khi gˇa.p
giao d¯iˆe˙’m, nha˙’y sang Subj Trong mˆo˜i bu.´o.c lˇa.p, ta luˆon luˆon di chuyˆe˙’n trˆen Subjtheo hu.´o.ng thuˆa.n v`a di chuyˆe˙’n trˆen Clip theo hu.´o.ng ngu.o c
V´o.i hai d¯a gi´ac (S) v`a (C) trong H`ınh 3.15, ´ap du.ng c´ac phu.o.ng ph´ap trˆen dˆe˜ d`ang
Mu.c d¯´ıch cu˙’a phˆa`n n`ay l`a ´ap du.ng mˆo.t sˆo´ kh´ai niˆe.m h`ınh ho.c d¯ˆe˙’ ta.o mˆo.t ´u.ng du.ng d¯ˆo` ho.a:mˆo pho˙’ng qu´a tr`ınh chuyˆe˙’n d¯ˆo.ng cu˙’a tia s´ang trong buˆo`ng k´ın
Trang 33Phu.o.ng ph´ap ray tracing l`a mˆo.t cˆong cu quan tro.ng trong d¯ˆo` ho.a m´ay t´ınh d¯ˆe˙’ tˆo˙’ng
ho p c´ac a˙’nh Trong tˆo˙’ng ho p a˙’nh, c´ac tia s´ang (nhˆan ta.o) “lˆa`n theo” trong thˆe´ gi´o.i thu c
ba chiˆe` u ch´u.a nhiˆe` u d¯ˆo´i tu.o ng D- u.`o.ng d¯i cu˙’a mˆo˜i tia s´ang xuyˆen qua c´ac d¯ˆo´i tu.o ng trongsuˆo´t hoˇa.c pha˙’n xa la.i t`uy theo m´u.c d¯ˆo pha˙’n xa cu˙’a d¯ˆo´i tu.o ng cho d¯ˆe´n khi n´o d`u.ng o.˙’ d¯ˆo´itu.o ng n`ao d¯´o M`au cu˙’a d¯ˆo´i tu.o ng n`ay sau d¯´o s˜e d¯u.o c d¯ˇa.t cho pixel tu.o.ng ´u.ng trˆen thiˆe´t
bi hiˆe˙’n thi Mˆo pho˙’ng qu´a tr`ınh ray tracing rˆa´t dˆe˜ d`ang trong hai chiˆe` u
H`ınh dung qu˜y d¯a.o cu˙’a tr´ai “pinball” nho˙’ khi n´o va cha.m v`ao c´ac d¯ˆo´i tu.o ng trong
“buˆo`ng k´ın” H`ınh 3.17 minh ho.a nh´at cˇa´t ngang cu˙’a mˆo.t buˆo`ng k´ın c´o nˇam b´u.c tu.`o.ng v`a
ch´u.a ba “tru tr`on” Tr´ai pinball bˇa´t d¯ˆa`u ta.i vi tr´ı S v`a di chuyˆe˙’n theo hu.´o.ng vector c cho
d¯ˆe´n khi gˇa.p vˆa.t ca˙’n s˜e bi dˆo.i la.i v`a di chuyˆe˙’n theo hu.´o.ng m´o.i Qu´a tr`ınh d¯u.o c lˇa.p la.i Qu˜yd¯a.o cu˙’a tr´ai pinball l`a mˆo.t d¯u.`o.ng gˆa´p kh´uc m`a ta c´o thˆe˙’ h`ınh dung ch´ınh l`a d¯u.`o.ng d¯i cu˙’atia s´ang khi n´o di chuyˆe˙’n trong buˆo`ng k´ın
H`ınh 3.17: V´ı du vˆe` ray tracing
Ch´ung ta cˆa` n xˆay du ng thuˆa.t to´an x´ac d¯i.nh d¯ˆo´i tu.o ng n`ao tia s´ang s˜e gˇa.p d¯ˆa`u tiˆenv`a vi tr´ı va cha.m ta.i d¯´o Vi tr´ı va cha.m s˜e l`a d¯iˆe˙’m kho.˙’i d¯ˆa`u cho d¯u.`o.ng d¯i kˆe´ tiˆe´p v`a ch´ung
ta c´o thˆe˙’ t`ım hu.´o.ng di chuyˆe˙’n m´o.i cu˙’a tia s´ang bˇa`ng c´ach ´ap du.ng nh˜u.ng k˜y thuˆa.t trongPhˆa` n 3.6.1 du.´o.i d¯ˆay
3.6.1 Vector pha˙’n xa.
Trong thu c tˆe´ ta thu.`o.ng nghiˆen c´u.u su pha˙’n xa cu˙’a c´ac d¯ˆo´i tu.o ng khi va cha.m v`ao nhauv`a hiˆe˙’n thi ch´ung D- iˆe` u n`ay d¯ˇa.c biˆe.t quan tro.ng trong mˆo h`ınh pha˙’n xa ´anh s´ang cu˙’a bˆe`mˇa.t hoˇa.c trong viˆe.c nghiˆen c´u.u qu´a tr`ınh chuyˆe˙’n d¯ˆo.ng cu˙’a c´ac phˆan tu.˙’ gas hay cu˙’a c´ac qua˙’
Trang 34Tru.´o.c hˆe´t ch´ung ta phˆan gia˙’i mˆo.t vector (th´u nhˆa´t) th`anh hai th`anh phˆa`n: mˆo.t th`anh
phˆa` n theo hu.´o.ng cu˙’a vector (th´u hai) cho tru.´o.c v`a mˆo.t th`anh phˆa`n vuˆong g´oc v´o.i vectorth´u hai B`ai to´an n`ay c´o liˆen quan mˆa.t thiˆe´t d¯ˆe´n phˆan t´ıch lu c hˆa´p dˆa˜n trong vˆa.t l´y Trong
H`ınh 3.18 vector u d¯u.o c phˆan gia˙’i th`anh mˆo.t th`anh phˆa`n w (go.i l`a ph´ep chiˆe´u tru c giao cu˙’a u lˆen v) do.c theo vector v cho tru.´o.c v`a mˆo.t vector z vuˆong g´oc v´o.i v Ta c´o z = u − w V`ı vˆa.y chı˙’ cˆa`n x´ac d¯i.nh vector w t`u u v`a v Hiˆe˙’n nhiˆen vector w c`ung hu.´o.ng v´o.i vector v
nhu.ng kh´ac d¯ˆo d`ai Ho.n n˜u.a
Dˆe˜ d`ang kiˆe˙’m tra rˇa`ng vector z vuˆong g´oc v´o.i vector v, v`a kzk2 = kuk2− kwk2.
Bˆay gi`o ´ap du.ng nh˜u.ng kˆe´t qua˙’ trˆen d¯ˆe˙’ x´ac d¯i.nh vector pha˙’n xa X´et tia theo hu.´o.ng
vector chı˙’ phu.o.ng c gˇa.p d¯u.`o.ng thˇa˙’ng l v`a pha˙’n xa la.i theo hu.´o.ng r (xem H`ınh 3.19(a)) K´y hiˆe.u n l`a ph´ap vector cu˙’a d¯u.`o.ng thˇa˙’ng l Khi d¯´o, g´oc ho p bo.˙’i gi˜u.a hai vector c v`a n bˇa`ng g´oc ho p bo.˙’i gi˜u.a hai vector r v`a n (bˇa`ng θ).
H`ınh 3.19(b) phˆan gia˙’i vector c th`anh th`anh phˆa ` n m do.c theo n v`a th`anh phˆa`n e vuˆong g´oc v´o.i n Do t´ınh d¯ˆo´i x´u.ng, r c´o c`ung th`anh phˆa ` n e vuˆong g´oc v´o.i n nhu.ng c´o th`anh phˆa` n
ngu.o c la.i do.c theo n, do d¯´o r = e − m Nhu.ng e = c − m nˆen r = c − 2m V`ı vector m l`a
Trang 35H`ınh 3.19: Pha˙’n xa cu˙’a tia t`u mˇa.t.
th`anh phˆa` n trong phˆan gia˙’i cu˙’a vector c theo vector n nˆen
m = hc, ni knk2 n.
Suy ra
r = c − 2 hc, ni
knk2n.
Thu˙’ tu.c sau x´ac d¯i.nh vector pha˙’n xa r t`u vector c v`a ph´ap vector n :
void Reflection(Vector2D c, Vector2D n, Vector2D *r)
3.6.2 Giao cu˙’a tia s´ ang v` a d¯u.` o.ng thˇ a˙’ng
Trong ´u.ng du.ng cu˙’a ch´ung ta, tia s´ang s˜e va cha.m v`ao hai d¯ˆo´i tu.o ng: c´ac tru tr`on (d¯u.o cmˆo h`ınh bo.˙’i c´ac h`ınh tr`on) v`a c´ac b´u.c tu.`o.ng (d¯u.o c biˆe˙’u diˆe˜n bo.˙’i c´ac d¯u.`o.ng thˇa˙’ng) D- ˆe˙’
Trang 36d¯o.n gia˙’n ch´ung ta s˜e gia˙’ thiˆe´t buˆo`ng k´ın l`a d¯a gi´ac lˆo`i Khi d¯´o, d¯a gi´ac s˜e l`a giao cu˙’a c´acnu.˙’a mˇa.t phˇa˙’ng ngo`ai v`a d¯u.o c mˆo h`ınh ho´a bo.˙’i ho c´ac d¯u.`o.ng thˇa˙’ng nhu d¯˜a tr`ınh b`ay trongPhˆa` n 3.4.
V´o.i buˆo`ng k´ın d¯˜a d¯u.o c d¯i.nh ngh˜ıa, kˆe´ tiˆe´p ch´ung ta cˆa`n x´ac d¯i.nh vi tr´ı giao cu˙’a tia
s´ang v´o.i b´u.c tu.`o.ng Phu.o.ng tr`ınh tham sˆo´ cu˙’a tia s´ang xuˆa´t ph´at t`u d¯iˆe˙’m S chuyˆe˙’n d¯ˆo.ng theo vector chı˙’ phu.o.ng c cho bo.˙’i
R(t) := S + ct, t ≥ 0.
B´u.c tu.`o.ng tu.o.ng ´u.ng d¯u.`o.ng thˇa˙’ng
l := {P ∈ R2 | hn, OP i = D}, −→
trong d¯´o ph´ap vector n cu˙’a d¯u.`o.ng thˇa˙’ng l d¯u.o c cho.n hu.´o.ng ra ngo`ai buˆo`ng k´ın.
Nˆe´u hn, ci 6= 0 th`ı d¯u.`o.ng thˇa˙’ng, k´y hiˆe.u α, d¯i qua S c´o vector chı˙’ phu.o.ng c cˇa´t d¯u.`o.ng thˇa˙’ng l ta.i d¯iˆe˙’m P h = S + ct h , trong d¯´o
t h = D − hn,
−→
OSi
hn, ci .
Dˆe˜ d`ang thˆa´y rˇa`ng, t h ≥ 0 nˆe´u v`a chı˙’ nˆe´u tia s´ang R(t) cˇa´t b´u.c tu.`o.ng l ta.i P h Ngu.o c la.i,
nˆe´u hn, ci = 0 th`ı d¯u.`o.ng thˇa˙’ng α (v`a do d¯´o tia s´ang) s˜e song song v´o.i d¯u.`o.ng thˇa˙’ng l Trong tru.`o.ng ho p n`ay ta g´an t h l`a mˆo.t gi´a tri ˆam n`ao d¯´o, chˇa˙’ng ha.n −1.
V´ı du 3.6.1 Cho d¯u.`o.ng thˇa˙’ng c´o phu.o.ng tr`ınh 6x − 8y + 10 = 0 v`a tia s´ang xuˆa´t ph´at t`u S(7, 4) di chuyˆe˙’n theo vector chı˙’ phu.o.ng c = (−2, 1) t D- u.`o.ng thˇa˙’ng c´o ph´ap vector
n = (6, −8) t v`a hˇa`ng sˆo´ D = −10 Ta c´o
Trang 37−23 17
¶
.
C´ac kˆe´t qua˙’ d¯u.o c tˆo˙’ng kˆe´t trong thu˙’ tu.c x´ac d¯i.nh th`o.i d¯iˆe˙’m giao t h nhu sau:
void Ray_With_Line(Point2D S, Vector2D c, Vector2D normal,
float D, float *t_hit){
float Denom = Dot2D(normal, c);
Trang 38H`ınh 3.20: Giao v´o.i c´ac b´u.c tu.`o.ng.
D- ˆe˙’ kiˆe˙’m tra t´ac du.ng cu˙’a thu˙’ tu.c n`ay trong ´u.ng du.ng, x´et tru.`o.ng ho p d¯o.n gia˙’n nhˆa´t:Khˆong c´o c´ac d¯u.`o.ng tr`on bˆen trong buˆo`ng k´ın v`a do d¯´o tia s´ang chı˙’ gˇa.p c´ac b´u.c tu.`o.ng
H`ınh 3.20 minh ho.a buˆo`ng k´ın c´o nˇam b´u.c tu.`o.ng v`a tia S + ct Du a trˆen c´ac th`o.i d¯iˆe˙’m giao
cu˙’a tia s´ang v´o.i c´ac b´u.c tu.`o.ng, ta c´o thˆe˙’ x´ac d¯i.nh ch´ınh x´ac b´u.c tu.`o.ng m`a tia s´ang gˇa.p
D- ˆe˙’ x´ac d¯i.nh b´u.c tu.`o.ng m`a tia s´ang gˇa.p, ta go.i thu˙’ tu.c Ray With Line() v´o.i mˆo˜i b´u.ctu.`o.ng v`a lu.u gi˜u gi´a tri th`o.i d¯iˆe˙’m giao B´u.c tu.`o.ng m`a tia s´ang gˇa.p o.˙’ “ph´ıa tru.´o.c” s˜e tu.o.ng
´u.ng v´o.i th`o.i d¯iˆe˙’m giao du.o.ng; b´u.c tu.`o.ng c´o giao d¯iˆe˙’m o.˙’ “ph´ıa sau” hay song song v´o.i tias´ang c´o th`o.i d¯iˆe˙’m giao ˆam Gia˙’ su.˙’ thu˙’ tu.c Ray With Line() tra˙’ vˆe` c´ac gi´a tri t1, t2, , t5
tu.o.ng ´u.ng th`o.i d¯iˆe˙’m giao cu˙’a tia s´ang v´o.i c´ac b´u.c tu.`o.ng Sˇa´p xˆe´p la.i theo chiˆe` u tˇang dˆa` nc´ac gi´a tri n`ay ta d¯u.o c
t2 < t1 < t5 = −1 < 0 < t4 < t3.
Hiˆe˙’n nhiˆen, th`o.i d¯iˆe˙’m giao du.o.ng nho˙’ nhˆa´t s˜e tu.o.ng ´u.ng b´u.c tu.`o.ng m`a tia s´ang gˇa.p
Sau khi b´u.c tu.`o.ng v`a th`o.i d¯iˆe˙’m giao t h d¯u.o c x´ac d¯i.nh, ta go.i thu˙’ tu.c v˜e d¯oa.n thˇa˙’ng(xem Phˆa` n 1.1) t`u vi tr´ı S d¯ˆe´n vi tr´ı m´o.i P = S + ct h Kˆe´ tiˆe´p lˇa.p la.i tiˆe´n tr`ınh v´o.i tia m´o.i
xuˆa´t ph´at t`u S = P v`a di chuyˆe˙’n theo hu.´o.ng pha˙’n xa cu˙’a n´o Hu.´o.ng r cu˙’a tia s´ang pha˙’n
Trang 39xa x´ac d¯i.nh bo.˙’i
r = c − 2hc, u n iu n ,
trong d¯´o u n l`a ph´ap vector d¯o.n vi cu˙’a b´u.c tu.`o.ng tu.o.ng t´ac v´o.i tia s´ang Thuˆa.t to´an lu.ugi˜u thˆong tin b´u.c tu.`o.ng m`a tia s´ang bˇa´t gˇa.p d¯ˆa`u tiˆen sao cho ph´ap vector cu˙’a n´o c´o thˆe˙’
truy cˆa.p dˆe˜ d`ang t`u d˜u liˆe.u ban d¯ˆa`u B´u.c tu.`o.ng c´o thˆe˙’ miˆeu ta˙’ bo.˙’i kiˆe˙’u d˜u liˆe.u Line2D.1
To`an bˆo buˆo`ng k´ın d¯u.o c lu.u tr˜u da.ng danh s´ach liˆen kˆe´t c´ac b´u.c tu.`o.ng hay mˆo.t ma˙’ng M˜agia˙’ cu˙’a tiˆe´n tr`ınh chuyˆe˙’n d¯ˆo.ng cu˙’a tia s´ang trong buˆo`ng k´ın nhu sau:
1 [Kho.˙’i ta.o] Kho.˙’i ta.o d˜u liˆe.u cu˙’a buˆo`ng k´ın, vi tr´ı xuˆa´t ph´at S v`a hu.´o.ng c;
2 [Bu.´o.c lˇa.p] Trong khi (chu.a ch´an) thu c hiˆe.n
• T`ım th`o.i d¯iˆe˙’m giao t h du.o.ng nho˙’ nhˆa´t;
• T´ınh d¯iˆe˙’m giao P = S + ct h;
• Cho tia s´ang chuyˆe˙’n d¯ˆo.ng t`u S d¯ˆe´n P ;
• X´ac d¯i.nh vector pha˙’n xa r;
• Cˆa.p nhˆa.t S = P v`a c = r;
Ch´u ´y rˇa`ng (ngo`ai bu.´o.c d¯ˆa` u tiˆen) d¯iˆe˙’m xuˆa´t ph´at cu˙’a tia s´ang luˆon luˆon nˇa`m trˆen
b´u.c tu.`o.ng l n`ao d¯´o Khi b´u.c tu.`o.ng n`ay d¯u.o c kiˆe˙’m tra trong tiˆe´n tr`ınh kˆe´ tiˆe´p d¯ˆe˙’ x´ac d¯i.nh d¯iˆe˙’m giao th`ı th`o.i d¯iˆe˙’m giao tu.o.ng ´u.ng v´o.i l s˜e bˇa`ng 0.0 Do d¯´o d¯ˆe˙’ tr´anh t´ınh to´an v`a viˆe.c tia s´ang khˆong tho´at kho˙’i l ta cˆa` n bo˙’ qua viˆe.c kiˆe˙’m tra v´o.i b´u.c tu.`o.ng n`ay
3.6.3 Giao cu˙’a tia s´ ang v´ o.i d¯u.` o.ng tr` on
Bˆay gi`o ta s˜e thˆem c´ac tru tr`on v`ao buˆo`ng k´ın Gia˙’ su.˙’ d¯u.`o.ng tr`on (C) c´o b´an k´ınh R tˆam
I X´et su tu.o.ng giao gi˜u.a tia s´ang v`a d¯u.`o.ng tr`on (C).
Phu.o.ng tr`ınh giao d¯iˆe˙’m cu˙’a tia s´ang v´o.i d¯u.`o.ng tr`on ta.i th`o.i d¯iˆe˙’m t tho˙’a m˜an phu.o.ng
Trang 40Hay tu.o.ng d¯u.o.ng
Ch´u ´y rˇa`ng A 6= 0 (ta.i sao?) Nˆe´u biˆe.t th´u.c δ := B2− AC ˆam, phu.o.ng tr`ınh bˆa.c hai khˆong
c´o nghiˆe.m thu c, trong tru.`o.ng ho p n`ay tia s´ang khˆong gˇa.p d¯u.`o.ng tr`on Nˆe´u δ bˇa`ng khˆong, tia s´ang d¯i su.o t qua d¯u.`o.ng tr`on (tiˆe´p x´uc ta.i mˆo.t d¯iˆe˙’m) Nˆe´u δ du.o.ng, phu.o.ng tr`ınh c´o
hai nghiˆe.m v`a ta c´o tu.o.ng ´u.ng hai giao d¯iˆe˙’m V`ı tia s´ang di chuyˆe˙’n theo chiˆe` u cu˙’a vector
c khi t tˇang, nghiˆe.m du.o.ng nho˙’ ho.n s˜e tu.o.ng ´u.ng v´o.i th`o.i d¯iˆe˙’m giao.
V´ı du 3.6.3 Cho d¯u.`o.ng tr`on c´o phu.o.ng tr`ınh
(x − 1)2+ (y − 4)2 = 4
v`a tia s´ang xuˆa´t ph´at t`u S(8, 9) di chuyˆe˙’n theo vector chı˙’ phu.o.ng c = (−1, 1) t D- u.`o.ng tr`on
c´o tˆam I = (1, 4) v`a b´an k´ınh R = 5 Phu.o.ng tr`ınh giao d¯iˆe˙’m cu˙’a tia s´ang v´o.i d¯u.`o.ng tr`on ta.i th`o.i d¯iˆe˙’m t h tho˙’a m˜an phu.o.ng tr`ınh:
¶
=
µ1
−1
¶
.