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

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

Đ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

Giáo trình Đồ họa máy tính I: Phần 1 trình bày các nội dung chính sau: Các thuật toán vẽ đường cong trên thiết bị raster, hình học của các đường cong và mặt cong,... Mời các bạn cùng tham khảo để nắm nội dung chi tiết.

ˆ HO ´ T´INH I -` D O A MAY Pha.m Tiˆe´n So.n - `a La.t, 2005 D Mu.c lu.c `au L` o.i n´ oi d ¯ˆ o.ng cong trˆ en thiˆ e´t bi raster C´ ac thuˆ a.t to´ an v˜ ed ¯u.` 1.1 1.2 1.3 - oa.n thˇa˙’ng D 1.1.1 Thuˆa.t to´an sˆo´ gia 11 1.1.2 Thuˆa.t to´an d¯iˆe˙’m gi˜ u.a 13 1.1.3 Mˆo.t sˆo´ vˆa´n d¯`ˆe liˆen quan d¯ˆe´n thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng 18 1.1.4 C´ac thuˆo.c t´ınh cu˙’a d¯oa.n thˇa˙’ng 21 - u.`o.ng tr`on D 22 1.2.1 - ˆo´i x´ D u.ng t´am d¯iˆe˙’m 22 1.2.2 Thuˆa.t to´an d¯iˆe˙’m gi˜ u.a v˜e d¯u.`o.ng tr`on 23 - u.`o.ng cong ellipse D 28 1.3.1 Ellipse c´o da.ng ch´ınh tˇa´c 29 1.3.2 Ellipse tru.`o.ng ho p tˆo˙’ng qu´at 34 o.ng cong v` a mˇ a.t cong H`ınh ho.c cu˙’ a c´ ac d ¯u.` 2.1 Mo˙’ d¯`aˆu 47 47 - u.`o.ng cong Bezier D 48 2.2.1 Thuˆa.t to´an de Casteljau 48 2.2.2 - a th´ D u.c Bernstein v`a d¯u.`o.ng cong Bezier 52 C´ac t´ınh chˆa´t cu˙’a d¯u.`o.ng cong Bezier 55 - iˆ `eu khiˆe˙’n d¯.ia phu.o.ng D 59 - a th´ u.ng kh´ uc v`a c´ac h`am spline D u.c t` 60 2.4.1 Su˙’ du.ng c´ac h`am spline nhu c´ac h`am trˆo.n 63 2.4.2 Xˆay du ng c´ac h`am trˆo.n 65 2.4.3 - u.`o.ng cong spline v`a c´ac h`am co so˙’ D 66 2.4.4 C´ac h`am B-spline co so˙’ 66 2.4.5 Su˙’ du.ng c´ac knot bˆo.i 71 2.4.6 Vector knot chuˆa˙’n 73 2.5 C´ac t´ınh chˆa´t cu˙’a d¯u.`o.ng cong B-spline 75 2.6 `eu khiˆe˙’n bˇ`a ng d¯u.`o.ng cong B-spline Nˆo.i suy c´ac d¯iˆe˙’m d¯iˆ 77 2.7 Thiˆe´t kˆe´ c´ac mˇa.t Bezier v`a B-spline 80 2.7.1 Patch Bezier 80 2.7.2 D´an c´ac patch Bezier 81 2.7.3 Patch spline 82 2.2 2.3 2.3.1 2.4 Giao cu˙’ a c´ ac d ¯ˆ o´i tu.o ng 83 3.1 Mo˙’ d¯`aˆu 83 3.2 Giao cu˙’a hai d¯oa.n thˇa˙’ng 83 3.2.1 84 Phˆan t´ıch Thuˆa.t to´an x´ac d¯i.nh giao hai d¯oa.n thˇa˙’ng 86 - oa.n thˇa˙’ng v`a h`ınh ch˜ D u nhˆa.t 87 3.3.1 T`ım giao bˇ`a ng c´ach gia˙’i hˆe c´ac phu.o.ng tr`ınh 89 3.3.2 Thuˆa.t to´an chia nhi phˆan 89 3.3.3 Thuˆa.t to´an Cohen-Sutherland 93 3.3.4 Thuˆa.t to´an Liang-Barsky 97 3.2.2 3.3 3.4 3.5 3.6 `oi 100 Giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆ 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 100 3.4.2 `oi 102 Thuˆa.t to´an t`ım giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆ Giao hai d¯a gi´ac 107 3.5.1 Thuˆa.t to´an Sutherland-Hodgman 108 3.5.2 Thuˆa.t to´an Weiler-Atherton 111 3.5.3 C´ac ph´ep to´an tˆa.p ho p trˆen c´ac d¯a gi´ac 113 `eu: pha˙’n xa buˆ `ong k´ın 114 Ray tracing hai chiˆ 3.6.1 Vector pha˙’n xa 115 3.6.2 Giao cu˙’a tia s´ang v`a d¯u.`o.ng thˇa˙’ng 3.6.3 Giao cu˙’a tia s´ang v´o.i d¯u.`o.ng tr`on 121 3.6.4 Xˆay du ng v´ı du ray tracing 124 3.6.5 `ong k´ın l`a ellipse 126 Buˆ Tˆ o m` au v` ung 4.1 117 127 C´ac d¯i.nh ngh˜ıa 127 4.1.1 V` ung d¯i.nh ngh˜ıa bo˙’.i pixel 127 4.1.2 V` ung d¯i.nh ngh˜ıa bo˙’.i d¯a gi´ac 129 4.2 `au loang 129 Thuˆa.t to´an tˆo m`au theo vˆe´t dˆ 4.3 Thuˆa.t to´an tˆo m`au theo cha.y 131 4.4 Thuˆa.t to´an tˆo m`au theo biˆen 134 4.5 So s´anh c´ac thuˆa.t to´an 144 4.6 Tˆo m`au c´ac h`ınh ch˜ u nhˆa.t 145 4.7 Thuˆa.t to´an tˆo m`au d¯a gi´ac 147 4.8 4.7.1 C´ac d`ong qu´et ngang 150 4.7.2 C´ac ma˙’nh vu.n 4.7.3 Liˆen kˆe´t ca.nh v`a thuˆa.t to´an tr`an 151 4.7.4 `ong 158 Tˆo m`au c´ac d¯a gi´ac chˆ 151 Tˆo m`au theo mˆa˜u tˆo 161 `an phu lu.c: Thu viˆ Phˆ e.n graph2D.h 163 T` liˆ e.u tham kha˙’ o 171 `au L` o.i n´ oi d ¯ˆ - `ˆo ho.a m´ay t´ınh l`a mˆo.t l˜ınh vu c hˆa´p dˆa˜n cu˙’a khoa ho.c m´ay t´ınh Ch´ D ung ta su˙’ du.ng d¯`ˆo ho.a `eu l˜ınh vu c kh´ac nhau, bao gˆ `om m´ay t´ınh nhu mˆo.t cˆong cu d¯ˆe˙’ quan s´at thˆong tin nhiˆ khoa ho.c v`a cˆong nghˆe., ho´a ho.c, kiˆe´n tr´ uc v`a gia˙’i tr´ı C´ac chu o ng tr`ınh d¯`oˆ ho.a tu o ng t´ac cho ph´ep ngu.`o.i su˙’ du.ng l`am viˆe.c theo c´ach tu nhiˆen nhˆa´t: ngu.`o.i su˙’ du.ng cung cˆa´p thˆong tin cho tr`ınh u ´.ng du.ng thˆong qua c´ac hoa.t d¯oˆ ng bˆen ngo`ai cu˙’a ho v`a s˜e nhˆa.n d¯u.o c thˆong - `ˆo ho.a m´ay t´ınh d¯ang gi´ `e quan niˆe.m v`a tin tro˙’ la.i bˇ`a ng h`ınh a˙’nh D up ngu.`o.i thay d¯ˆo˙’i vˆ c´ach th´ u c su˙’ du.ng m´ay t´ınh - `ˆo ho.a m´ay t´ınh I cung cˆa´p mˆo.t sˆo´ k˜ Gi´ao tr`ınh D y thuˆa.t co ba˙’n cu˙’a d¯`ˆo ho.a m´ay t´ınh - `ˆo ho.a m´ay t´ınh ba chiˆ `eu (D `eu, mˆo.t phˆ `an quan tro.ng khˆong thˆe˙’ thiˆe´u d¯u.o c s˜e d¯u.o c hai chiˆ - ˆe˙’ c´o mˆo.t khung ca˙’nh to`an diˆe.n v`a sˆau sˇa´c vˆ `e nh˜ d¯`ˆe cˆa.p mˆo.t gi´ao tr`ınh kh´ac) D u.ng nguyˆen l´ y v`a thu c h`anh cu˙’a d¯`ˆo ho.a m´ay t´ınh, xem c´ac t`ai liˆe.u dˆa˜n [9] v`a [11] C´ac phu.o.ng ph´ap phˆan t´ıch v`a thiˆe´t kˆe´ c´ac thuˆa.t to´an gi´ao tr`ınh cho ph´ep sinh viˆen c´o thˆe˙’ viˆe´t dˆ˜e d`ang c´ac chu.o.ng tr`ınh minh ho.a Gi´ao tr`ınh d¯u.o c biˆen soa.n cho c´ac d¯ˆo´i tu.o ng l`a sinh viˆen To´an-Tin v`a Tin ho.c u C d¯ˆe˙’ minh ho.a, nhiˆen c´o thˆe˙’ dˆ˜e d`ang chuyˆe˙’n d¯oˆ˙’i Gi´ao tr`ınh su˙’ du.ng ngˆon ng˜ `an c´o mˆo.t sˆo´ kiˆe´n th´ `e ngˆon ng˜ sang c´ac ngˆon ng˜ u kh´ac; v`a d¯o´, sinh viˆen cˆ u.c vˆ u C Ngo`ai `au hˆe´t c´ac chu.o.ng tr`ınh thao t´ac trˆen cˆa´u tr´ uc d˜ u liˆe.u nhu danh s´ach liˆen kˆe´t, nˆen d¯o`i ra, hˆ ho˙’i sinh viˆen pha˙’i c´o nh˜ u.ng k˜ y nˇang lˆa.p tr`ınh tˆo´t `an c´o co so˙’ to´an ho.c cu˙’a nh˜ `e d¯a.i sˆo´ Sinh viˆen c˜ ung cˆ u.ng nˇam d¯`ˆau d¯a.i ho.c: hiˆe˙’u biˆe´t vˆ tuyˆe´n t´ınh v`a h`ınh ho.c gia˙’i t´ıch, ph´ep t´ınh vi t´ıch phˆan Mu.c d¯´ıch cu˙’a gi´ao tr`ınh l`a, o˙’ m´ u.c d¯oˆ n`ao d¯´o, cho thˆa´y c´ac tr`ınh u ´.ng du.ng d¯`ˆo ho.a `an viˆe´t v`a cha.y thu˙’ c´ac chu.o.ng tr`ınh Mˆo.t d¯u.o c ta.o nhu thˆe´ n`ao: Ch´ ung ta cˆ nh˜ u.ng mu.c d¯´ıch ch´ınh cu˙’a gi´ao tr`ınh l`a gi´ up sinh viˆen nˇa´m v˜ u.ng c´ac phu.o.ng ph´ap, tru.´o.c hˆe´t to´an ho.c ho´a c´ac kh´ac niˆe.m h`ınh ho.c v`a sau d¯´o chuyˆe˙’n ta˙’i th`anh c´ac d¯oa.n m˜a chu.o.ng tr`ınh `om bˆo´n chu.o.ng v`a mˆo.t phˆ `an phu lu.c v´o.i nh˜ Gi´ao tr`ınh bao gˆ u.ng nˆo.i dung ch´ınh nhu sau: • Chu.o.ng th´ u nhˆa´t d¯`ˆe cˆa.p d¯ˆe´n c´ac phu.o.ng ph´ap v˜e c´ac “nguyˆen so.” cu˙’a d¯`oˆ ho.a m´ay t´ınh: d¯oa.n thˇa˙’ng, d¯u.`o.ng tr`on v`a ellipse `au hˆe´t c´ac • Phˆan t´ıch v`a thiˆe´t kˆe´ bˇ`a ng h`ınh ho.c l`a nˆo.i dung ch´ınh cu˙’a Chu.o.ng Hˆ `an mˆ `em d¯`ˆo ho.a d¯`ˆeu c´o nh˜ phˆ u ng ch´ u c nˇang ta.o c´ac d¯u `o ng cong du a trˆen c´ac d¯iˆe˙’m m`a ngu.`o.i su˙’ du.ng lu a cho.n Chu.o.ng n`ay cung cˆa´p nh˜ u.ng nguyˆen l´ y v`a c´ach tiˆe´p cˆa.n thu c h`anh m`a c´ac tr`ınh u ´ ng du.ng d¯`oˆ ho.a ´ap du.ng • Chu.o.ng gia˙’i quyˆe´t b`ai to´an x´ac d¯i.nh giao cu˙’a nh˜ u.ng nguyˆen so d¯`ˆo ho.a: Giao hai `oi (bao h`am c´ac h`ınh ch˜ d¯oa.n thˇa˙’ng, giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆ u nhˆa.t) v`a giao `eu: cu˙’a hai d¯a gi´ac Cuˆo´i chu.o.ng l`a mˆo.t v´ı du cu˙’a k˜ y thuˆa.t “ray tracing” hai chiˆ `ong k´ın c´o ch´ Chuyˆe˙’n d¯oˆ ng cu˙’a tia s´ang buˆ u.a c´ac “chu.´o.ng nga.i vˆa.t” • Chu.o.ng d¯`ˆe cˆa.p d¯ˆe´n nh˜ u.ng thuˆa.t to´an tˆo m`au v` ung bˆa´t k` y: V` ung d¯i.nh ngh˜ıa bo˙’.i `an trong, bo˙’.i d¯u.`o.ng biˆen v`a v` phˆ ung l`a d¯a gi´ac `an phu lu.c l`a thu viˆe.n c´ac cˆa´u tr´ `an thiˆe´t v`a thu.`o.ng xuyˆen • Phˆ uc d˜ u liˆe.u v`a c´ac h`am cˆ su˙’ du.ng gi´ao tr`ınh `an xuˆa´t ba˙’n th´ Trong lˆ u hai n`ay, ch´ ung tˆoi d¯u.a thˆem c´ac v´ı du t´ınh to´an nhˇ`a m minh `an l´ ho.a cho phˆ y thuyˆe´t c˜ ung nhu gi´ up sinh viˆen nˇa´m v˜ u.ng kiˆe´n th´ u.c d¯˜a ho.c Ngo`ai ra, c´ac `an tru.´o.c c˜ lˆo˜i xuˆa´t ba˙’n lˆ ung d¯a˜ d¯u.o c chı˙’nh l´ y; mˇa.c d` u vˆa.y, t´ac gia˙’ vˆa˜n mong c´o nh˜ u.ng d¯´ong g´op t` u ba.n d¯o.c `eu ngu.`o.i m`a khˆong thˆe˙’ liˆe.t kˆe Tˆoi xin ca˙’m o.n nh˜ u.ng gi´ up d¯o˜ d¯˜a nhˆa.n d¯u.o c t` u nhiˆ hˆe´t, d¯aˇ c biˆe.t l`a c´ac ba.n sinh viˆen, qu´a tr`ınh biˆen soa.n gi´ao tr`ınh n`ay - `a La.t, ng`ay 10 th´ang nˇam 2005 D PHA M Tiˆe´n So n Chu.o.ng C´ ac thuˆ a.t to´ an v˜ ed ¯u.` o.ng cong trˆ en thiˆ e´t bi raster Chu.o.ng n`ay tr`ınh b`ay c´ac thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng, d¯u.`o.ng tr`on v`a ellipse trˆen lattice nguyˆen Z2 C´ac thuˆa.t to´an chı˙’ thao t´ac trˆen nh˜ u.ng sˆo´ nguyˆen v`a c´ac v`ong lˇa.p chı˙’ su˙’ du.ng ph´ep to´an cˆo.ng nˆen rˆa´t hiˆe.u qua˙’ 1.1 - oa.n thˇ D a˙’ ng `an v´o.i d¯oa.n thˇa˙’ng Thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng x´ac d¯.inh to.a d¯oˆ cu˙’a c´ac pixel nˇa` m trˆen hoˇa.c gˆ `e nguyˆen tˇa´c, ch´ `an v´o.i d¯oa.n thˇa˙’ng thu c tˆe´ thu c tˆe´ nhˆa´t Vˆ ung ta muˆo´n cho.n d˜ay c´ac pixel gˆ `an c´o nhˆa´t v`a thˇa˙’ng nhˆa´t X´et d¯oa.n thˇa˙’ng thu c tˆe´ d¯u.o c xˆa´p xı˙’ v´o.i mˆa.t d¯oˆ mˆo.t pixel; ta cˆ nh˜ u.ng t´ınh chˆa´t g`ı? V´o.i c´ac d¯oa.n thˇa˙’ng c´o hˆe sˆo´ g´oc thuˆo.c d¯oa.n [−1, 1], c´o d¯u ´ng mˆo.t pixel d¯u o c v˜e lˆen trˆen mˆo˜i cˆo.t; v´o i c´ac d¯oa.n thˇa˙’ng m`a hˆe sˆo´ g´oc nˇ`a m ngo`ai d¯oa.n n`ay, c´o d¯u ´ng mˆo.t pixel d¯u.o c v˜e trˆen mˆo˜i h`ang Tˆa´t ca˙’ c´ac d¯oa.n thˇa˙’ng d¯u.o c v˜e v´o.i c` ung mˆo.t d¯oˆ s´ang, khˆong phu thuˆo.c v`ao d¯ˆo d`ai v`a hu ´o ng, v`a nhanh nhˆa´t c´o thˆe˙’ d¯u o c Thuˆa.t to´an v˜e d¯oa.n `an ch´ thˇa˙’ng c˜ ung cˆ uy ´ d¯ˆe´n c´ac thuˆo.c t´ınh cu˙’a d¯oa.n thˇa˙’ng nhu d¯ˆo rˆo.ng, kiˆe˙’u v˜e Thˆa.m ch´ı u.c d¯oˆ rˇang cu.a tiˆe´n tr`ınh r`o.i ra.c ho´a d¯u.`o.ng thˇa˙’ng thu c ch´ ung ta muˆo´n cu c tiˆe˙’u ho´a m´ tˆe´ nh`o su˙’ du.ng k˜ y thuˆa.t antialiasing (xem [9], [11]) bˇa` ng c´ach ´ap du.ng kha˙’ nˇang d¯ˇa.t cu.`o.ng `eu bit d¯ˆo cu˙’a mˆo˜i pixel trˆen c´ac thiˆe´t bi hiˆe˙’n thi m`a mˆo.t pixel tu.o.ng u ´.ng nhiˆ ung ta chı˙’ d¯`ˆe cˆa.p d¯ˆe´n c´ac d¯oa.n thˇa˙’ng d¯oˆ rˆo.ng mˆo.t pixel v`a c´o d¯u ´ng mˆo.t Tru.´o.c hˆe´t ch´ `an cuˆo´i chu o ng s˜e d¯`ˆe cˆa.p pixel trˆen mˆo˜i cˆo.t (hoˇa.c h`ang d¯ˆo´i v´o i c´ac d¯oa.n thˇa˙’ng dˆo´c) Phˆ d¯ˆe´n d¯oˆ rˆo.ng c´ac nguyˆen so v`a c´ac mˆa˜u v˜e Mˆo.t c´ach h`ınh ho.c, ch´ ung ta biˆe˙’u diˆ˜en mˆo.t pixel nhu mˆo.t chˆa´m tr`on v´o.i tˆam ta.i vi tr´ı (x, y) cu˙’a pixel trˆen lu.´o.i c´ac to.a d¯oˆ nguyˆen Z2 Biˆe˙’u diˆ˜en n`ay l`a mˆo.t xˆa´p xı˙’ th´ıch ho p nh´at cˇa´t ngang mˆo.t chu k` y cu˙’a ch` um tia electron cu˙’a CRT; xˆa´p xı˙’ n`ay phu thuˆo.c v`ao khoa˙’ng c´ach (tu` y thuˆo.c v`ao hˆe thˆo´ng) gi˜ u.a c´ac vˆe´t trˆen m`an h`ınh hiˆe˙’n thi Trong mˆo.t sˆo´ `e phu˙’ lˆa´p mˆo.t phˆ `an lˆen nhau; v´o.i nh˜ hˆe thˆo´ng, c´ac chˆa´m kˆ u.ng hˆe thˆo´ng kh´ac c´o nh˜ u.ng `e nhau; hˆ `au hˆe´t c´ac hˆe thˆo´ng, khoa˙’ng c´ach theo khoa˙’ng c´ach gi˜ u.a c´ac pixel d¯u ´.ng kˆ `eu ngang nho˙’ ho.n theo chiˆ `eu d¯u chiˆ ´.ng Mˆo.t kh´ac biˆe.t n˜ u.a tu` y theo hˆe thˆo´ng viˆe.c biˆe˙’u u nhˆa.t diˆ˜en hˆe to.a d¯oˆ , chˇa˙’ng ha.n Macintosh xem c´ac pixel d¯u.o c d¯aˇ t ta.i tˆam cu˙’a h`ınh ch˜ `e cu˙’a lu.´o.i d¯iˆ `eu khiˆe˙’n thay cho nˇa` m trˆen c´ac d¯u.`o.ng thˇa˙’ng cu˙’a gi˜ u.a c´ac d¯u.`o.ng thˇa˙’ng kˆ `om c´ac pixel thuˆo.c phˆ `an lu.´o.i Theo c´ach n`ay, c´ac h`ınh ch˜ u nhˆa.t (x´ac d¯i.nh bo˙’.i hai g´oc) gˆ - inh ngh˜ıa n`ay cho ph´ep c´ac v` cu˙’a n´o D ung d¯ˆo rˆo.ng bˇ`a ng khˆong: H`ınh ch˜ u nhˆa.t t` u (x, y) d¯ˆe´n (x, y) khˆong ch´ u.a pixel n`ao, v´o.i nh˜ u.ng hˆe thˆo´ng kh´ac, c´o d¯u ´ng mˆo.t ung ta s˜e biˆe˙’u diˆ˜en c´ac pixel nhu c´ac h`ınh tr`on r`o.i c´o pixel ta.i d¯iˆe˙’m n`ay Du.´o.i d¯aˆy ch´ tˆam nˇ`a m trˆen lu.´o.i H`ınh 1.1 l`a ph´ong to cu˙’a d¯u.`o.ng thˇa˙’ng thu c tˆe´ v`a xˆa´p xı˙’ d¯oˆ rˆo.ng mˆo.t pixel cu˙’a n´o C´ac pixel d¯u.o c v˜e tu.o.ng u ´.ng c´ac h`ınh tr`on m`au d¯en v`a c´ac pixel khˆong d¯u.o c v˜e tu.o.ng u ´.ng h`ınh tr`on khˆong tˆo Trˆen m`an h`ınh thu c tˆe´, d¯u.`o.ng k´ınh cu˙’a h`ınh tr`on biˆe˙’u diˆ˜en pixel l´o.n `e nhau, bo˙’.i vˆa.y biˆe˙’u diˆ˜en bˇa` ng k´ y hiˆe.u cu˙’a ch´ ung ta l`a ho.n khoa˙’ng c´ach gi˜ u.a c´ac pixel kˆ mˆo.t ph´ong d¯a.i m´ u.c d¯oˆ r`o.i ra.c cu˙’a c´ac pixel ✐ ✐ ✐ ✐ ✐ ✐ ✐ ✐ ✐ ② ✐ ② ✐ ✐ ② ✐ ② ✐ ✐ ✐ ② ✐ ✐ ✐ ✐ - oa.n thˇa˙’ng xˆa´p xı˙’ d¯u.o c biˆe˙’u diˆ˜en bo˙’.i c´ac h`ınh tr`on d¯en H`ınh 1.1: D `eu khiˆe˙’n nguyˆen nˆen V`ı c´ac nguyˆen so hˆe thˆo´ng ch´ ung ta x´ac d¯i.nh trˆen lu.´o.i d¯iˆ c´ac to.a d¯oˆ d¯`ˆau cuˆo´i cu˙’a d¯oa.n thˇa˙’ng l`a nguyˆen Thˆa.t ra, nˆe´u ch´ ung ta cˇa´t d¯oa.n thˇa˙’ng v´o.i h`ınh ch˜ u nhˆa.t tru.´o.c hiˆe˙’n thi n´o th`ı to.a d¯ˆo c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i cu˙’a d¯oa.n thˇa˙’ng c´o thˆe˙’ `an 1.1.3) Gia˙’ khˆong nguyˆen (Ch´ ung ta s˜e tha˙’o luˆa.n c´ac giao d¯iˆe˙’m khˆong nguyˆen Phˆ 10 N0,1 (t) / N0,2 (t) N1,1 (t) / | | — 2−t t | t | t (b) (a) - `ˆo thi c´ac h`am B-spline tuyˆe´n t´ınh H`ınh 2.9: D V´ı du 2.4.3 Gia˙’ su˙’ ta muˆo´n xˆay du ng c´ac d¯u.`o.ng cong bˆa.c hai du a trˆen c´ac h`am B-spline `an xˆay du ng N0,3 v`ı c´ac h`am kh´ac Nk,m bˆa.c m = v´o.i c´ac knot c´ach d¯`ˆeu Ta chı˙’ cˆ ch´ınh l`a ti.nh tiˆe´n cu˙’a h`am n`ay T` u Phu.o.ng tr`ınh (2.8) ta c´o N0,3 (t) = t N (t) 0,2 + 3−t N1,2 (t)   t     − t− =  (3 − t)     nˆe´u ≤ t ≤ 1, nˆe´u ≤ t ≤ 2, nˆe´u ≤ t ≤ 3, nˆe´u ngu.o c la.i Ch´ uy ´ rˇ`a ng, n´o phu thuˆo.c v`ao bˆo´n knot 0, 1, 2, v`a v`a suppN0,3 ⊆ [0, 3] (xem H`ınh 2.10) `an 2.4 Ta d¯a˜ kiˆe˙’m tra rˇa` ng N0,3 (t) thuˆo.c Ngo`ai ra, N0,3 (t) ch´ınh l`a h`am g(t) Phˆ l´o.p C nhu.ng khˆong c´o d¯a.o h`am bˆa.c hai Do d¯o´ d¯u.`o.ng cong B-spline bˆa.c hai (´ıt nhˆa´t v´o.i c´ac knot d¯`ˆeu nhau) ch´ınh l`a d¯u.`o.ng cong spline - `ˆo thi c´ac h`am spline bˆa.c hai Nk,3 (t) dˆ˜e d`ang nhˆa.n d¯u.o c c´ac knot d¯`ˆeu D Thˆa.t vˆa.y, tˆo˙’ng qu´at ho.n, v´o.i gia˙’ thiˆe´t tk = k, t` u Phu.o.ng tr`ınh (2.8) dˆ˜e d`ang suy Nk,m (t) = N0,m (t − k) - `ˆo thi V´ı du 2.4.4 Trong thu c tˆe´ h`am B-spline bˆa.c bˆo´n (m = 4) thu.`o.ng d¯u.o c su˙’ du.ng D 68 N0,3 (t) N1,2 (t) N0,2 (t) | | | | t | | t (b) (a) - `ˆo thi h`am B-spline bˆa.c hai N0,3 (t) du a trˆen c´ac h`am B-spline tuyˆe´n t´ınh H`ınh 2.10: D h`am N0,4 (t) d¯u.o c chı˙’ H`ınh 2.11 H`am n`ay d¯oˆ´i x´ u.ng qua tru.c t = v`a x´ac d¯i.nh bo˙’.i  u(1 − t) nˆe´u ≤ t < 1,        v(2 − t) nˆe´u ≤ t < 2, N0,4 (t) = v(t − 2) nˆe´u ≤ t < 3,     u(t − 3) nˆe´u ≤ t < 4,    nˆe´u ngu.o c la.i, d¯´o u(t) = (1 − t)3 , (3t3 − 6t2 + 4)3 Dˆ˜e d`ang kiˆe˙’m tra rˇ`a ng, c´ac h`am B-spline bˆa.c bˆo´n thuˆo.c l´o.p C v(t) = V´o.i nh˜ u.ng v´ı du trˆen, ta c´o thˆe˙’ chı˙’ rˇ`a ng gi´a cu˙’a h`am Nk,m (t) ch´ u.a d¯oa.n [tk , tk+m ], t´ u.c l`a Nk,m (t) ⊆ [tk , tk+m ] Ngo`ai Nk,m (t) ≥ v´o.i mo.i t `an d¯ˆe˙’ y Cˆ ´ rˇa` ng c´o thˆe˙’ mˆo.t hoˇa.c ca˙’ hai mˆa˜u sˆo´ cu˙’a Phu.o.ng tr`ınh (2.8) bˇa` ng khˆong v´o.i `eu d¯´o, c´ac h`am bˆa.c thˆa´p ho.n tu.o.ng u nh˜ u.ng knot n`ao d¯´o Nhu.ng xa˙’y d¯iˆ ´.ng Nk,m−1 (t) `an tu˙’ c´o mˆa˜u sˆo´ hoˇa.c Nk+1,m−1 (t) luˆon luˆon bˇa` ng khˆong Do d¯o´ ta c´o thˆe˙’ d¯ˇa.t nh˜ u.ng phˆ khˆong bˇ`a ng T` u Phu.o.ng tr`ınh (2.8) dˆ˜e d`ang suy d¯oa.n m˜a sau: float N(int k, int m, float t) 69 N0,4 (t) – v(2 − t) \ v(t − 2) / – u(1 − t) u(t − 3) \ / t - `ˆo thi h`am B-spline bˆa.c ba v´o.i c´ac knot bˇ`a ng H`ınh 2.11: D { float Denom1, Denom2, Sum; if (m == 1) { if ((t < Knot[k]) || (t >= Knot[k + 1])) return(0.0); else return(1.0); } else { Denom1 = Knot[k + m - 1] - Knot[k]; if (Denom1 != 0) Sum = (t - Knot[k])*N(k, m - 1, t)/Denom1; else Sum = 0.0; Denom2 = Knot[k + m] - Knot[k + 1]; if (Denom2 != 0) Sum += (Knot[k + m] - t)*N(k + 1, m - 1, t)/Denom2; return(Sum); } 70 N0,1 (t) \ N2,1 (t) \ N3,1 (t) N4,1 (t) / ··· 3+ 4+ t 5+ `an H`ınh 2.12: Di chuyˆe˙’n c´ac knot la.i gˆ } 2.4.5 ac knot bˆ o.i Su˙’ du.ng c´ Trˆen d¯aˆy ch´ ung ta thu.`o.ng su˙’ du.ng c´ac h`am B-spline v´o.i c´ac knot c´ach d¯`ˆeu Bˇa` ng `eu khiˆe˙’n d¯u.`o.ng cong tˆo´t ho.n c´ach thay d¯oˆ˙’i khoa˙’ng c´ach gi˜ u.a c´ac knot, ta c´o thˆe˙’ d¯iˆ `eu g`ı s˜e xa˙’y v´o.i h`ınh da.ng c´ac h`am trˆo.n hai knot d¯u.o c Cˆau ho˙’i d¯aˇ t l`a d¯iˆ `an Chˇa˙’ng ha.n, x´et vector knot T = (0, 1, 2, 3, + , + , ), d¯´o l`a sˆo´ d¯ˇa.t gˆ u.c t` u.ng kh´ uc d¯oa.n [3, + ] bi “n´en” trˆen du.o.ng d¯u˙’ b´e Khi d¯o´ “mˆa˙’u” cu˙’a mˆo˜i d¯a th´ mˆo.t d¯oa.n rˆa´t he.p (xem H`ınh 2.12) Hiˆe˙’n nhiˆen c´ac h`am trˆo.n khˆong pha˙’i l`a ti.nh tiˆe´n cu˙’a Nˆe´u d¯aˇ t = th`ı d¯oa.n n`ay s˜e triˆe.t tiˆeu v`a mˆo.t knot bˆo.i hai s˜e xuˆa´t hiˆe.n ta.i t = H`ınh 2.13 minh ho.a c´ac h`am trˆo.n v´o.i mˆo.t knot bˆo.i hai Bˆay gi`o hai h`am B-spline (tuyˆe´n t´ınh) gi´an d¯oa.n (H`ınh 2.13(b)), v`a c´ac h`am B-spline bˆa.c hai khˆong kha˙’ vi ta.i t = (H`ınh 2.13(c)) N´oi chung, d¯u.`o.ng cong l´o.p C i s˜e tro˙’ th`anh l´o.p C i−1 ta.i c´ac knot c´o gi´a tri bˆo.i u H`ınh 2.13(c), H`am B-spline bˆa.c ba thuˆo.c l´o.p C nhu.ng khˆong C ta.i t = Tuy nhiˆen, t` ch´ uy ´ rˇa` ng nˆe´u su˙’ du.ng c´ac h`am B-spline bˆa.c hai th`ı d¯u.`o.ng cong s˜e d¯i qua d¯iˆe˙’m P2 v`ı h`am N2,3 (t) bˇ`a ng ta.i t = c´ac h`am kh´ac bˇa` ng khˆong ta.i d¯o´ N´oi chung, t tiˆe´n `on ta.i lu c h´ `eu khiˆe˙’n ut ma.nh ho.n d¯ˆe´n mˆo.t d¯iˆe˙’m d¯iˆ d¯ˆe´n mˆo.t knot v´o.i bˆo.i l´o.n ho.n mˆo.t th`ı tˆ chu˙’ d¯a.o (d¯iˆe˙’m n`ao?) u.ng knot bˆo.i C´ac h`am spline Tu.o.ng tu , c´ac h`am spline bˆa.c hai s˜e gi´an d¯oa.n ta.i nh˜ `eu cubic khˆong kha˙’ vi ta.i nh˜ u.ng knot bˆo.i 3, nhu.ng ch´ ung d¯i qua mˆo.t c´ac d¯iˆe˙’m d¯iˆ khiˆe˙’n Do d¯´o, bˇa` ng c´ach thay d¯oˆ˙’i bˆo.i ta.i mˆo˜i knot, ngu `o i thiˆe´t kˆe´ c´o thˆe˙’ thay d¯ˆo˙’i d´ang d¯iˆe.u cu˙’a d¯u.`o.ng cong `an su˙’.a d¯ˆo˙’i la.i Phu.o.ng tr`ınh (2.8) c˜ Nhˆa.n x´et rˇa` ng, khˆong cˆ ung nhu d¯oa.n m˜a x´ac d¯i.nh 71 (a) / / N2,1 (t) N4,1 (t) Bˆa.c = t (b) – Bˆa.c = 2 t (c) – N0,3 (t) \ N2,3 (t) / N1,3 (t) | Bˆa.c = t - `ˆo thi c´ac h`am B-spline lˆan cˆa.n knot bˆo.i hai H`ınh 2.13: D 72 h`am Nk,m (t) tru.`o.ng ho p c´o knot bˆo.i (ta.i sao?) 2.4.6 Vector knot chuˆ a˙’n Viˆe.c cho.n mˆo.t tˆa.p c´ac knot d¯aˇ c biˆe.t l`a mˆo.t chuˆa˙’n thiˆe´t kˆe´ d¯u.`o.ng cong V´o.i c´ach `eu khiˆe˙’n d¯`ˆau v`a cuˆo´i, v`a v`ı vˆa.y cho ph´ep ngu.`o.i cho.n n`ay, d¯u.`o.ng cong d¯i qua c´ac d¯iˆe˙’m d¯iˆ thiˆe´t kˆe´ du d¯o´an tru.´o.c d¯u.`o.ng cong s˜e nˇa` m o˙’ d¯aˆu Vector knot chuˆa˙’n d¯ˆo´i v´o.i d¯u.`o.ng cong B-spline bˆa.c m bˇa´t d¯`ˆau v`a kˆe´t th´ uc ta.i c´ac knot bˆo.i m, c´ac knot kh´ac c´ach c´o d¯oˆ d`ai d¯o n vi Ta bˇa´t d¯`ˆau bˇ`a ng v´ı du Gia˙’ su˙’ c´o `eu khiˆe˙’n v`a ch´ t´am d¯iˆe˙’m d¯iˆ ung ta muˆo´n su˙’ du.ng c´ac h`am B-spline bˆa.c bˆo´n (m = 4) Khi d¯´o vector knot chuˆa˙’n l`a: T = (0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5) T´am h`am trˆo.n N0,4 (t), N1,4 (t), , N7,4 (t) x´ac d¯i.nh theo (2.8) C´ac h`am N0,4 (t) v`a N7,4 (t) khˆong liˆen tu.c v`a c´o gi´a trˆen d¯oa.n d¯ˆo d`ai d¯o.n vi Hai h`am N3,4 (t) v`a N4,4 (t) c´o gi´a trˆen d¯oa.n d¯oˆ d`ai bˆo´n d¯o.n vi V`a c´ac h`am c`on la.i c´o gi´a trˆen d¯oa.n d¯oˆ d`ai hai hoˇa.c ba d¯o.n vi v`a h`ınh da.ng cu˙’a ch´ ung bi biˆe´n da.ng t tiˆe´n d¯ˆe´n c´ac knot d¯`aˆu v`a cuˆo´i (Xˆay du ng c´ac h`am `om c´ac h`am trˆo.n n`ay!) Nhˆa.n x´et rˇa` ng, d¯u.`o.ng cong du a trˆen vector knot v`a c´ac d¯a th´ u.c gˆ P1 P3 P0 P7 P2 P4 P6 P5 - u.`o.ng cong B-spline du a trˆen t´am h`am B-spline bˆa.c ba H`ınh 2.14: D `eu khiˆe˙’n d¯`ˆau tiˆen v`a cuˆo´i c` h`am trˆo.n n`ay luˆon luˆon d¯i qua c´ac d¯iˆe˙’m d¯iˆ ung Chˇa˙’ng ha.n, tˆa´t ca˙’ c´ac h`am trˆo.n bˇ`a ng khˆong tr` u h`am N0,4 (t) bˇ`a ng mˆo.t ta.i t = Ho n n˜ u.a, vector tiˆe´p x´ uc v´o i d¯u `o ng cong ta.i P0 tr` ung v´o i phu o ng P0 P1 Tu o ng tu v´o i d¯iˆe˙’m cuˆo´i c` ung PL `eu khiˆe˙’n: d¯i qua d¯iˆe˙’m H`ınh 2.14 l`a v´ı du minh ho.a d¯u.`o.ng cong du a trˆen t´am d¯iˆe˙’m d¯iˆ 73 −−−→ −−−−−−→ d¯`ˆau v`a cuˆo´i; hu.´o.ng ta.i c´ac vi tr´ı n`ay tr` ung v´o.i hu.´o.ng cu˙’a c´ac vector P0 P1 v`a PL−1 PL Ch´ u `eu khiˆe˙’n tu cˇa´t y ´ rˇa` ng d¯u.`o.ng cong B-spline c´o thˆe˙’ tu cˇa´t, chˇa˙’ng ha.n d¯a gi´ac d¯iˆ `eu khiˆe˙’n v`a c´ac h`am B-spline bˆa.c m d¯u.o c mˆo Vector knot chuˆa˙’n d¯ˆo´i v´o.i L + d¯iˆe˙’m d¯iˆ ta˙’ nhu sau: C´o tˆa´t ca˙’ L + m + knot, k´ y hiˆe.u l`a t0 , t1 , , tL+m m knot d¯`aˆu tiˆen t0 , t1 , , tm−1 bˇ`a ng (m h`am trˆo.n d¯`ˆau tiˆen bˇa´t d¯`ˆau ta.i t = 0) C´ac knot tm , tm+1 , , tL lˆa.p th`anh d˜ay d¯o.n d¯iˆe.u tˇang v´o.i d¯oˆ lˆe.ch gi˜ u.a hai knot l`a mˆo.t, bˇa´t d¯`ˆau t` u gi´a tri d¯ˆe´n gi´a tri L − m + (H`am trˆo.n cuˆo´i c` ung NL,m (t) bˇa´t d¯`aˆu ta.i t = L − m + v`a c´o gi´a d¯oa.n d¯ˆo d`ai mˆo.t) m knot cuˆo´i c` ung tL+1 , tL+2 , , tL+m bˇ`a ng L − m + T` u nguyˆen tˇa´c n`ay, ch´ ung ta dˆ˜e d`ang xˆay du ng thu˙’ tu.c ta.o vector knot chuˆa˙’n nhu sau: void Build_Knots(int m, int NumVertices, float *Knot[MaxKnots]) { int i; if ((NumVertices < m - 1) || (m + NumVertices > MaxKnots)) { printf("Thong bao loi"); return; } else { for (i = 0; i

Ngày đăng: 16/07/2020, 11:10

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan