1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Đồ họa máy tính I: Phần 2

91 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 91
Dung lượng 1,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Nhu 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 2

A 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 3

Trong 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 4

D- 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 5

Trong 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 6

H`ı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 7

ch´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 9

1010 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 10

3 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 11

v`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 12

v`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 14

D- ˆ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 15

3.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 16

Tham 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 17

4 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 18

Hay 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 20

B

(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 21

K´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 22

D- 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 23

Nu.˙’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 24

Vector2D c, n, f, a;

VertPtr2D Tempt = Poly;

if (Tempt == NULL) return False;

Trang 25

Trong 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 26

H`ı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 27

cuˆ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 28

E 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 29

3 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 30

ha.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 31

l`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 32

1 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 33

Phu.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 34

Tru.´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 35

H`ı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 36

d¯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 38

H`ı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 39

xa 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 40

Hay 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

.

Ngày đăng: 11/05/2021, 04:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w