Đánh giá chất lượng điện năng (sụt giảm điện áp) cho lưới điện phân phối huyệ...
Giao trinh ly_thuyet_do_hoa
1.
2. M C L C
Chương 1: CÁC Y U T CƠ S C A ð H A
1.1. T ng quan v ñ h a máy tính ............................................................................... 1
1.1.1. Gi i thi u v ñ h a máy tính ................................................................................ 1
1.1.2. Các k thu t ñ h a ................................................................................................ 1
1.1.2.1. K thu t ñ h a ñi m........................................................................................ 1
1.1.2.2. K thu t ñ h a vector...................................................................................... 2
1.1.3. ng d ng c a ñ h a máy tính............................................................................... 2
1.1.4. Các lĩnh v c c a ñ h a máy tính .......................................................................... 3
1.1.5. T ng quan v m t h ñ h a .................................................................................. 4
1.2. Màn hình ñ h a...................................................................................................... 6
1.3. Các khái ni m........................................................................................................... 6
1.3.1. ði m..................................................................................................................... 6
1.3.2. Các bi u di n t a ñ ............................................................................................ 8
1.3.3. ðo n th ng........................................................................................................... 8
1.4. Các thu t toán v ño n th ng................................................................................. 8
1.4.1. Bài toán................................................................................................................ 8
1.4.2. Thu t toán DDA................................................................................................... 9
1.4.3. Thu t toán Bresenham ....................................................................................... 10
1.4.4. Thu t toán MidPoint.......................................................................................... 12
1.5. Thu t toán v ñư ng tròn..................................................................................... 14
1.5.1. Thu t toán Bresenham ....................................................................................... 14
1.5.2. Thu t toán MidPoint.......................................................................................... 16
1.6. Thu t toán v Ellipse............................................................................................. 17
1.6.1. Thu t toán Bresenham ....................................................................................... 17
1.6.2. Thu t toán MidPoint.......................................................................................... 20
1.7. Phương pháp v ñ th hàm s ............................................................................. 21
Bài t p............................................................................................................................ 23
Chương 2: TÔ MÀU
2.1. Gi i thi u các h màu............................................................................................ 25
2.2. Các thu t toán tô màu .......................................................................................... 28
2.2.1. Bài toán.............................................................................................................. 28
2.2.2. Thu t toán xác ñ nh P ∈ S ................................................................................. 28
2.2.3. Thu t toán tô màu theo dòng quét ..................................................................... 30
2.2.4. Thu t toán tô màu theo v t d u loang................................................................ 30
Bài t p............................................................................................................................ 31
Chương 3: XÉN HÌNH
3.1. ð t v n ñ ............................................................................................................... 32
3. 3.2. Xén ño n th ng vào vùng hình ch nh t............................................................. 32
3.2.1. C nh c a hình ch nh t song song v i các tr c t a ñ ..................................... 32
3.2.1.1. Thu t toán Cohen – Sutherland ...................................................................... 33
3.2.1.2. Thu t toán chia nh phân................................................................................. 34
3.2.1.3. Thu t toán Liang – Barsky ............................................................................. 35
3.2.2. Khi c nh c a hình ch nh t t o v i tr c hoành m t góc α................................ 36
3.3. Xén ño n th ng vào hình tròn.............................................................................. 37
3.4. Xén ñư ng tròn vào hình ch nh t...................................................................... 38
3.5. Xén ña giác vào hình ch nh t ............................................................................. 39
Bài t p............................................................................................................................ 40
Chương 4: CÁC PHÉP BI N ð I
4.1. Các phép bi n ñ i trong m t ph ng..................................................................... 41
4.1.1. Cơ s toán h c ................................................................................................... 41
4.1.2. Ví d minh h a .................................................................................................. 43
4.2. Các phép bi n ñ i trong không gian.................................................................... 45
4.2.1. Các h tr c t a ñ .............................................................................................. 45
4.2.2. Các công th c bi n ñ i ...................................................................................... 46
4.2.3. Ma tr n ngh ch ñ o ............................................................................................ 48
4.3. Các phép chi u c a v t th trong không gian lên m t ph ng ........................... 48
4.3.1. Phép chi u ph i c nh......................................................................................... 48
4.3.2. Phép chi u song song......................................................................................... 50
4.4. Công th c c a các phép chi u lên màn hình....................................................... 50
4.5. Ph l c .................................................................................................................... 56
4.6. Ví d minh h a....................................................................................................... 59
Bài t p............................................................................................................................ 61
Chương 5: BI U DI N CÁC ð I TƯ NG BA CHI U
5.1. Mô hình WireFrame.............................................................................................. 63
5.2. V mô hình WireFrame v i các phép chi u........................................................ 64
5.3. V các m t toán h c............................................................................................... 65
Bài t p............................................................................................................................ 68
Chương 6: THI T K ðƯ NG VÀ M T CONG BEZIER VÀ B-SPLINE
6.1. ðư ng cong Bezier và m t Bezier........................................................................ 69
6.1.1. Thu t toán Casteljau .......................................................................................... 70
6.1.2. D ng Bernstein c a ñư ng cong Bezier ............................................................ 70
6.1.3. D ng bi u di n ma tr n c a ñư ng Bezier ........................................................ 71
6.1.4. T o và v ñư ng cong Bezier............................................................................ 72
6.1.5. Các tính ch t c a ñư ng Bezier......................................................................... 74
6.1.6. ðánh giá các ñư ng cong Bezier....................................................................... 76
6.2. ðư ng cong Spline và B-Spline............................................................................ 77
6.2.1. ð nh nghĩa.......................................................................................................... 77
4. 6.2.2. Các tính ch t h u ích trong vi c thi t k các ñư ng cong B-Spline ................. 78
6.2.3. Thi t k các m t Bezier và B-Spline ................................................................. 79
6.2.4. Các băng Bezier................................................................................................. 80
6.2.5. Dán các băng Bezier v i nhau ........................................................................... 81
6.2.6. Các băng B-Spline ............................................................................................. 81
Chương 7: KH ðƯ NG VÀ M T KHU T
7.1. Các khái ni m......................................................................................................... 83
7.2. Các phương pháp kh m t khu t........................................................................ 85
7.2.1. Gi i thu t s p x p theo chi u sâu ...................................................................... 85
7.2.2. Gi i thu t BackFace........................................................................................... 88
7.2.3. Gi i thu t vùng ñ m ñ sâu ............................................................................... 90
Bài t p.......................................................................................................................... 103
Chương 8: T O BÓNG V T TH 3D
8.1. Khái ni m ............................................................................................................. 104
8.2. Ngu n sáng xung quanh...................................................................................... 104
8.3. Ngu n sáng ñ nh hư ng ...................................................................................... 105
8.4. Ngu n sáng ñi m.................................................................................................. 109
8.5. Mô hình bóng Gouraud....................................................................................... 110
Bài t p.......................................................................................................................... 121
Ph l c: M T S CHƯƠNG TRÌNH MINH H A
I. Các thu t toán tô màu ............................................................................................ 122
II. Các thu t toán xén hình........................................................................................ 129
III. V các ñ i tư ng 3D............................................................................................. 136
Tài li u tham kh o...................................................................................................... 143
5. L I M ð U
ð h a là m t trong nh ng lĩnh v c phát tri n r t nhanh c a ngành Công ngh
thông tin. Nó ñư c ng d ng r ng rãi trong nhi u lĩnh v c khoa h c và công ngh .
Ch ng h n như y h c, ki n trúc, gi i trí... ð h a máy tính ñã giúp chúng ta thay ñ i
cách c m nh n và s d ng máy tính, nó ñã tr thành nh ng công c tr c quan quan
tr ng không th thi u trong ñ i s ng h ng ngày. Vì v y môn “ð h a” ñã tr thành
m t trong nh ng môn h c chính trong các chuyên ngành Công ngh thông tin các
trư ng ñ i h c.
Cu n sách “Giáo trình lý thuy t ñ h a” ñư c biên so n theo sát n i dung
chương trình ñào t o c nhân Công ngh thông tin. N i dung c a giáo trình này
cung c p m t s ki n th c cơ b n v lý thuy t và thu t toán xây d ng các công c
ñ h a 2D và 3D. T ñó giúp sinh viên có th ñ c l p xây d ng nh ng thư vi n ñ
h a cho riêng mình và phát tri n các ph n m m ng d ng ñ h a cao hơn.
Giáo trình ñư c chia làm 8 chương và ph n ph l c, sau m i chương ñ u có
ph n bài t p ñ ki m tra ki n th c và rèn luy n kh năng l p trình cho b n ñ c. ð
thu n ti n cho vi c trình bày thu t toán m t cách d hi u, các gi i thu t trong giáo
trình ñư c vi t trên ngôn ng “t a Pascal” và các mã ngu n ñư c cài ñ t trên Turbo
Pascal 7.0. Nh m giúp b n ñ c b t lúng túng trong quá trình cài ñ t các gi i thu t,
ph n ph l c li t kê m t s mã ngu n cài ñ t các thu t toán trong các chương. Tuy
nhiên, b n ñ c nên t cài ñ t các thu t toán ph n lý thuy t, n u c m th y khó
khăn l m m i nên tham kh o ph n ph l c này.
Chương 1, 2 và 3 trình bày v các y u t cơ s c a ñ h a như: màn hình ñ
h a, ñi m, ño n th ng, ñư ng tròn, các h màu và các thu t toán tô màu, xén hình ...
Chương 4 trang b các ki n th c toán h c v các phép bi n ñ i trong không gian 2D
và 3D. Chương 5, 6 và 7 gi i thi u các mô hình ñ h a 3D, các gi i thu t kh m t
khu t và t o bóng cho v t th ... Chương 8 trình bày v phương pháp thi t k các
ñư ng cong Bezier và B-Spline.
M c dù ñã r t c g ng trong quá trình biên so n nhưng ch c ch n giáo trình
này v n không th tránh kh i nh ng thi u sót. Chúng tôi r t mong nh n ñư c nh ng
ý ki n ñóng góp c a b n ñ c cũng như các b n ñ ng nghi p trong lĩnh v c ð h a
ñ giáo trình ngày càng ñư c hoàn thi n hơn trong l n tái b n sau. ð a ch liên l c:
Khoa Công ngh Thông tin, trư ng ð i h c Khoa h c Hu .
ði n tho i: 054.826767. Email: paphuong@hueuni.edu.vn
nhtai@hueuni.edu.vn
Hu , tháng 08 năn 2003
Các tác gi
6. Updatesofts.com Ebooks Team
CHƯƠNG I
CÁC Y U T CƠ S C A ð H A
1.1. T NG QUAN V ð H A MÁY TÍNH
ð h a máy tính là m t lãnh v c phát tri n nhanh nh t trong Tin h c. Nó ñư c áp
d ng r ng rãi trong nhi u lãnh v c khác nhau thu c v khoa h c, k ngh , y khoa,
ki n trúc và gi i trí.
Thu t ng ñ h a máy tính (Computer Graphics) ñư c ñ xu t b i nhà khoa h c
ngư i M tên là William Fetter vào năm 1960 khi ông ñang nghiên c u xây d ng mô
hình bu ng lái máy bay cho hãng Boeing.
Các chương trình ñ h a ng d ng cho phép chúng ta làm vi c v i máy tính m t
cách tho i mái, t nhiên.
1.1.1 Gi i thi u v ñ h a máy tính
ð h a máy tính là m t ngành khoa h c Tin h c chuyên nghiên c u v các
phương pháp và k thu t ñ có th mô t và thao tác trên các ñ i tư ng c a th gi i
th c b ng máy tính.
V b n ch t: ñó là m t quá trình xây d ng và phát tri n các công c trên c hai
lĩnh v c ph n c ng và ph n m m h tr cho các l p trình viên thi t k các chương
trình có kh năng ñ h a cao.
V i vi c mô t d li u thông qua các hình nh và màu s c ña d ng c a nó, các
chương trình ñ h a thư ng thu hút ngư i s d ng b i tính thân thi n, d dùng,... kích
thích kh năng sáng t o và nâng cao năng su t làm vi c.
1.1.2. CÁC K THU T ð H A
D a vào các phương pháp x lý d li u trong h th ng, ta phân ra làm hai k thu t
ñ h a:
1.1.2.1. K thu t ñ h a ñi m
7. Chương I. Các y u t cơ s c a ñ h a
2
Nguyên lý c a k thu t này như sau: các hình nh ñư c hi n th thông qua t ng
pixel (t ng m u r i r c). V i k thu t này, chúng ta có th t o ra, xóa ho c thay ñ i
thu c tính c a t ng pixel c a các ñ i tư ng. Các hình nh ñư c hi n th như m t lư i
ñi m r i r c (grid), t ng ñi m ñ u có v trí xác ñ nh ñư c hi n th v i m t giá tr
nguyên bi u th màu s c ho c d sáng c a ñi m ñó. T p h p t t c các pixel c a grid
t o nên hình nh c a ñ i tư ng mà ta mu n bi u di n.
1.1.2.2. K thu t ñ h a vector
Nguyên lý c a k thu t này là xây d ng mô hình hình h c (geometrical model) cho
hình nh ñ i tư ng, xác ñ nh các thu c tính c a mô hình hình h c, sau ñó d a trên mô
hình này ñ th c hi n quá trình tô trát (rendering) ñ hi n th t ng ñi m c a mô hình,
hình nh c a ñ i tư ng.
k thu t này, chúng ta ch lưu tr mô hình toán h c c a các thành ph n trong mô
hình hình h c cùng v i các thu c tính tương ng mà không c n lưu l i toàn b t t c
các pixel c a hình nh ñ i tư ng.
1.1.3. ng d ng c a ñ h a máy tính hi n nay
Ngày nay, ñ h a máy tính ñư c s d ng r ng rãi trong nhi u lĩnh v c khác
nhau như: Công nghi p, thương m i, qu n lý, giáo d c, gi i trí,... Sau ñây là m t s
ng d ng tiêu bi u:
1.1.3.1. T o giao di n (User Interfaces): như các chương trình ng d ng WINDOWS,
WINWORD, EXCEL ... ñang ñư c ña s ngư i s d ng ưa chu ng nh tính thân
thi n, d s d ng.
1.1.3.2. T o ra các bi u ñ dùng trong thương m i, khoa h c và k thu t: Các bi u
ñ ñư c t o ra r t ña d ng, phong phú bao g m c hai chi u l n ba chi u góp ph n
thúc ñ y xu hư ng phát tri n các mô hình d li u h tr ñ c l c cho vi c phân tích
thông tin và tr giúp ra quy t ñ nh.
1.1.3.3. T ñ ng hóa văn phòng và ch b n ñi n t : dùng nh ng ng d ng c a ñ
h a ñ in n các tài li u v i nhi u lo i d li u khác nhau như: văn b n, bi u ñ , ñ th
và nhi u lo i hình nh khác ...
1.1.3.4. Thi t k v i s tr giúp c a máy tính (Computer aided design): M t trong
nh ng l i ích l n nh t c a máy tính là tr giúp con ngư i trong vi c thi t k . Các ng
8. Chương I. Các y u t cơ s c a ñ h a
3
d ng ñ h a cho phép chúng ta thi t k các thi t b cơ khí, ñi n, ñi n t , ô tô, máy bay,
... như ph n m m AUTOCAD ...
1.1.3.5. Lĩnh v c gi i trí, ngh thu t: cho phép các h a sĩ t o ra các hình nh ngay
trên màn hình c a máy tính. Ngư i h a sĩ có th t pha màu, tr n màu, th c hi n m t
s thao tác: c t, dán, t y, xóa, phóng to, thu nh ... như các ph n m m PAINTBRUSH,
CORELDRAW,...
1.1.3.6. Lĩnh v c b n ñ : xây d ng và in n các b n ñ ñ a lý. M t trong nh ng ng
d ng hi n nay c a ñ h a là h th ng thông tin ñ a lý (GIS - Geographical Information
System).
1.1.4. Các lĩnh v c c a ñ h a máy tính
1.1.4.1. Các h CAD/CAM (CAD – Computer Aided Design, CAM – Computer
Aided Manufacture)
Các h này xây d ng t p h p các công c ñ h a tr giúp cho vi c thi t k các chi
ti t và các h th ng khác nhau: các thi t b cơ khí, ñi n t ... Ch ng h n như ph n m m
Auto Cad c a h ng AutoDesk...
1.1.4.2. X lý nh (Image Processing)
ðây là lĩnh v c x lý các d li u nh trong cu c s ng. Sau quá trình x lý nh, d
li u ñ u ra là nh c a ñ i tư ng. Trong quá trình x lý nh, chúng ta s s d ng r t
nhi u các k thu t ph c t p: khôi ph c nh, xác ñ nh biên...
Ví d : ph n m m PhotoShop, Corel Draw, ...
1.1.4.3. Khoa h c nh n d ng (Pattern Recognition)
Nh n d ng là m t lĩnh v c trong k thu t x lý nh. T nh ng m u nh có s n, ta
phân lo i theo c u trúc ho c theo các phương pháp xác ñ nh nào ñó và b ng các thu t
toán ch n l c ñ có th phân tích hay t ng h p nh ñã cho thành m t t p h p các nh
g c, các nh g c này ñư c lưu trong m t thư vi n và căn c vào thư vi n này ñ nh n
d ng các nh khác.
Ví d : Ph n m m nh n d ng ch vi t (VnDOCR) c a vi n Công ngh Thông tin
Hà N i, nh n d ng vân tay, nh n d ng m t ngư i trong khoa h c hình s ...
1.1.4.4. ð h a minh h a (Presentation Graphics)
9. Chương I. Các y u t cơ s c a ñ h a
4
ðây là lĩnh v c ñ h a bao g m các công c tr giúp cho vi c hi n th các s li u
th ng kê m t cách tr c quan thông qua các m u ñ th ho c bi u ñ có s n. Ch ng h n
như các bi u ñ (Chart) trong các ph n m m Word, Excel...
1.1.4.5. Ho t hình và ngh thu t
Lĩnh v c ñ h a này bao g m các công c giúp cho các h a sĩ, các nhà thi t k
phim nh chuyên nghi p th c hi n các công vi c c a mình thông qua các k x o v
tranh, ho t hình ho c các k x o ñi n nh khác...
Ví d : Ph n m m x lý các k x o ho t hình như: 3D Animation, 3D Studio
Max..., ph n m m x lý các k x o ñi n nh: Adobe Primiere, Cool 3D,...
1.1.5. T ng quan v m t h ñ h a (Graphics System)
1.1.5.1. H th ng ñ h a
Ph n m m ñ h a: Là t p h p các câu l nh ñ h a c a h th ng. Các câu l nh l p
trình dùng cho các thao tác ñ h a không ñư c các ngôn ng l p trình thông d ng như
PASCAL, C, ... h tr . Thông thư ng, nó ch cung c p như là m t t p công c thêm
vào trong ngôn ng . T p các công c này dùng ñ t o ra các thành ph n cơ s c a m t
hình nh ñ h a như: ði m, ño n th ng, ñư ng tròn, màu s c,... Qua ñó, các nhà l p
trình ph i t o ra các chương trình ñ h a có kh năng ng d ng cao hơn.
Ph n c ng ñ h a: Là các thi t b ñi n t : CPU, Card, màn hình, chu t, phím...
giúp cho vi c th c hi n và phát tri n các ph n m m ñ h a.
1.1.5.2. Các thành ph n c a m t h th ng ñ h a
T p h p các công c này ñư c phân lo i d a trên nh ng công vi c trong t ng hoàn
c nh c th : xu t, nh p, bi n ñ i nh, ... bao g m:
• T p công c t o ra nh g c (output primitives): cung c p các công c cơ b n
nh t cho vi c xây d ng các hình nh. Các nh g c bao g m các chu i ký t , các th c
th hình h c như ñi m, ñư ng th ng, ña giác, ñư ng tròn,...
• T p các công c thay ñ i thu c tính (attributes): dùng ñ thay ñ i thu c tính c a
các nh g c. Các thu c tính c a nh g c bao g m màu s c (color), ki u ñư ng th ng
(line style), ki u văn b n (text style), m u tô vùng (area filling pattern),...
10. Chương I. Các y u t cơ s c a ñ h a
5
• T p các công c thay ñ i h quan sát (viewing transformation): M t khi mà các
nh g c và các thu c tính c a nó ñư c xác ñ nh trong h t a ñ th c, ta c n ph i chi u
ph n quan sát c a nh sang m t thi t b xu t c th . Các công c này cho phép ñ nh
nghĩa các vùng quan sát trên h t a ñ th c ñ hi n th hình nh ñó.
• T p các công c ph c v cho các thao tác nh p d li u (input operations): Các
ng d ng ñ h a có th s d ng nhi u lo i thi t b nh p khác nhau như bút v , b ng,
chu t, ... Chính vì v y, c n xây d ng thêm các công c này ñ ñi u khi n và x lý các
d li u nh p sao cho có hi u qu .
M t yêu c u v ph n c ng không th thi u ñ t ra cho các ph n m m ñ h a là:
tính d mang chuy n (portability), có nghĩa là chương trình có th chuy n ñ i m t
cách d dàng gi a các ki u ph n c ng khác nhau. N u không có s chu n hóa, các
chương trình thi t k thư ng không th chuy n ñ i ñ n các h th ng ph n c ng khác
mà không vi t l i g n như toàn b chương trình.
Sau nh ng n l c c a các t ch c chu n hóa qu c t , m t chu n cho vi c phát tri n
các ph n m m ñ h a ñã ra ñ i: ñó là GKS (Graphics Kernel System - H ñ h a cơ
s ). H th ng này ban ñ u ñư c thi t k như là m t t p các công c ñ h a hai chi u,
sau ñó ñư c phát tri n ñ m r ng trong ñ h a ba chi u.
Ngoài ra, còn có m t s chu n ñ h a ph bi n như:
• CGI (Computer Graphics Interface System): h chu n cho các phương pháp
giao ti p v i các thi t b ngo i vi.
• OPENGL: thư vi n ñ h a c a h ng Silicon Graphics.
• DIRECTX: thư vi n ñ h a c a h ng Microsoft.
1.2. MÀN HÌNH ð H A
M i máy tính ñ u có m t CARD dùng ñ qu n lý màn hình, g i là Video Adapter
hay Graphics Adapter. Có nhi u lo i adapter như: CGA, MCGA, EGA, VGA,
Hercules... Các adapter có th làm vi c hai ch ñ : văn b n (Text Mode) và ñ h a
(Graphics Mode).
Có nhi u cách ñ kh i t o các mode ñ h a. Ta có th s d ng hàm $00 ng t $10
c a BIOS v i các Mode sau:
11. Chương I. Các y u t cơ s c a ñ h a
6
• Mode $12: ch ñ phân gi i 640x480x16
• Mode $13: ch ñ phân gi i 320x200x256
Ta có th vi t m t th t c ñ kh i t o ch ñ ñ h a như sau:
Procedure InitGraph(Mode:Word);
var Reg:Registers;
Begin
reg.ah := 0;
reg.al := mode;
intr($10,reg);
End;
Các b n có th tham kh o thêm các tài li u v l p trình h th ng.
1.3. CÁC KHÁI NI M
1.3.1. ði m (Pixel)
Trong các h th ng ñ h a, m t ñi m ñư c bi u th b i các t a ñ b ng s .
Ví du: Trong m t ph ng, m t ñi m là m t c p (x,y)
Trong không gian ba chi u, m t ñi m là b ba (x,y,z)
Trên màn hình c a máy tính, m t ñi m là m t v trí trong vùng nh màn hình dùng
ñ lưu tr các thông tin v ñ sáng c a ñi m tương ng trên màn hình.
S ñi m v trên màn hình ñư c g i là ñ phân gi i c a màn hình (320x200,
480x640, 1024x1024,...)
Cách hi n th thông tin lên màn hình ñ h a:
Vùng ñ m màn hình hay còn g i là b nh hi n th ñư c b t ñ u t ñ a ch
A000h:$0000h. Vì v y, ñ hi n th thông tin ra màn hình thì ta ch c n ñưa thông tin
vào vùng ñ m màn hình b t ñ u t ñ a ch trên là ñư c.
Có nhi u cách ñ v m t ñi m ra màn hình: có th dùng các ph c v c a BIOS ho c
cũng có th truy xu t tr c ti p vào vùng nh màn hình.
• N u dùng ph c v c a BIOS, ta dùng hàm $0C ng t $10:
Procedure PutPixel(Col,Row:Word; Color:Byte);
Var reg:Registers;
Begin
reg.ah:=$0C;
reg.al:=Color;
12. Chương I. Các y u t cơ s c a ñ h a
7
reg.bh:=0;
reg.cx:=Col;
reg.dx:=Row;
Intr($10,reg);
End;
• N u mu n truy xu t tr c ti p vào vùng ñ m màn hình: Gi s m t ñi m (x,y)
ñư c v trên màn hình v i ñ phân gi i 320x200x256 (mode 13h), ñi m ñó s ñư c
ñ nh v trong vùng ñ m b t ñ u t ñ a ch segment A000h và ñ a ch offset ñư c tính
theo công th c: Offset = y*320 + x.
Ta có th vi t th t c như sau:
Procedure PutPixel(x,y:Word; Color:Byte);
Var Offset:Word;
Begin
Offset:=(y shl 8) + (y shl 6) + x;
Mem[$A000:Offset]:=Color;
End;
1.3.2. Các bi u di n t a ñ
H u h t các chương trình ñ h a ñ u dùng h t a ñ Decartes (Hình 1.1).
Ta bi n ñ i:
O
Y
X X
Y
O
MaxY
MaxX
T a ñ th gi i th c T a ñ thi t b màn hình.
Hình 1.1
1.3.3. ðo n th ng
Trong các h th ng ñ h a, các ño n th ng ñư c bi u th b i vi c “tô” ño n th ng
b t ñ u t ñi m ñ u mút này kéo dài cho ñ n khi g p ñi m ñ u mút kia.
1.4. CÁC THU T TOÁN V ðO N TH NG
13. Chương I. Các y u t cơ s c a ñ h a
8
1.4.1. Bài toán: V ño n th ng ñi qua 2 ñi m A(x1,y1) và B(x2,y2)
* Trư ng h p x1=x2 ho c y1=y2: r t ñơn gi n.
* Trư ng h p ñư ng th ng có h s góc m:
Ý tư ng:
Vì các Pixel ñư c v các v trí nguyên nên ñư ng th ng ñư c v gi ng như hình
b c thang (do làm tròn).
V n ñ ñ t ra là ch n các t a ñ nguyên g n v i ñư ng th ng nh t.
1.4.2. Thu t toán DDA (Digital differential analyzer)
Xét ñư ng th ng có h s góc 0<m≤1(gi s ñi m ñ u A n m bên trái và ñi m cu i
B n m bên ph i). N u ta ch n ∆x=1và tính giá tr y k ti p như sau:
yk+1 = yk + ∆y = yk + m.∆x
= yk + m
V i h s góc m>1: ta hoán ñ i vai trò c a x,y cho nhau. N u ch n ∆y=1 thì:
xk+1 = xk + 1/m
Tương t , n u ñi m B n m bên trái và A n m bên ph i thì:
yk+1 = yk - m (0<m≤1, ∆x= -1)
xk+1 = xk - 1/m (m>1, ∆y= -1)
Tóm l i: Ta có thu t toán v ñư ng th ng DDA như sau:
Nh p A(x1,y1) B(x2,y2)
Tính ∆x = x2 - x1 ∆y = y2 - y1 Step = Max(|∆x| , |∆y|)
Kh i t o các giá tr :
IncX = ∆x/Step; IncY = ∆y/Step; {bư c tăng khi v }
x = x1; y = y1; {Ch n ñi m v ñ u tiên}
V ñi m (x,y);
Cho i ch y t 1 ñ n Step:
x = x + IncX; y = y + IncY;
V ñi m (Round(x),Round(y))
T ñó ta có th t c v ño n th ng theo thu t toán DDA như sau:
Procedure DDALine(x1,y1,x2,y2:Integer);
var dx,dy,step,i:integer;
14. Chương I. Các y u t cơ s c a ñ h a
9
xInc,yInc,x,y:real;
Begin
dx:=x2-x1; dy:=y2-y1;
If abs(dx)>abs(dy) Then step:=abs(dx)
else step:=abs(dy);
xInc:=dx/step;
yInc:=dy/step;
x:=x1;
y:=y1;
Putpixel(round(x),round(y),15);
for i:=1 to step do
Begin
x:=x+xInc;
y:=y+yInc;
Putpixel(round(x),round(y),15);
End;
End;
1.4.3. Thu t toán Bresenham
Phương trình ñư ng th ng có th phát
bi u dư i d ng: y = m.x + b (1)
Phương trình ñư ng th ng qua 2 ñi m:
12
1
xx
xx
−
−
=
12
1
yy
yy
−
−
(*)
ð t ∆x = x2 - x1
∆y = y2 - y1
(*) ⇔ y = x.
x
y
∆
∆
+ y1 - x1.
x
y
∆
∆
Suy ra m =
x
y
∆
∆
nên ∆y = m. ∆x (2)
b = y1 - m.x1 (3)
Ta ch xét trư ng h p h s góc 0<m<1.
Gi s ñi m (xi,yi) ñã ñư c v . Ta ph i ch n ñi m k ti p là:
xi xi+1
yi+
1
y
yi
Hình 1.2
15. Chương I. Các y u t cơ s c a ñ h a
10
(xi + 1,yi) ho c (xi +1,yi +1) (Xem hình 1.2)
Xét kho ng cách gi a 2 ñi m ch n v i ñi m n m trên ñư ng th c. N u kho ng
cách nào bé hơn thì ta l y ñi m ñó.
ð t:
d1 = y - yi = m.(xi +1) + b - yi
d2 = (yi +1) - y = yi + 1 - m.(xi + 1) - b
Suy ra:
d1 - d2 = 2m.(xi + 1) - 2yi + 2b - 1
= 2.
x
y
∆
∆
.(xi + 1) - 2yi + 2b - 1
⇔ ∆x(d1 - d2) = 2∆y.xi - 2∆x.yi + 2∆y + ∆x.(2b - 1)
ð t pi = ∆x(d1 - d2) và C = 2∆y + ∆x.(2b - 1)
thì pi = 2∆y.xi - 2∆x.yi + C (4)
pi+1 = 2∆y.xi+1 - 2∆x.yi+1 + C
Suy ra:
pi+1 - pi = 2∆y(xi+1 - xi) - 2∆x(yi - yi+1)
= 2∆y - 2∆x(yi+1 - yi) (5)
( vì xi+1 - xi = 1 )
* Nh n xét:
. N u pi < 0: Ch n yi+1 = yi T (5) ⇒ pi+1 = pi + 2∆y. (d1<d2)
. N u pi ≥ 0: Ch n yi+1 = yi + 1 T (5) ⇒ pi+1 = pi + 2∆y - 2∆x. (d1>d2)
V i ñi m mút ñ u tiên, theo (4) ta có:
p1 = 2∆y.x1 - 2∆x.y1 + 2∆y + ∆x[2.(y1 - m.x1) - 1] = 2∆y - ∆x
T ñó, ta có th tóm t t thu t toán v ñư ng th ng theo Bresenham cho trư ng h p h
s góc 0<m<1 như sau:
• Bư c 1: Nh p các ñi m ñ u mút. ði m ñ u mút bên trái ch a t a ñ (x1,y1), ñi m
ñ u mút bên ph i ch a t a ñ (x2,y2).
• Bư c 2: ði m ñư c ch n ñ v ñ u tiên là (x1,y1).
• Bư c 3: Tính ∆x = |x2 - x1| , ∆y = |y2 - y1| và P1 = 2∆y - ∆x
N u pi < 0 thì ñi m k ti p là (xi + 1,yi)
Ngư c l i: ñi m k ti p là (xi + 1,yi + 1)
16. Chương I. Các y u t cơ s c a ñ h a
11
• Bư c 4: Ti p t c tăng x lên 1 Pixel. v trí xi +1, ta tính:
pi+1 = pi + 2∆y n u pi < 0
pi+1 = pi + 2.( ∆y - ∆x) n u pi ≥ 0
N u pi+1 < 0 thì ta ch n to ñ y k ti p là yi+1
Ngư c l i thì ta ch n yi+1 +1
• Bư c 5: L p l i bư c 4 cho ñ n khi x = x2.
Sau ñây là th t c cài ñ t thu t toán:
Procedure LINE(x1,y1,x2,y2:integer); { 0<m<1}
var dx,dy,x,y,p,c1,c2,xMax:integer;
Begin
dx:=abs(x1-x2);
dy:=abs(y1-y2);
c1:=2*dy;
c2:=2*(dy-dx);
p:=2*dy-dx;
if x1>x2 then
begin
x:=x2; y:=y2; xMax:=x1;
end
else
begin
x:=x1;y:=y1;xMax:=x2;
end;
putpixel(x,y,red);
while x<xMax do
begin
x:=x+1;
if p<0 then p:=p+c1
else begin
y:=y+1;
p:=p+c2;
end;
17. Chương I. Các y u t cơ s c a ñ h a
12
putpixel(x,y,red);
end;
end;
1.4.4. Thu t toán MidPoint
Ta ch xét trư ng h p h s góc 0<m<1.
Thu t toán này ñưa ra cách ch n ñi m S(xi+1,yi) hay P(xi+1,yi+1) b ng cách so
sánh ñi m th c Q(xi+1,y) v i ñi m M (trung ñi m c a S và P).
N u ñi m Q n m dư i ñi m M thì ch n ñi m S
Ngư c l i, ch n ñi m P. (Xem hình 1.3)
Ta có d ng t ng quát c a phương trình ñư ng th ng:
Ax + By + C = 0
v i A = y2 – y1 , B = –(x2 – x1) ,
C = x2.y1 – x1.y2
ð t F(x,y) = Ax + By + C, ta có nh n xét:
< 0 n u (x,y) n m phía trên ñư ng th ng
F(x,y) = 0 n u (x,y) thu c v ñư ng th ng
> 0 n u (x,y) n m phía dư i ñư ng th ng
Lúc này, vi c ch n các ñi m S hay P ñư c ñưa v vi c xét d u c a:
pi = F(M) = F(xi + 1,yi +
2
1
)
N u pi < 0 ⇒ M n m trên ño n
th ng ⇒ Q n m dư i M ⇒ Ch n S
N u pi ≥ 0 ⇒ M n m dư i ño n
th ng ⇒ Q n m trên M ⇒ Ch n P
M t khác:
pi = F(xi + 1,yi +
2
1
)
pi+1 = F(xi+1 + 1,yi+1 +
2
1
)
nên
pi+1 - pi = F(xi+1 + 1,yi+1 +
2
1
) - F(xi + 1,yi +
2
1
)
P
Q
M
S
xi
xi+1
yi+
1
yi
Hình 1.3
18. Chương I. Các y u t cơ s c a ñ h a
13
= A(xi+1+1) + B(yi+1 +
2
1
) + C - A(xi+1) - B(yi +
2
1
) - C
= A(xi+1 - xi) + B(yi+1 - yi)
= A + B(yi+1 - yi) (vì xi+1 - xi =1)
Suy ra:
pi+1 = pi + A + B(yi+1 - yi) (*)
*Nh n xét:
. N u pi < 0: Ch n ñi m S: yi+1 = yi T (*) suy ra pi+1 = pi + A
. N u pi ≥ 0: Ch n ñi m P: yi+1 = yi + 1 T (*) suy ra pi+1 = pi + A + B
V i ñi m mút ñ u tiên, ta có:
p1 = F(x1 + 1,y1 +
2
1
) = A(x1+1) + B(y1 +
2
1
) + C
= Ax1 + Bx1 + C + A +
2
B
= A +
2
B
(vì Ax1 + Bx1 + C = 0)
Thu t toán MidPoint cho k t qu tương t như thu t toán Bresenham.
1.5. THU T TOÁN V ðƯ NG TRÒN
Xét ñư ng tròn (C) tâm O(xc,yc) bán kính R.
Phương trình t ng quát c a ñư ng tròn có d ng:
(x - xc)2
+ (y - yc)2
= R2
(*)
⇔ y = yc ± R x xC
2 2
− −( ) (1)
ð ñơn gi n thu t toán, ñ u tiên ta xét ñư ng
tròn có tâm g c t a ñ (xc=0 và yc=0).
* Ý tư ng:
Do tính ñ i x ng c a ñư ng tròn nên n u ñi m
(x,y)∈(C) thì các ñi m (y,x), (-y,x), (-x,y), (-x,-y), (-y,-x), (y,-x), (x,-y) cũng ∈ (C) (Hình 1.4)
Vì v y, ta ch c n v m t ph n tám cung tròn r i l y ñ i x ng qua g c O và 2 tr c to
ñ thì ta có ñư c toàn b ñư ng tròn.
1.5.1. Thu t toán Bresenham
Gi s (xi,yi) ñã v ñư c. C n ch n ñi m k ti p là (xi +1,yi) ho c (xi +1,yi -1)
(Hình 1.5)
T phương trình: x2
+ y2
= R2
ta tính ñư c giá tr y th c ng v i xi +1 là:
(-x,-
y)
(x,y
)
(y,x
)
(-
y,x)
(-
x,y)
(-y,-
x)
(x,-
y)
(
y,-
Hình
1.4
19. Chương I. Các y u t cơ s c a ñ h a
14
y2
= R2
- (xi +1)2
ð t: d1 = yi
2
- y2
= yi
2
- R2
+ (xi + 1)2
d2 = y2
- (yi - 1)2
= R2
- (xi + 1)2
- (yi - 1)2
Suy ra:
pi = d1 - d2 = 2.(xi + 1)2
+ yi
2
+ (yi - 1)2
- 2R2
(2)
⇒ pi+1 = 2.(xi+1 + 1)2
+ y2
i+1 + (yi+1 - 1)2
- 2R2
(3)
T (2) và (3) ta có:
pi+1 - pi = 4xi + 6 + 2.(y2
i+1 - yi
2
) - 2.(yi+1 - yi)
⇒ pi+1 = pi + 4xi + 6 + 2.(y2
i+1 - yi
2
) - 2.(yi+1 - yi)
(4)
* Nh n xét:
N u pi < 0: ch n yi+1 = yi (4) ⇒ pi+1 = pi + 4xi + 6
N u pi ≥ 0: ch n yi+1 = yi - 1 (4) ⇒ pi+1 = pi + 4.(xi - yi) + 10
Ta ch n ñi m ñ u tiên c n v (0,R), theo (2) ta có: p1 = 3 - 2R
Tóm l i: Ta có thu t toán v ñư ng tròn:
• Bư c 1: Ch n ñi m ñ u c n v (x1,y1) = (0,R)
• Bư c 2: Tính P ñ u tiên: p1 = 3 - 2R
N u p < 0: ch n ñi m k ti p là (xi +1,yi). Ngư c l i ch n ñi m (xi + 1,yi - 1)
• Bư c 3: x:=x + 1, tính l i p:
N u pi < 0: pi+1 = pi + 4xi + 6. Ngư c l i: pi+1 = pi + 4.(xi - yi) + 10
Khi ñó:
N u pi+1 < 0: ch n ñi m k ti p là (xi +1,yi+1). Ngư c l i ch n ñi m (xi+1,yi+1-1)
• Bư c 4: L p l i bư c 3 cho ñ n khi x = y.
Sau ñây là th t c ñ cài ñ t thu t toán:
Procedure Circle(x0,y0,r:Integer);
Var p,x,y:Integer;
Procedure VeDiem;
Begin
PutPixel( x0 + x , y0 + y , color);
PutPixel( x0 - x , y0 + y , color);
PutPixel( x0 + x , y0 - y , color);
PutPixel( x0 - x , y0 - y , color);
yi
y
yi-
1
xi
xi+1
Hình
1.5
20. Chương I. Các y u t cơ s c a ñ h a
15
PutPixel( x0 + y , y0 + x , color);
PutPixel( x0 - y , y0 + x , color);
PutPixel( x0 + y , y0 - x , color);
PutPixel( x0 - y , y0 - x , color);
End;
Begin
x:=0; y:=r;
p:=3 - 2*r;
While x<=y do
Begin
VeDiem;
If p<0 then p:=p + 4*x + 6
Else
Begin
p:=p + 4*(x-y) + 10;
y:=y-1;
End;
x:=x+1;
End;
End;
1.5.2. Thu t toán MidPoint
T phương trình ñư ng tròn: x2
+ y2
= R2
ð t F(x,y) = x2
+ y2
- R2
,ta có:
< 0 n u (x,y) trong ñư ng tròn
F(x,y) = 0 n u (x,y) trên ñư ng tròn
> 0 n u (x,y) ngoàiñư ng tròn
Lúc này, vi c ch n các ñi m S(xi+1,yi) hay
P(xi+1,yi-1) ñư c ñưa v vi c xét d u c a:
pi = F(M) = F(xi + 1,yi -
2
1
) (Hình 1.6)
N u pi < 0 ⇒ M n m trong ñư ng tròn ⇒ Q g n S hơn ⇒ Ch n S
N u pi ≥ 0 ⇒ M n m ngoài ñư ng tròn ⇒ Q g n P hơn ⇒ Ch n P
yi
yi-
1
xi xi+1
S
M
Q
P
Hình
1.6
21. Chương I. Các y u t cơ s c a ñ h a
16
M t khác:
pi = F(xi + 1,yi -
2
1
)
pi+1 = F(xi+1 + 1,yi+1 -
2
1
)
nên
pi+1 - pi = F(xi+1 + 1,yi+1 -
2
1
) - F(xi + 1,yi -
2
1
)
= [(xi+1+1)2
+ (yi+1 -
2
1
)2
- R2
] - [(xi+1)2
+ (yi -
2
1
)2
- R2
]
= [(xi+2)2
+ (yi+1 -
2
1
)2
- R2
] - [(xi+1)2
+ (yi -
2
1
)2
- R2
]
= 2xi + 3 + (yi+1
2
- yi
2
) - (yi+1 - yi)
Suy ra:
pi+1 = pi + 2xi + 3 + (yi+1
2
- yi
2
) - (yi+1 - yi) (*)
*Nh n xét:
. N u pi < 0: Ch n ñi m S : yi+1 = yi T (*) ⇒ pi+1 = pi + 2xi + 3
. N u pi ≥ 0: Ch n ñi m P: yi+1 = yi - 1 T (*) ⇒ pi+1 = pi + 2(xi - yi) + 5
V i ñi m ñ u tiên (0,R), ta có:
p1 = F(x1 + 1,y1 -
2
1
) = F(1,R -
2
1
) = 1 + (R -
2
1
)2
- R2
=
4
5
- R
1.6. THU T TOÁN V ELLIPSE
ð ñơn gi n, ta ch n Ellipse có tâm g c t a
ñ . Phương trình c a nó có d ng:
2
2
a
x
+ 2
2
b
y
= 1
Ta có th vi t l i: y2
= - 2
2
a
b
.x2
+ b2
(*)
*Ý tư ng: Gi ng như thu t toán v ñư ng tròn.
Ch có s khác bi t ñây là ta ph i v 2 nhánh: M t nhánh t trên xu ng và m t
nhánh t dư i lên và 2 nhánh này s g p nhau t i ñi m mà ñó h s góc c a ti p
tuy n v i Ellipse = -1 (Hình 1.7).
Phương trình ti p tuy n v i Ellipse t i ñi m (x0,y0) ∈ (E) :
Hình
1.7
22. Chương I. Các y u t cơ s c a ñ h a
17
x0. 2
a
x
+ y0. 2
b
y
= 1
Suy ra, h s góc c a ti p tuy n t i ñi m ñó là: - 2
0
2
0 .
ay
bx
.
1.6.1. Thu t toán Bresenham
ñây, ta ch xét nhánh v t trên xu ng.
Gi s ñi m (xi,yi) ñã ñư c v . ði m ti p theo c n ch n s là (xi+1,yi) ho c
(xi+1,yi-1)
Thay (xi +1) vào (*): y2
= - 2
2
a
b
.(xi +1)2
+ b2
ð t:
d1= yi2
- y2
= yi
2
+ 2
2
a
b
.(xi +1)2
-b2
d2= y2
- (yi -1)2
= - 2
2
a
b
.(xi +1)2
+ b2
- (yi -1)2
⇒ pi = d1 - d2 = 2.[ 2
2
a
b
.(xi +1)2
- b2
] + 2.(yi
2
+ yi) -1
pi+1 = 2.[ 2
2
a
b
.(xi+1 +1)2
- b2
] + 2.(yi+1
2
+ yi+1) -1
Suy ra:
pi+1 - pi = 2. 2
2
a
b
.[(xi+1 +1)2
- (xi +1)2
] + 2.( yi+1
2
- yi
2
+ yi+1 - yi) (**)
*Nh n xét:
• pi < 0: Ch n yi+1 = yi
(**) ⇒ pi+1 = pi + 2. 2
2
a
b
.(2x + 3)
• pi ≥ 0: Ch n yi+1 = yi -1
(**) ⇒ pi+1 = pi + 2. 2
2
a
b
.(2x + 3) - 4yi
V i ñi m ñ u tiên (0,b), ta có:
p1 = 2 2
2
a
b
- 2b + 1
T ñó, ta có th t c v Ellipse như sau:
23. Chương I. Các y u t cơ s c a ñ h a
18
Procedure Ellipse(xc,yc,a,b:Integer;Color:Byte);
Var p,a2,b2:real;
x,y:integer;
(*-------------------*)
Procedure VeDiem;
Begin
PutPixel(xc+x,yc+y,Color);
PutPixel(xc-x,yc+y,Color);
PutPixel(xc-x,yc-y,Color);
PutPixel(xc+x,yc-y,Color);
End;
(*-------------------*)
Begin
a2:=a*a;
b2:=b*b;
{Nhanh 1}
x:=0; y:=b;
p:=2*b2/a2 - 2*b + 1;
While (b2/a2)*(x/y)<1 do
Begin
VeDiem;
If p<0 then p:=p + 2*(b2/a2)*(2*x+3)
else Begin
p:=p - 4*y + 2*(b2/a2)*(2*x+3);
y:=y-1;
End;
x:=x+1;
End;
{Nhanh 2}
y:=0; x:=a;
p:=2*(a2/b2) - 2*a + 1;
While (a2/b2)*(y/x)<=1 do
24. Chương I. Các y u t cơ s c a ñ h a
19
Begin
VeDiem;
If p<0 then p:=p + 2*(a2/b2)*(2*y+3)
else Begin
p:=p - 4*x + 2*(a2/b2)*(2*y+3);
x:=x-1;
End;
y:=y+1;
End;
End;
1.6.2. Thu t toán MidPoint
G i ý:
Phương trình Ellipse: 2
2
a
x
+ 2
2
b
y
= 1
Nhánh 1:
p1 = b2
- a2
b +
4
1
.a2
If pi < 0 Then pi+1 = pi + b2
+ 2b2
xi+1
else pi+1 = pi + b2
+ 2b2
xi+1 - 2a2
yi+1
Nhánh 2:
p1 = b2
(xi +
2
1
)2
+ a2
(yi - 1)2
- a2
b2
If pi > 0 Then pi+1 = pi + a2
- 2a2
yi+1
else pi+1 = pi + a2
+ 2b2
xi+1 - 2a2
yi+1
Procedure MidEllipse(xc,yc,a,b:Integer;Color:Byte);
Var p,a2,b2:real;
x,y:Integer;
(*-------------------*)
Procedure VeDiem;
Begin
PutPixel(xc+x,yc+y,Color);
PutPixel(xc-x,yc+y,Color);
PutPixel(xc-x,yc-y,Color);
25. Chương I. Các y u t cơ s c a ñ h a
20
PutPixel(xc+x,yc-y,Color);
End;
(*-------------------*)
Begin
a2:=a*a;
b2:=b*b;
{Nhanh 1}
x:=0; y:=b;
Vediem;
p:=b2 - a2*b + 0.25*a2;
While (b2/a2)*(x/y)<1 do
Begin
x:=x+1;
If p<0 Then p:=p + b2 + 2*b2*x
else begin
y:=y-1;
p:=p + b2 + 2*b2*x - 2*a2*y;
end;
Vediem;
End;
{Nhanh 2}
p:=b2*(x+0.5)*(x+0.5) + a2*(y-1)*(y-1)- a2*b2 ;
While y>0 do
Begin
y:=y-1;
If p>0 Then p:=p + a2 - 2*a2*y
else begin
x:=x+1;
p:=p + a2 + 2*b2*x - 2*a2*y;
end;
Vediem;
End;
26. Chương I. Các y u t cơ s c a ñ h a
21
End;
1.7. PHƯƠNG PHÁP V ð TH HÀM S
1.7.1. Bài toán: V ñ th c a hàm s y = f(x) trên ño n [Min,Max].
*Ý tư ng: Cho x ch y t ñ u ñ n cu i ñ l y các t a ñ (x,f(x)) sau ñó làm tròn
thành s nguyên r i n i các ñi m ñó l i v i nhau.
1.7.2. Gi i thu t:
• Bư c 1: Xác ñ nh ño n c n v [Min,Max].
• Bư c 2: - ð t g c t a ñ lên màn hình (x0,y0).
- Chia t l v trên màn hình theo h s k.
- Ch n bư c tăng dx c a m i ñi m trên ño n c n v .
• Bư c 3: Ch n ñi m ñ u c n v : x = Min, tính f(x)
ð i qua t a ñ màn hình và làm tròn:
x1:=x0 + Round(x.k);
y1:=y0 - Round(y.k);
Di chuy n ñ n (x1,y1): MOVETO(x1,y1);
• Bư c 4:
Tăng x lên v i s gia dx: x:=x + dx;
ð i qua t a ñ màn hình và làm tròn:
x2:=x0 + Round(x.k);
y2:=y0 - Round(y.k);
V ñ n (x2,y2): LINETO(x2,y2);
• Bư c 5: L p l i bư c 4 cho ñ n khi x > Max thì d ng.
Ví d : V ñ th hàm s f(x) = Sin(x)
Uses crt,Graph;
Var dau,cuoi:real;
Gd,Gm:Integer;
Function F(x:real):real;
Begin
F:=Sin(x);
End;
Procedure VeHinhSin(ChukyDau,ChuKyCuoi:real);
27. Chương I. Các y u t cơ s c a ñ h a
22
var x1,y1,x2,y2:integer;
a,x,k:real;
x0,y0:word;
Begin
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
K:=GetMaxX/30;
a:=Pi/180;
x:=ChuKyDau;
x1:=x0 + Round(x*k);
y1:=y0 - Round(F(x)*k);
Moveto(x1,y1);
While x<ChuKyCuoi do
Begin
x:=x+a;
x2:=x0 + Round(x*k);
y2:=y0 - Round(F(x)*k);
LineTo(x2,y2);
End;
End;
BEGIN
Gd:=0;
InitGraph(Gd,Gm,’C:BPBGI’);
Dau:=-4*Pi; cuoi:=4*Pi;
VeHinhSin(Dau,cuoi);
repeat until KeyPressed;
CloseGraph;
END.
BÀI T P
1. Cho hai ñi m A(20,10) và B(25,13). Hãy tính các giá tr Pi, xi, yi m i bư c khi v
ño n th ng AB theo thu t toán Bresenham/MidPoint và k t q a ñi n vào b ng sau:
i 1 2 3 4 5 6
28. Chương I. Các y u t cơ s c a ñ h a
23
Pi ? ? ? ? ? ?
xi ? ? ? ? ? ?
yi ? ? ? ? ? ?
2. Cài ñ t th t c v ño n th ng theo thu t toán Bresenham và MidPoint cho các
trư ng h p h s góc m>1, m<-1, -1<m<0.
3. Vi t th t c LineTo(x,y:Integer); ñ v ño n th ng t v trí hi n th i ñ n ñi m có
t a ñ (x,y).
4. Vi t th t c LineRel(dx,dy:Integer); ñ v ño n th ng t v trí hi n th i ñ n ñi m
m i cách ñi m hi n th i m t kho ng theo tr c x là dx và theo tr c y là dy.
5. Cài ñ t th t c v ñư ng tròn theo thu t toán MidPoint.
6. Vi t th t c Arc(x0,y0,g1,g2:Integer; R:Word); ñ v cung tròn có tâm (x0,y0)
bán kính R v i góc b t ñ u là g1 và góc k t thúc là g2.
7. Vi t th t c Sector(x0,y0,g1,g2:Integer; Rx,Ry:Word); ñ v cung Ellipse có tâm
(x0,y0) bán kính theo tr c X là Rx, bán kính theo tr c Y là Ry v i góc b t ñ u là g1
và góc k t thúc là g2.
8. Vi t th t c DrawPoly(P:Array; n:Byte; xc,yc,R:Word); ñ v m t ña giác ñ u
có n ñ nh lưu trong m ng P n i ti p trong ñư ng tròn tâm (xc,yc) bán kính R.
9. Vi t th t c Circle3P(A,B,C:ToaDo2D); ñ v ñư ng tròn ñi qua 3 ñi m A,B,C.
10. Vi t th t c Arc3P(A,B,C:ToaDo2D); ñ v cung tròn ñi qua 3 ñi m A,B,C.
11. V ñ th các hàm s sau:
y = ax2
+ bx + c, y = ax3
+ bx2
+ cx + d, y = ax4
+ bx3
+ cx2
+ dx + e
y =
dcx
bax
+
+
, y =
edx
cbxax
+
++2
.
12. V các ñư ng cong sau:
y2
= 2px 2
2
a
x
+ 2
2
b
y
= 1 2
2
a
x
- 2
2
b
y
= ±1
Bài t p l n: Vi t chương trình kh o sát và v ñ th các hàm s sơ c p bài t p s 11.
29. CHƯƠNG 2
TÔ MÀU
2.1. GI I THI U V CÁC H MÀU
Giác quan c a con ngư i c m nh n ñư c các v t th xung quanh thông qua các tia
sáng màu t t hơn r t nhi u so v i 2 màu tr ng ñen. Vì v y, vi c xây d ng nên các
chu n màu là m t trong nh ng lý thuy t cơ b n c a lý thuy t ñ h a.
Vi c nghiên c u v màu s c ngoài các y u t v m t v t lý như bư c sóng, cư ng
ñ , còn có 3 y u t khác liên quan ñ n c m nh n sinh lý c a m t ngư i dư i tác ñ ng
c a chùm sáng màu ñi ñ n t v t th là: Hue (s c màu), Saturation (ñ b o hòa),
Lightness (ñ sáng). M t trong nh ng h màu ñư c s d ng r ng rãi ñ u tiên do
A.H.Munsell ñưa ra vào năm 1976, bao g m 3 y u t : Hue, Lightness và Saturation.
Ba mô hình màu ñư c s d ng và phát tri n nhi u trong các ph n c ng là: RGB -
dùng v i các màn hình CRT (Cathode ray bube), YIQ – dùng trong các h th ng ti vi
màu băng t n r ng và CMY - s d ng trong m t s thi t b in màu.
Ngoài ra, còn có nhi u h màu khác như: HSV, HSL, YIQ, HVC, ...
2.1.1.H RGB (Red, Green, Blue)
M t c a chúng ta c m nh n ba màu rõ nh t là Red (ñ ), Green (l c), Blue (xanh).
Vì v y, ngư i ta ñã xây d ng mô hình màu RGB (Red,Green, Blue) là t p t t c các
màu ñư c xác ñ nh thông qua ba màu v a nêu. Chu n này ñ u tiên ñư c xây d ng cho
các h vô tuy n truy n hình và trong các máy vi tính. T t nhiên, không ph i là t t c
các màu ñ u có th bi u di n qua ba màu nói trên nhưng h u h t các màu ñ u có th
chuy n v ñư c.
H này ñư c xem như m t kh i ba chi u v i màu Red là tr c X, màu Green là tr c
Y và màu Blue là tr c Z. M i màu trong h này ñư c xác ñ nh theo ba thành ph n
RGB (Hình 2.1).
30. Chương II. Tô màu
26
Y
Z
X
Black
White
Blue Cyan
Yellow
Green
Red
Magenta
Hình 2.1. H màu RGB
Ví d :
Màu Red là (1, 0, 0)
Màu Blue là (0, 0, 1)
Red + Green = Yellow
Red + Green + Blue = White
2.1.2. H CMY (Cyan, Magenta, Yellow)
H này cũng ñư c xem như m t kh i ba chi u như h RGB. Nhưng h CMY trái
ngư c v i h RGB, ch ng h n:
White có thành ph n (0, 0, 0)
Cyan có thành ph n (1, 0, 0)
Green có thành ph n (1, 0, 1) ...
Sau ñây là công th c chuy n ñ i t h RGB → CMY :
−
=
B
G
R
Y
M
C
1
1
1
2.1.3. H YIQ
H màu này ñư c ng d ng trong truy n hình màu băng t n r ng t i M , do ñó nó
có m i quan h ch t ch v i màn hình raster. YIQ là s thay ñ i c a RGB cho kh
năng truy n phát và tính tương thích v i ti vi ñen tr ng th h trư c. Tín hi u truy n s
d ng trong h th ng NTSC (National Television System Committee).
Sau ñây là công th c bi n ñ i t h RGB thành h YIQ:
31. Chương II. Tô màu
27
−
−−=
B
G
R
Q
I
Y
*
311.0523.0212.0
321.0275.0596.0
114.0587.0299.0
Ma tr n ngh ch ñ o c a ma tr n bi n ñ i RGB thành h YIQ ñư c s d ng cho phép
bi n ñ i t h YIQ thành RGB.
2.1.4. H HSV (Hue, Saturation, Value)
Mô hình màu này còn ñư c g i là h HSB v i B là Brightness (ñ sáng) d a trên cơ
s n n t ng tr c giác v tông màu, s c ñ và s c thái m thu t (Hình 2.2).
Hue có giá tr t 00
→ 3600
S, V có giá tr t 0 → 1
Black
V
Cyan
0.0
Blue
1.0
Green
Red
H
White
S
Yellow
White
Hình 2.2. H màu HSV
Ví d :
Red ñư c bi u di n (00
, 1, 1)
Green ñư c bi u di n (1200
,1,1)
2.1.5. H HSL (Hue, Saturation, Lightness)
H này ñư c xác ñ nh b i t p h p hình chóp sáu c nh ñôi c a không gian hình tr
(hình 2.3).
H
S
1.0 L
0.0
0.5
White
Red
YellowGreen
Cyan
Blue
Black
White
Hình 2.3. H màu HSL
32. Chương II. Tô màu
28
2.2. CÁC THU T TOÁN TÔ MÀU
2.2.1. Bài toán
Cho ña giác S xác ñ nh b i n ñ nh : P1, P2,
..., Pn. Hãy tô màu mi n S.
* Phương pháp t ng quát :
- Tìm hình ch nh t W nh nh t ch a S
(hình 2.4).
- Duy t qua t t c các ñi m P(x, y) ∈ W.
N u P ∈ S thì tô màu ñi m P.
2.2.2. Thu t toán xác ñ nh P ∈∈∈∈ S
2.2.2.1. S là ña giác l i
- L y P ∈ W, n i P v i các ñ nh c a S thì ta ñư c n tam giác : Si= PPiPi+1, v i
Pn+1=P1.
- N u ∑=
n
1
i )dt(S
i
= dt(S) thì P ∈ S.
Ta có công th c tính di n tích c a S:
S= ∑=
++ −
n
i
iiii yxyx
1
11 |)(|
2
1
2.2.2.2. Trư ng h p t ng quát (Thu t toán Jordan)
L y P(x, y) ∈ W, k n a ñư ng th ng ∆P xu t phát t P và không ñi qua các ñ nh
c a ña giác S.
G i S(P) là s giao ñi m c a ∆P v i các biên c a S.
N u S(P) l thì P ∈ S.
* V n ñ còn l i là tìm S(P):
Bư c 1: K n a ñư ng th ng ∆P // 0y và hư ng v phía y>0.
Bư c 2: V i m i c nh Ci= PiPi+1 c a S:
+ N u x=xi thì xét 2 c nh có 1 ñ u là Pi:
N u y<yi thì
S
W
P2
P3
P4
P5
P1
Hình 2.4
33. Chương II. Tô màu
29
• N u c 2 ñ u kia cùng m t phía c a ∆P thì ta tính ∆P c t c 2 c nh.
• Ngư c l i : ∆P c t 1 c nh.
+ Ngư c l i:
• N u x>Max(xi,xi+1) ho c x<Min(xi,xi+1) thì ∆P không c t Ci
• Ngư c l i:
-N u y<= Min(yi, yi+1) thì ∆P c t Ci
-Ngư c l i :
Xét t a ñ giao ñi m (x0, y0) c a ∆P v i Ci
N u y >= y0 thì ∆P không c t Ci. Ngư c l i ∆P c t Ci.
Thu t toán này có th ñư c cài ñ t b ng ño n chương trình như sau:
Type ToaDo=record
x,y:integer;
End;
Mang=array[0..30] of ToaDo;
Function SOGIAODIEM(a:Mang; n:Byte):Integer;
var dem,i,j,s:Integer;
Begin
dem:=0;
for i:=1 to n do { Tim so giao diem }
begin
if i=n then j:=1 else j:=i+1;
if i=1 then s:=n else s:=i-1;
if x=a[i].x then
begin
if y<a[i].y then
if (x<=Min(a[s].x ,a[j].x))OR
(x>=Max(a[s].x,a[j].x)) then dem:=dem+2
else dem:=dem+1;
end
else
if (x>Min(a[i].x,a[j].x)) and
(x<Max(a[j].x,a[i].x)) then
if y<=Min(a[i].y,a[j].y) then dem:=dem+1
else if y <= (x-a[j].x)*(a[i].y-a[j].y)/
(a[i].x-a[j].x)+a[j].y then dem:=dem+1;
end;
SOGIAODIEM:=dem;
End;
34. Chương II. Tô màu
30
2.2.3. Thu t toán tô màu theo dòng quét (Scanline)
ð t x0 = Min(xi), i∈ [1,n].
Bư c 1: K Dy//0y ñi qua x0 (hình 2.5).
Bư c 2: Xác ñ nh các giao ñi m Mi-
(x,y) c a Dy v i các c nh Ci.
N u có c nh Ci = PiPi+1 song song và
trùng v i Dy thì xem như Dy c t Ci t i
2 ñi m Pi và Pi+1.
Bư c 3: S p x p l i các ñi m Mi theo
th t tăng d n ñ i v i yi (ñi m ñ u
tiên có th t là 1).
Bư c 4: Nh ng ñi m n m trên Dy gi a giao ñi m l và giao ñi m ch n liên ti p là
nh ng ñi m n m trong ña giác và nh ng ñi m này s ñư c tô.
Bư c 5: Tăng x0 lên m t Pixel. N u x0 ≤ Max(xi) thì quay l i bư c 1.
2.2.4. Thu t toán tô màu theo v t d u loang
L y P(x,y) ∈ S, tô màu P.
Xét các ñi m lân c n c a P (Hình 2.6).
N u các ñi m lân c n ñó v n còn thu c S và chưa
ñư c tô màu thì tô màu các ñi m lân c n ñó...
Thu t toán trên có th ñư c minh h a b ng th t c
ñ qui:
ProcedureTOLOANG(x,y:Integer; Color:Word);
Begin
If (P(x,y)∈S)and(P(x,y)chưa tô) Then
Begin
PutPixel(x,y,Color);
TOLOANG(x+1,y,Color);
TOLOANG(x-1,y,Color);
x0
xi
x
Dy
y
Hình 2.5
O
X
X
X
X
O
Hình 2.6
35. Chương II. Tô màu
31
TOLOANG(x,y+1,Color);
TOLOANG(x,y-1,Color);
End;
End;
BÀI T P
1. Vi t hàm DienTich(P:Array; n:Byte); ñ tính di n tích c a ña giác l i có n ñ nh
lưu trong m ng P.
2. Vi t hàm KiemTra(x,y:Integer; P:Array; n:Byte):Boolean; ñ ki m tra ñi m
(x,y) n m trong hay ngoài ña giác có n ñ nh ñư c lưu trong m ng P theo hai cách:
- Dùng công th c tính di n tích ña giác (ñ i v i ña giác l i).
- Dùng thu t toán Jordan (ñ i v i ña giác b t kỳ).
2. Vi t chương trình cài ñ t thu t toán tô màu m t ña giác theo thu t toán Scanline.
3. Vi t chương trình cài ñ t thu t toán tô màu m t ña giác theo v t d u loang theo hai
phương án:
a. ð qui.
b. Kh ñ qui.
4. Vi t th t c FillRec(x1,y1,x2,y2:Integer; color:Byte); ñ tô màu hình ch nh t xác
ñ nh b i 2 ñ nh (x1,y1) và (x2,y2).
5. Vi t th t c FillEllipse(x,y,Rx,Ry:Integer; color:Byte); ñ tô màu Ellipse có tâm
(x,y) và bán kính theo hai tr c là Rx và Ry.
6. Vi t th t c FillSector(x,y,Rx,Ry,g1,g2:Integer; color:Byte); ñ tô màu hình qu t
Ellipse có tâm (x,y), bán kính theo hai tr c là Rx và Ry, góc b t ñ u là g1 và góc k t
thúc là g2.
7. Vi t th t c Donut(x,y,Rmin,Rmax:Integer; color:Byte); ñ tô màu hình vành
khăn có tâm (x,y) và bán kính hai ñư ng tròn tương ng là Rmin và Rmax.
Bài t p l n: Xây d ng m t thư vi n ñ h a MYGRAPH tương t như thư vi n
GRAPH.TPU c a Turbo Pascal.
36. CHƯƠNG III
XÉN HÌNH
3.1. ð T V N ð
Cho m t mi n D ⊂ Rn
và F là m t hình trong Rn
(F ⊂ Rn
). Ta g i F ∩ D là hình có
ñư c t F b ng cách xén vào trong D và ký hi u là ClipD(F).
Bài toán ñ t ra là xác ñ nh ClipD(F).
3.2. XÉN ðO N TH NG VÀO VÙNG HÌNH CH NH T C A R2
3.2.1. C nh c a hình ch nh t song song v i các tr c t a ñ
Lúc này:
D =
≤≤
≤≤
∈
maxmin
maxmin
|),( 2
YyY
XxX
Ryx
và F là ño n th ng n i 2 ñi m (x1,y1), (x2,y2) nên phương trình c a F là:
x x x x t
y y y y t
= + −
= + −
1 2 1
1 2 1
( ).
( ).
t ∈ [0,1]
Do ñó, F có th ñư c vi t dư i d ng:
F = {(x,y) ∈ R2
| x = x1 + (x2 -x1).t; y = y1 + (y2 -y1).t; 0 ≤ t ≤ 1}
Khi ñó, giao ñi m c a F và D chính là
nghi m c a h b t phương trình (theo t):
Xmin x1+ (x2 - x1).t Xmax
Ymin 1+ (y2 - y1).t max
0 t 1
≤ ≤
≤ ≤
≤ ≤
y Y
G i N là t p nghi m c a h phương trình
trên.
N u N = ∅ thì ClipD(F) = ∅
N u N ≠ ∅ thì N = [t1, t2] (t1 ≤ t2)
G i P, Q là 2 giao ñi m xác ñ nh b i:
xMin xMax X
y
yMax
yMin
A
B
P
Q
Hình 3.1
37. Chương III. Xén hình
33
Px x x x t
Py y y y t
= + −
= + −
1 2 1 1
1 2 1 1
( ).
( ).
Qx x x x t
Qy y y y t
= + −
= + −
1 2 1 2
1 2 1 2
( ).
( ).
thì: ClipD(F) = PQ (Hình 3.1)
3.2.1.1. Thu t toán Cohen - Sutherland
• Chia m t ph ng ra làm 9 vùng, m i vùng ñánh m t mã nh phân 4 bit (hình 3.2).
Bit 1: Qui ñ nh vùng n m bên trái c a s
Bit 2: Qui ñ nh vùng n m bên ph i c a s
Bit 3: Qui ñ nh vùng n m bên dư i c a s
Bit 4: Qui ñ nh vùng n m bên trên c a s
• Xét ñi m P ∈ R2
:
Pleft =
<
laûiNgæåüc0
minPnãúu x X1
PRight =
>
laûiNgæåüc0
maxPnãúu x X1
PBelow =
<
laûiNgæåüc0
minPnãúu y Y1
PAbove =
>
laûiNgæåüc0
maxPnãúu y Y1
• Xét ño n th ng AB, ta có các trư ng h p sau:
i/ N u Mã(A) = Mã(B) = 0000 thì AB ∈ D ⇒ ClipD(F) = AB
ii/ N u Mã(A) AND Mã(B) ≠ 0000 thì ño n AB n m hoàn toàn bên ngoài hình
ch nh t ⇒ ClipD(F) = ∅∅∅∅
Chú ý: Phép toán AND là phép toán Logic gi a các bit.
iii/ N u (Mã(A) AND Mã(B) = 0000) và (Mã(A) ≠ 0000 ho c Mã(B) ≠ 0000) thì:
Gi s Mã(A) ≠ 0000 ⇔ A n m ngoài hình ch nh t.
♦ N u Aleft = 1 : thay A b i ñi m n m trên ño n AB và c t c nh trái (n i dài)
c a hình ch nh t.
100
0
000
0
101
0
001
0
011
0
010
0
010
1
000
1
100
1
Hình 3.2
38. Chương III. Xén hình
34
♦ N u Aright = 1: thay A b i ñi m n m trên ño n AB c t c nh ph i (n i dài) c a
hình ch nh t.
♦ N u ABelow = 1: thay A b i ñi m n m trên ño n AB và c t c nh dư i (n i
dài) c a hình ch nh t.
♦ N u AAbove = 1: thay A b i ñi m n m trên ño n AB và c t c nh trên (n i
dài) c a hình ch nh t.
Chú ý: Quá trình này ñư c l p l i: Sau m i l n l p, ta ph i tính l i mã c a A.
N u c n, ph i ñ i vai trò c a A và B ñ ñ m b o A luôn luôn n m bên ngoài hình ch
nh t. Quá trình s d ng khi x y ra m t trong 2 trư ng h p: i/ ho c ii/
3.2.1.2. Thu t toán chia nh phân
• Ý tư ng c a thu t toán này tương t như thu t toán tìm nghi m b ng phương pháp
chia nh phân.
• M nh ñ : Cho M: trung ñi m c a ño n AB, Mã(A) ≠ 0000, Mã(B) ≠ 0000, Mã(M)
≠ 0000 thì ta có:
[Mã(A) AND Mã(M)] ≠ 0000
ho c [Mã(M) AND Mã(B)] ≠ 0000.
Ý nghĩa hình h c c a m nh ñ : N u c ba ñi m A, B, M ñ u ngoài hình ch
nh t thì có ít nh t m t ño n hoàn toàn n m ngoài hình ch nh t.
• Ta phát th o thu t toán như sau:
i/ N u Mã(A) = 0000 và Mã(B) = 0000 thì ClipD(F) = AB
ii/ N u Mã(A) AND Mã(B) ≠ 0000 thì ClipD(F) = ∅∅∅∅
iii/ N u Mã(A) = 0000 và Mã(B) ≠ 0000 thì:
P:=A; Q:=B;
Trong khi |xP -xQ| + |yP - yQ| ≥ 2 thì:
♦ L y trung ñi m M c a PQ;
♦ N u Mã(M) ≠ 0000 thì Q:= M.
39. Chương III. Xén hình
35
Ngư c l i: P:= M.
⇒⇒⇒⇒ ClipD(F) = AP
iv/ N u Mã(A) ≠ 0000 và Mã(B) = 0000 thì: ð i vai trò c a A, B và áp d ng ii/
v/ N u Mã(A) ≠ 0000 ≠ Mã(B) và [Mã(A) AND Mã(B)]= 0000 thì:
P:=A; Q:=B;
L y M: trung ñi m PQ;
Trong khi Mã(M) ≠ 0000 và |xP - xQ| + |yP - yQ| ≥ 2 thì:
♦ N u Mã(M) AND Mã(Q) ≠ 0000 thì Q:=M. Ngư c l i P:=M.
♦ L y M: trung ñi m PQ.
N u Mã(M) ≠ 0000 thì ClipD(F) = ∅∅∅∅ . Ngư c l i, áp d ng ii/ ta có:
ClipD(MA) = MA1
ClipD(MB) = MB1
Suy ra: ClipD
(F) = A1
B1
3.2.1.3. Thu t toán Liang - Barsky
ð t ∆x = x2 - x1 ∆y = y2 - y1
p1 = - ∆x q1 = x1 - xMin
p2 = ∆x q2 = xMax - x1
p3 = - ∆y q3 = y1 - yMin
p4 = ∆y q4 = yMax - y1
thì h b t phương trình giao ñi m c a F và D có th vi t l i:
≤≤
=≤ 1..4k,Q.tP kk
10 t
Xét các trư ng h p sau:
i/ ∃k: Pk = 0 và Qk < 0: ( ðư ng th ng song song v i các biên và n m ngoài vùng
hình ch nh t )
40. Chương III. Xén hình
36
⇒ ClipD(F) = ∅∅∅∅
ii/ ∀k ∈ {1,2,3,4}: Pk ≠ 0 ho c Qk ≥ 0:
ð t K1 = {k | Pk > 0 }
K2 = {k | Pk < 0 }
u1 = Max({
k
k
P
Q
| k ∈ K2} ∪ {0})
u2 = Min({
k
k
P
Q
| k ∈ K1} ∪ {1})
N u u1 > u2 thì ClipD(F) = ∅∅∅∅
Ngư c l i: G i P, Q là 2 ñi m th a
∆+=
∆+=
1
1
1
1
uyyPy
uxxPx
.
.
và
∆+=
∆+=
2
2
1
1
uyyQy
uxxQx
.
.
thì ClipD(F) = PQ
3.2.2. Khi c nh c a vùng hình ch nh t t o v i tr c hoành m t góc αααα∈∈∈∈(0,ΠΠΠΠ/2)
Ta dùng phép quay tr c t a ñ ñ ñưa bài toán v trư ng h p các c nh c a hình
ch nh t song song v i các tr c t a ñ (hình 3.3).
G i R là ma tr n quay c a phép ñ i tr c, ta có:
X
Y
min
min
= R.
X
Y
min
min
X
Y
max
max
= R.
X
Y
max
max
v i R =
cos( ) sin( )
sin( ) cos( )
α α
α α−
α
xO
y
Hình 3.3
41. Chương III. Xén hình
37
3.3. XÉN ðO N TH NG VÀO HÌNH TRÒN
Gi s ta có ñư ng tròn tâm O(xc,yc) bán kính R và ño n th ng c n xén là AB v i
A(x1,y1), B(x2,y2) (Hình 3.4).
* Thu t toán:
• Tính d(O,AB)
• Xét các trư ng h p:
i/ N u d > R thì ClipD(F) = ∅∅∅∅
ii/ N u d = R thì ClipD(F) = A0 v i A0 là
chân ñư ng vuông góc h t O xu ng AB.
iii/ N u d < R thì xét các trư ng h p sau:
♦ (OA < R) AND (OB < R) thì ClipD(F) = AB
♦ N u m t ñi m n m trong và ñi m kia n m ngoài hình tròn, ch ng h n
OA<R và OB>R thì ClipD(F) = AI v i I là giao ñi m duy nh t gi a AB
và ñư ng tròn.
♦ (OA > R) AND (OB > R) thì ClipD(F) = IJ v i I, J là hai giao ñi m c a
AB v i ñư ng tròn.
Sau ñây là phương pháp tìm giao ñi m gi a ño n th ng và ñư ng tròn:
◊ Phương trình ñư ng tròn: (x - xc)2
+ (y - yc)2
= R2
(1)
◊ Phương trình ño n AB:
≤≤
−+=
−+=
10
).12(1
).12(1
λ
λ
λ
yyyy
xxxx
(2)
◊ Thay (2) vào (1) ta suy ra: λ =
b
bcaa −±− 2
Trong ñó:
a = ∆x.(x1 - xc) + ∆y.(y1 - yc)
b = (∆x)2
+ (∆y)2
c = (x1 - xc)2
+ (y1 - yc)2
- R2
A
B
Hình 3.4
42. Chương III. Xén hình
38
∆x = x2 - x1
∆y = y2 - y1
◊ D a vào ñi u ki n 0 ≤ λ ≤ 1 ñ ch n giao ñi m.
3.4. XÉN ðƯ NG TRÒN VÀO HÌNH CH NH T CÓ CÁC C NH SONG
SONG V I TR C T A ð
Lúc này:
D = {(x,y)| xMin ≤ x ≤ xMax ; yMin ≤ y ≤ yMax }
F = { (x,y)| (x - xC)2
+ (y - yC)2
= R2
}
*Trư c h t, ta ki m tra các trư ng h p ñ c bi t sau:
i/ N u xMin ≤ xC -R; xC +R ≤ xMax;
yMin ≤ yC -R; yC +R ≤ yMax;
thì ClipD(F) = F (Hình 3.5)
ii/ N u xC +R < xMin
ho c xC -R > xMax
ho c yC +R < yMin
ho c yC - R > yMax
thì ClipD(F) = ∅∅∅∅ (Hình 3.6)
*Xét trư ng h p còn l i: Tìm các giao ñi m c a F và D. S p x p các giao ñi m ñó
theo chi u ngư c kim ñ ng h .
• Các cung tròn ñư c t o b i 2 giao ñi m liên ti p s hoàn toàn n m trong D
ho c hoàn toàn n m bên ngoài D.
• ð xác ñ nh các cung này n m trong hay ngoài D, ta ch c n l y trung ñi m
M c a cung ñó. N u M ∈ D thì cung ñó n m trong D, ngư c l i thì nó n m
ngoài D.
Hình
3.5
Hình
3.6
43. Chương III. Xén hình
39
3.5. XÉN ðA GIÁC VÀO HÌNH CH NH T
Hình 3.7. Xén ña giác vào hình ch nh t
Thu t toán SutherLand - Hodgman
i/ N u t t c các ñ nh c a ña giác ñ u n m trong hình ch nh t thì hình c n xén
chính là ña giác và bài toán coi như ñã ñư c gi i quy t.
Hình 3.8. Các trư ng h p c n xét
ii/ Trư ng h p ngư c l i:
- Xu t phát t m t ñ nh n m ngoài hình ch nh t, ta ch y theo d c biên c a ña
giác. V i m i c nh c a ña giác, ta có các trư ng h p sau:
N u c hai ñ nh ñ u n m ngoài hình ch nh t thì:
N u Ma(Ai) and Ma(Ai+1) ≠ 0000 thì không lưu ñ nh
Ngư c l i thì lưu hai giao ñi m.
Ai ngoài, Ai+1 trong: lưu giao ñi m P và Ai+1.
C hai ñ nh ñ u n m trong hình ch nh t: lưu Ai và Ai+1.
Ai trong, Ai+1 ngoài: lưu Ai và giao ñi m P.
Ai
Ai+
Ai+
Ai
Ai
Ai+
Ai+
Ai
Ai
Ai+
44. Chương III. Xén hình
40
- Sau khi duy t qua t t c các c nh c a ña giác thì ta có ñư c m t dãy các ñ nh m i
phát sinh: B1, B2, ..., Bn
N u trong dãy các ñ nh m i này có hai ñ nh liên ti p không n m trên cùng m t
c nh c a hình ch nh t , gi s hai ñ nh ñó là Bi và Bi+1 thì ta ñi d c các c nh c a hình
ch nh t t Bi ñ n Bi+1 ñ tìm t t c các ñ nh c a hình ch nh t n m trong ña giác r i
b sung chúng vào gi a Bi và Bj.
T p ñ nh m i tìm ñư c chính là ña giác xén ñư c.
- N u t p ñ nh m i này là r ng: N u có m t ñ nh c a hình ch nh t n m trong ña
giác thì hình xén ñư c chính là toàn b hình ch nh t. Ngư c l i, hình xén ñư c là
r ng.
BÀI T P
1. Vi t hàm MA(P:ToaDo):Byte; ñ ñánh mã cho ñi m P.
2. Cài ñ t thu t toán xén m t ño n th ng vào m t hình ch nh t theo các thu t toán:
Liang-Barsky, Cohen-Sutherland, chia nh phân.
3. Cài ñ t thu t toán xén m t ño n th ng vào m t hình tròn.
4.Cài ñ t thu t toán xén m t ña giác vào m t vùng hình ch nh t.
45. CHƯƠNG IV
CÁC PHÉP BI N ð I
4.1. CÁC PHÉP BI N ð I TRONG M T PH NG
4.1.1. Cơ s toán h c
Phép bi n ñ i Affine 2D s bi n ñi m P(x,y) thành ñi m Q(x’,y’) theo h phương
trình sau:
x’ = Ax + Cy + trx
y’ = Bx + Dy + try
Dư i d ng ma tr n, h này có d ng:
(x’ y’) = (x y).
DC
BA
+ (trx try)
Hay vi t g n hơn: X’ = X.M + tr
v i X’=(x’,y’); X=(x,y); tr=(trx,try) - vector t nh ti n;
M =
DC
BA
- ma tr n bi n ñ i.
4.1.1.1. Phép ñ ng d ng
Ma tr n c a phép ñ ng d ng là:
M =
A
D
0
0
⇔
x Ax
y Dy
'
'
=
=
Cho phép ta phóng to hay thu nh hình theo m t hay hai chi u.
4.1.1.2. Phép ñ i x ng
ðây là trư ng h p ñ c bi t c a phép ñ ng d ng v i A và D ñ i nhau.
−
1 0
0 1
ñ i x ng qua Oy
46. Chương IV. Các phép bi n ñ i
.42
1
1
h
g
1 0
0 1−
ñ i x ng qua Ox
−
−
1 0
0 1
ñ i x ng qua g c t a ñ
4.1.1.3. Phép quay
Ma tr n t ng quát c a phép quay là R =
− )()(
)()(
αα
αα
CosSin
SinCos
Chú ý:
• Tâm c a phép quay ñư c xét ñây là g c t a ñ .
• ð nh th c c a ma tr n phép quay luôn luôn b ng 1.
4.1.1.4. Phép t nh ti n
Bi n ñ i (x,y) thành (x’,y’) theo công th c sau
x’ = x + M
y’ = y + N
ð thu n ti n bi u di n dư i d ng ma tr n, ta có th bi u di n các t a ñ dư i d ng
t a ñ thu n nh t (Homogen):
(x y 1).
1 0 0
0 1 0
1M N
= (x + M y + N 1)
4.1.1.5. Phép bi n d ng
Ma tr n t ng quát là: M =
Trong ñó:
g = 0: bi n d ng theo tr c x.
h = 0: bi n d ng theo tr c y.
4.1.1.6. H p c a các phép bi n ñ i
Có ma tr n bi n ñ i là tích c a các ma tr n c a các phép bi n ñ i.
47. Chương IV. Các phép bi n ñ i
.43
Ví d : Phép quay quanh m t ñi m b t kỳ trong m t ph ng có th th c hi n b i tích
c a các phép bi n ñ i sau:
° Phép t nh ti n tâm quay ñ n g c t a ñ .
° Phép quay v i góc ñã cho.
° Phép t nh ti n k t qu v tâm quay ban ñ u.
Như v y, ma tr n c a phép quay quanh m t ñi m b t kỳ ñư c th c hi n b i tích
c a ba phép bi n ñ i sau:
1 0 0
0 1 0
1− −
M N
.
Cos Sin
Sin Cos
( ) ( )
( ) ( )
α α
α α
0
0
0 0 1
−
.
1 0 0
0 1 0
1M N
4.2. Ví d minh h a
Vi t chương trình mô ph ng phép quay m t tam giác quanh g c t a ñ .
Uses crt,Graph;
Type ToaDo=Record
x,y:real;
End;
var k,Alpha,goc:real;
P,PP,PPP,P1,P2,P3:ToaDo;
x0,y0:word;
ch:char;
Procedure VeTruc;
Begin
Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);
Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);
End;
Procedure VeHinh(P1,P2,P3:ToaDo);
Begin
Line(x0+Round(P1.x*k),y0-Round(P1.y*k),
x0+Round(P2.x*k),y0- Round(P2.y*k));
Line(x0+Round(P2.x*k),y0-Round(P2.y*k),
48. Chương IV. Các phép bi n ñ i
.44
x0+Round(P3.x*k),y0- Round(P3.y*k));
Line(x0+Round(P3.x*k),y0-Round(P3.y*k),
x0+Round(P1.x*k),y0- Round(P1.y*k));
End;
Procedure QuayDiem(P:ToaDo;Alpha:real; var PMoi:ToaDo);
Begin
PMoi.x:=P.x*cos(Alpha)-P.y*sin(Alpha);
PMoi.y:=P.x*sin(Alpha)+P.y*cos(Alpha);
End;
Procedure QuayHinh(P1,P2,P3:ToaDo;Alpha:real;
var P1Moi,P2Moi,P3Moi:ToaDo);
Begin
QuayDiem(P1,Alpha,P1Moi);
QuayDiem(P2,Alpha,P2Moi);
QuayDiem(P3,Alpha,P3Moi);
End;
BEGIN
ThietLapDoHoa;
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
k:=GetMaxX/50;
Vetruc;
P.x:=5; P.y:=3; PP.x:=2; PP.y:=6; PPP.x:=6; PPP.y:=-4;
P1.x:=5; P1.y:=3; P2.x:=2; P2.y:=6; P3.x:=6; P3.y:=-4;
Alpha:=0; goc:=Pi/180;
SetWriteMode(XORPut);
VeHinh(P,PP,PPP);
Repeat
ch:=readkey;
if ord(ch)=0 then ch:=readkey;
case Upcase(ch) of
#75: Begin
49. Chương IV. Các phép bi n ñ i
.45
VeHinh(P1,P2,P3);
Alpha:=Alpha-goc;
QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
VeHinh(P1,P2,P3);
End;
#77: Begin
VeHinh(P1,P2,P3);
Alpha:=Alpha+goc;
QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
VeHinh(P1,P2,P3);
End;
End;
Until ch=#27;
CloseGraph;
END.
4.2. CÁC PHÉP BI N ð I TRONG KHÔNG GIAN
4.2.1. Các h tr c t a ñ
ð ñ nh v m t ñi m trong không gian, ta có th ch n nhi u h tr c t a ñ :
X
Y
Z
O
Y
Z
H tr c ti p H gián ti p
Hình 4.1
• H t a ñ tr c ti p : n u tay ph i c m tr c Z sao cho ngón cái hư ng theo
chi u dương c a tr c Z thì b n ngón còn l i s quay t tr c X sang tr c Y (Qui t c
bàn tay ph i).
50. Chương IV. Các phép bi n ñ i
.46
• H t a ñ gián ti p : ngư c l i (Qui t c bàn tay trái).
Thông thư ng, ta luôn luôn ñ nh v m t ñi m trong không gian qua h tr c ti p.
Trong h t a ñ tr c ti p, ta chia ra làm 2 lo i sau:
O
X
Y
Z
P(x,y,z)
X
O
Y
P(R,θ,φ)
Z
θ
φ
R
H t a ñ Descarter H c u
Hình 4.2
Ta có công th c chuy n ñ i t a ñ t h này sang h khác:
x = R.Cos(θθθθ).Cos(ΦΦΦΦ)
y = R.Sin(θθθθ).Cos(ΦΦΦΦ)
z = R.Sin(ΦΦΦΦ)
R2
= x2
+ y2
+ z2
ð thu n ti n cho vi c tính toán, t t c các ñi m trong không gian ñ u ñư c mô t
dư i d ng ma tr n 1x4, t c là (x,y,z,1). Vì v y, t t c các phép bi n ñ i trong không
gian ñ u ñư c bi u di n b i các ma tr n vuông 4x4 (Ma tr n Homogen).
4.2.2. Các công th c bi n ñ i
Phép bi n ñ i Affine 3D có d ng: X’=X.M + tr
v i X’=(x’,y’,z’); X=(x,y,z); M - ma tr n bi n ñ i; tr=(trx,try,trz) - vector
t nh ti n
4.2.2.1. Phép thay ñ i t l
M =
A
B
C
0 0 0
0 0 0
0 0 0
0 0 0 1
⇔
x A x
y B y
z C z
' .
' .
' .
=
=
=
51. Chương IV. Các phép bi n ñ i
.47
4.2.2.2. Phép ñ i x ng
Mz =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
−
ñ i x ng qua m t (XY)
My=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
−
ñ i x ng qua m t (XZ)
Mx =
−
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
ñ i x ng qua m t (YZ)
4.2.2.3. Phép t nh ti n
M =
1 0 0 0
0 1 0 0
0 0 1 0
1M N P
⇔
x x M
y y N
z z P
'
'
'
= +
= +
= +
4.2.2.4. Phép quay
Ta nh n th y r ng, n u phép quay quay quanh m t tr c nào ñó thì t a ñ c a v t
th t i tr c ñó s không thay ñ i. Do ñó, ta có ma tr n c a các phép quay như sau:
RZ =
−
1000
0100
00)()(
00)()(
θθ
θθ
CosSin
SinCos
RX =
−
1000
0)()(0
0)()(0
0001
θθ
θθ
CosSin
SinCos
52. Chương IV. Các phép bi n ñ i
.48
RY =
−
1000
0)(0)(
0010
0)(0)(
θθ
θθ
CosSin
SinCos
Chú ý:Tích c a 2 ma tr n nói chung không giao hoán nên k t qu c a 2 phép quay liên
ti p tùy thu c vào th t th c hi n tích s .
Ví d : RX.RY ≠ RY.RX
4.2.3. Ma tr n ngh ch ñ o
ð nh nghĩa: Hai ma tr n ñư c g i là ngh ch ñ o c a nhau n u tích s c a chúng là
ma tr n ñơn v .
Ma tr n ngh ch ñ o c a ma tr n M ký hi u là M-1
Ví d :
1 2 3
1 3 3
1 2 4
.
6 2 3
1 1 0
1 0 1
− −
−
−
=
1 0 0
0 1 0
0 0 1
Ngư i ta ch ng minh ñư c r ng: T t c các ma tr n c a các phép bi n ñ i ñã nêu
trên ñ u có ma tr n ngh ch ñ o.
• Ma tr n ngh ch ñ o c a phép t nh ti n có ñư c b ng cách thay M, N, P b ng -
M, -N, -P.
• Ma tr n ngh ch ñ o c a phép thay ñ i t l có ñư c b ng cách thay A, B, C b ng
1/A, 1/B, 1/C.
• Ma tr n ngh ch ñ o c a phép quay có ñư c b ng cách thay góc θθθθ b ng -θθθθ .
4.3. CÁC PHÉP CHI U C A V T TH TRONG KHÔNG GIAN LÊN M T PH NG
4.3.1. Phép chi u ph i c nh (Perspective)
Phép chi u này cho hình nh gi ng như khi nhìn v t th .
ð tìm hình chi u P’(y’,z’) c a P(x,y,z), ta n i P v i m t (tâm chi u). Giao ñi m
c a ñư ng này v i m t quan sát chính là P’ (hình 4.3).
Gi s P n m phía trư c m t, t c là P.x < E.
53. Chương IV. Các phép bi n ñ i
.49
Y
Z
X
(E,0,0)
Maét
y '
z '
P '
P(x,y,z)
Maët phaúng chieáu
Hình 4.3
Phương trình c a tia ñi qua m t và P là: r(t) = (E,0,0).(1-t) + (x,y,z).t (*)
Giao ñi m v i m t ph ng quan sát có thành ph n x’ = 0.
Do thành ph n x’ c a tia r là E.(1-t) + x.t = 0 nên t =
1
1− x E/
. Thay t vào (*) ta
tính ñư c:
y’ =
y
x E1− /
va z’ =
z
x E1− /
NH N XÉT
i/ Phép chi u ph i c nh không gi nguyên hình d ng c a v t th .
ii/ Ch có nh ng ñư ng th ng song song v i m t ph ng chi u thì m i song song
v i nhau.
iii/ Phép chi u ph i c nh ñư c qui ñ nh b i 5 bi n:
• Hư ng c a m t ph ng chi u so v i v t th .
• ð cao c a tâm chi u so v i v t th .
• Kho ng cách t tâm chi u ñ n v t th (R).
• Kho ng cách t m t ph ng chi u ñ n tâm chi u (D).
• ð d ch chuy n ngang c a tâm chi u so v i v t th .
Chú ý: V i t a ñ c u, ta ch c n 4 tham s : R, ΦΦΦΦ, θθθθ, D.
54. Chương IV. Các phép bi n ñ i
.50
4.3.2. Phép chi u song song (Parallel)
Phép chi u này có tâm chi u vô c c và y’=y, z’=z.(Hình 4.4)
Tính song song ñư c b o toàn.
Maët phaúng chieáu
Taâm chieáu (∝)
A
B
A'
B'
Hình 4.4
4.4. CÔNG TH C C A CÁC PHÉP CHI U LÊN MÀN HÌNH
Khi quan sát m t v t th trong không gian dư i m t góc ñ nào ñó, ta có 2 kh
năng ch n l a:
• ði m nhìn (màn hình) ñ ng yên và v t th di ñ ng.
• V t th ñ ng yên và ñi m nhìn s ñư c b trí thích h p.
Ta thư ng ch n gi i pháp th hai vì nó sát v i th c t hơn.
X
φ
O
θ
Z0
Y0
Z
Y
O'
X0
Maøn hình
YE XE
Hình 4.5
Khi quan sát m t v t th b t kỳ trong không gian, ta ph i tuân th các nguyên t c
sau (hình 4.5):
• V t th ph i ñư c chi u lên m t h tr c ti p (O,X,Y,Z).
55. Chương IV. Các phép bi n ñ i
.51
• Con m t ph i n m g c c a m t h gián ti p th hai (O’,X0,Y0,Z0)
• Màn hình là m t ph ng vuông góc v i ñư ng th ng OO’.
• Tr c Z0 c a h quan sát ch ñ n g c O.
N u dùng h t a ñ c u ñ ñ nh v m t c a ngư i quan sát thì ta d dàng thay ñ i
góc ng m b ng cách thay ñ i góc θθθθ và ΦΦΦΦ.
Bây gi , ta kh o sát phép bi n ñ i mà v t th (X,Y,Z) ph i ch u ñ cho nó trùng
v i h quan sát (X0,Y0,Z0) ñ cu i cùng t o ra h t a ñ màn hình (Xe,Ye).
Bư c 1: T nh ti n g c O thành O’ (hình 4.6).
X
θ
O
φ Y
Z
Z1
X1
Y1
O'
Hình 4.6
Ma tr n c a phép t nh ti n (L y ngh ch ñ o):
A=
1 0 0 0
0 1 0 0
0 0 1 0
1− − −
M N P
=
1 0 0 0
0 1 0 0
0 0 1 0
1− − −
R Cos Cos R Sin Cos R Sin. ( ). ( ) . ( ). ( ) . ( )θ φ θ φ φ
và h (X,Y,Z) bi n ñ i thành h (X1,Y1,Z1).
Bư c 2: Quay h (X1,Y1,Z1) m t góc -θθθθ‘ (θθθθ‘=900
- θθθθ) quanh tr c Z1 theo chi u kim
ñ ng h . Phép quay này làm cho tr c âm c a Y1 c t tr c Z (hình 4.7).
Ta g i Rz là ma tr n t ng quát c a phép quay quanh tr c Z. Vì ñây là phép quay h
tr c nên ph i dùng ma tr n ngh ch ñ o R-1
z.
56. Chương IV. Các phép bi n ñ i
.52
Rz =
Cos a Sin a
Sin a Cos a
( ) ( )
( ) ( )
0 0
0 0
0 0 1 0
0 0 0 1
−
R
-1
z =
Cos a Sin a
Sin a Cos a
( ) ( )
( ) ( )
−
0 0
0 0
0 0 1 0
0 0 0 1
ta thay góc a = -θθθθ‘ . Theo các phép toán lư ng giác:
Sin(-θθθθ') = -Sin(θθθθ') = -Sin(900
- θθθθ) = -Cos(θθθθ)
Cos(-θθθθ') = Cos(θθθθ') = Cos(900
-θθθθ) = Sin(θθθθ)
θ
X2
O'
φ
O
Y
Y2
Z2Z
X
θ'
Hình 4.7
Nên ma tr n c a phép quay tìm ñư c s có d ng:
B =
Sin Cos
Cos Sin
( ) ( )
( ) ( )
θ θ
θ θ
0 0
0 0
0 0 1 0
0 0 0 1
−
và h (X1,Y1,Z1) bi n ñ i thành h (X2,Y2,Z2).
Bư c 3: Quay h (X2,Y2,Z2) m t góc 900
+ ΦΦΦΦ quanh tr c X2. Phép bi n ñ i này s
làm cho tr c Z2 hư ng ñ n g c O (hình 4.8).
Ta có:
Rx =
−
1000
0)()(0
0)()(0
0001
aCosaSin
aSinaCos
57. Chương IV. Các phép bi n ñ i
.53
X3
Z3
θ
X
O
Z
O'
φ
θ'
Y
Y3
Hình 4.8
R-1
x =
1 0 0 0
0 0
0 0
0 0 0 1
Cos a Sin a
Sin a Cos a
( ) ( )
( ) ( )
−
Thay góc a = 900
+ ΦΦΦΦ , ta có: Cos(900
+ ΦΦΦΦ) = -Sin(ΦΦΦΦ) và Sin(900
+ ΦΦΦΦ) = Cos(ΦΦΦΦ)
nên ma tr n tìm ñư c s có d ng:
C =
1 0 0 0
0 0
0 0
0 0 0 1
− −
−
Sin Cos
Cos Sin
( ) ( )
( ) ( )
φ φ
φ φ
Lúc này, h (X2,Y2,Z2) bi n ñ i thành h (X3,Y2,Z3).
Bư c 4: Bi n ñ i h tr c ti p (X3,Y3,Z3) thành h gián ti p (hình 4.9).
Trong bư c này, ta ph i ñ i hư ng tr c X3 b ng cách ñ i d u các ph n t c a
c t X. Ta nh n ñư c ma tr n:
D =
−
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
và h (X3,Y3,Z3) bi n ñ i thành h (X0,Y0,Z0).
58. Chương IV. Các phép bi n ñ i
.54
O
X
θ
Z0 O'
φ
X0
θ'
Y0
Y
Z
Hình 4.9
TÓM L I
Các ñi m trong không gian s nh n trong h quan sát m t t a ñ có d ng:
(x0 ,y0 ,z0 ,1) = (x y z 1).A.B.C.D
G i T = A.B.C.D, ta tính ñư c:
T =
− − −
− −
−
sin( ) ( ). ( ) ( ). ( )
( ) ( ). ( ) ( ). ( )
( ) ( )
θ θ φ θ φ
θ θ φ θ φ
φ φ
Cos Sin Cos Cos
Cos Sin Sin Sin Cos
Cos Sin
R
0
0
0 0
0 0 1
Cu i cùng ta có:
(x0 ,y0 ,z0 ,1) = (x y z 1).T
hay:
x0 = -x.Sin(θθθθ) + y.Cos(θθθθ)
y0 = -x.Cos(θθθθ).Sin(ΦΦΦΦ) - y.Sin(θθθθ).Sin(ΦΦΦΦ) + z.Cos(ΦΦΦΦ)
z0 = -x.Cos(θθθθ).Cos(ΦΦΦΦ) - y.Sin(θθθθ).Cos(ΦΦΦΦ) - z.Sin(ΦΦΦΦ) + R
* Bây gi ta chi u nh c a h quan sát lên màn hình.
1. Phép chi u ph i c nh
Cho ñi m P(x,y,z) và hình chi u P’(x0,y0,z0) c a nó trên m t ph ng.
G i D là kho ng cánh t m t ph ng ñ n m t (g c t a ñ ). (Hình 4.10)
59. Chương IV. Các phép bi n ñ i
.55
O
X0
Z0
Y0
P(x0,y0,z0)
P'(xE,yE,zE)
Maøn hình
Z0
Y0
Maøn hình
O
O
P(x0,y0,z0)
P(x0,y0,z0)
D
yE
X0
xE
Hình 4.10
Xét các tam giác ñ ng d ng, ta có:
xE/D = x0/z0 và yE/D = y0/z0
⇒ xE
= D.x0
/z0
và yE
= D.y0
/z0
Chú ý: z0 bao hàm vi c phóng to hay thu nh v t th .
2. Phép chi u song song
T a ñ quan sát (x0,y0,z0) và t a ñ màn hình th a mãn công th c:
xE
= x0
và yE
= y0
60. Chương IV. Các phép bi n ñ i
.56
Maét
Maøn hìnhMaøn hình
Phoùng to Thu nhoû
Vaät theå
Hình 4.11
K T LU N
Có 4 giá tr nh hư ng ñ n phép chi u v t th 3D là: các góc θθθθ , ΦΦΦΦ , kho ng cách R
t O ñ n O’ và kho ng cách D t O’ ñ n m t ph ng quan sát.
C th :
• Tăng gi m θθθθ s quay v t th trong m t ph ng (XY).
• Tăng gi m ΦΦΦΦ s quay v t th lên xu ng.
• Tăng gi m R ñ quan sát v t t xa hay g n.
• Tăng gi m D ñ phóng to hay thu nh nh.
4.5. PH L C
T o UNIT DOHOA3D (DOHOA3D.PAS).
UNIT DOHOA3D;
INTERFACE
USES graph,crt;
{ Cac hang de quay hinh }
Const IncAng = 5; {Tang goc}
Type ToaDo3D=Record
x,y,z:real;
End;
ToaDo2D=Record
x,y:integer;
End;
61. Chương IV. Các phép bi n ñ i
.57
PhepChieu = (PhoiCanh,SongSong);
VAR R,d,theta,phi : real;
aux1,aux2,aux3,aux4 : real;
aux5,aux6,aux7,aux8 : real;
projection : PhepChieu;
xproj,yproj : real;
Obs,O : ToaDo3D;
PE,PC : ToaDo2D;
{ cac bien dung quay hinh }
ch : char;
PROCEDURE ThietLapDoHoa;
PROCEDURE KhoiTaoPhepChieu;
PROCEDURE Chieu(P :ToaDo3D);
PROCEDURE VeDen(P :ToaDo3D);
PROCEDURE DiDen(P :ToaDo3D);
PROCEDURE TrucToaDo;
PROCEDURE DieuKhienQuay; {dung de quay hinh}
IMPLEMENTATION
Procedure ThietLapDoHoa;
var gd,gm:integer;
Begin
Gd:=0;
InitGraph(gd,gm,'C:BPBGI');
End;
PROCEDURE KhoiTaoPhepChieu;
VAR th,ph :real;
BEGIN
th := pi*theta/180;
ph := pi*phi/180;
aux1 := sin(th);
aux2 := sin(ph);
aux3 := cos(th);
62. Chương IV. Các phép bi n ñ i
.58
aux4 := cos(ph);
aux5 := aux3*aux2;
aux6 := aux1*aux2;
aux7 := aux3*aux4;
aux8 := aux1*aux4;
PC.x := getmaxx div 2;
PC.y := getmaxy div 2;
END;
PROCEDURE Chieu(P :ToaDo3D);
BEGIN
Obs.x := -P.x*aux1 + P.y*aux3 ;
Obs.y := -P.x*aux5 - P.y*aux6 + P.z*aux4 ;
IF projection = PhoiCanh THEN
BEGIN
obs.z:=-P.x*aux7 -P.y*aux8 -P.z*aux2 + R;
Xproj := d*obs.x/obs.z;
Yproj := d*obs.y/obs.z;
END
ELSE BEGIN
Xproj := d*obs.x;
Yproj := d*obs.y;
END;
END;
PROCEDURE VeDen(P :ToaDo3D);
BEGIN
Chieu(P);
PE.x := PC.x + round(xproj);
PE.y := PC.y - round(yproj);
lineto (PE.x,PE.y);
END;
PROCEDURE Diden(P :ToaDo3D);
BEGIN
63. Chương IV. Các phép bi n ñ i
.59
Chieu(P);
PE.x := PC.x + round(xproj);
PE.y := PC.y - round(yproj);
moveto (PE.x,PE.y);
END;
PROCEDURE TrucToaDo; { Ve 3 truc }
var OO,XX,YY,ZZ:ToaDo3D;
Begin
OO.x:=0; OO.y:=0; OO.z:=0;
XX.x:=3; XX.y:=0; XX.z:=0;
YY.x:=0; YY.y:=3; YY.z:=0;
ZZ.x:=0; ZZ.y:=0; ZZ.z:=3;
DiDen(OO); VeDen(XX);
DiDen(OO); VeDen(YY);
DiDen(OO); VeDen(ZZ);
END;
PROCEDURE DieuKhienQuay; {Dieu khien Quay/Zoom hinh}
BEGIN
ch := readkey;
IF ch = #0 THEN ch := readkey;
cleardevice;
CASE UpCase(ch) OF
#72 : phi := phi + incang;
#80 : phi := phi - incang;
#75 : theta := theta + incang;
#77 : theta := theta - incang;
END; {of case ch}
END; {of Procedure}
END. {Of UNIT}
4.6. VÍ D MINH H A
Vi t chương trình mô t phép quay c a m t hình l p phương quanh các tr c (hình
4.12).
64. Chương IV. Các phép bi n ñ i
.60
Y
Z
X
P1
P8
P6 P7
P3
P2
P4
P5
Hình 4.12
Uses crt,graph,Dohoa3D;
var P1,P2,P3,P4,P5,P6,P7,P8:ToaDo3D;
Procedure KhoiTaoBien;
Begin
D:=70; R:=5;
Theta:=40; Phi:=20;
P1.x:=0; P1.y:=0; P1.z:=0;
P2.x:=0; P2.y:=1; P2.z:=0;
P3.x:=1; P3.y:=1; P3.z:=0;
P4.x:=1; P4.y:=0; P4.z:=0;
P5.x:=1; P5.y:=0; P5.z:=1;
P6.x:=0; P6.y:=0; P6.z:=1;
P7.x:=0; P7.y:=1; P7.z:=1;
P8.x:=1; P8.y:=1; P8.z:=1;
End;
Procedure VeLapPhuong;
begin
Diden(P1); VeDen(P2);
VeDen(P3); VeDen(P4);
VeDen(P1); VeDen(P6);
Veden(P7); VeDen(P8);
VeDen(P5); VeDen(P6);
DiDen(P3); VeDen(P8);
65. Chương IV. Các phép bi n ñ i
.61
DiDen(P2); VeDen(P7);
DiDen(P4); VeDen(P5);
end;
Procedure MinhHoa;
BEGIN
KhoiTaoBien;
KhoiTaoPhepChieu;
TrucToaDo;
VeLapPhuong;
Repeat
DieuKhienQuay;
KhoiTaoPhepChieu;
ClearDevice;
TrucToado;
VeLapPhuong;
until ch=#27;
END;
BEGIN { Chuong Trinh Chinh }
Projection:=SongSong{Phoicanh};
ThietLapDoHoa;
MinhHoa;
CloseGraph;
END.
BÀI T P
1. Cho 3 tam giác sau:
ABC v i A(1,1) B(3,1) C(1,4)
EFG v i E(4,1) F(6,1) G(4,4)
MNP v i M(10,1) N(10,3) P(7,1)
a. Tìm ma tr n bi n ñ i tam giác ABC thành tam giác EFG.
b. Tìm ma tr n bi n ñ i tam giác ABC thành tam giác MNP.
2. Cài ñ t thu t toán xén m t ño n th ng vào m t hình ch nh t có c nh không song
song v i tr c t a ñ .
66. Chương IV. Các phép bi n ñ i
.62
3. Vi t chương trình v m t Ellipse có các tr c không song song v i h tr c t a ñ .
4. D a vào bài t p 2, hãy mô ph ng quá trình quay c a m t Ellipse xung quanh tâm
c a nó.
5. Vi t chương trình mô ph ng quá trình quay, ñ i x ng, t nh ti n, phóng to, thu nh ,
bi n d ng c a m t hình b t kỳ trong m t ph ng.
6. Mô ph ng chuy n ñ ng c a trái ñ t xung quanh m t tr i ñ ng th i mô t chuy n
ñ ng c a m t trăng xung quanh trái ñ t.
M r ng trong không gian 3 chi u.
7. Vi t chương trình v ñ ng h ñang ho t ñ ng.
8. Vi t chương trình v các kh i ña di n ñ u trong không gian.
M r ng: ñi u khi n phóng to, thu nh , quay các kh i ña di n quanh các tr c...
67. CHƯƠNG V
BI U DI N CÁC ð I TƯ NG BA CHI U
5.1. MÔ HÌNH WIREFRAME
Mô hình WireFrame th hi n hình dáng c a ñ i tư ng 3D b ng 2 danh sách :
• Danh sách các ñ nh : lưu t a ñ c a các ñ nh.
• Danh sách các c nh : lưu các c p ñi m ñ u và cu i c a t ng c nh.
Các d nh và các c nh ñư c ñánh s th t cho thích h p.
Ví d : Bi u di n 1 căn nhà thô sơ (hình 5.1)
Danh sách các ñ nh
Vector x y z
1 0 0 0
2 0 1 0
3 0 1 1
4 0 0.5 1.5
5 0 0 1
6 1 0 0
7 1 1 0
8 1 1 1
9 1 0.5 1.5
10 1 0 1
Có nhi u cách ñ lưu gi mô hình
WireFrame. ñây, chúng ta dùng c u trúc record d a trên 2 m ng:
Const MaxDinh = 50; { S ñ nh t i ña}
MaxCanh = 100; {S c nh t i ña}
Type ToaDo3D = record
x, y, z:real;
end;
WireFrame = Record
X
Z
P2
P3
P6
P7
P1
P10
P5
P8
Y
P4
P9
Hình 5.1
68. Chương V. Bi u di n các ñ i tư ng ba chi u
64
Sodinh: 0..MaxDinh;
Dinh: array [1..MaxDinh] of ToaDo3D;
Socanh : 0..Maxcanh;
Canh :array[1..Maxcanh, 1..2] of 1..MaxDinh;
end;
Khi ñó, ta dùng m t bi n ñ mô t căn nhà :
Var House : WireFrame;
v i bi n house trên, ta có th gán giá tr như
sau:
With House Do
Begin
sodinh:=10;
socanh:=17;
dinh[1].x:=0;
dinh[1].y:=0;
dinh[1].z:=0;
...
canh[1, 1]:=1; {S ñ nh th nh t c a
c nh s 1}
canh[1, 2]:=2; {S ñ nh th hai c a
c nh s 1}
...
end;
5.2. V MÔ HÌNH WIREFRAME V I CÁC
PHÉP CHI U
ð v m t ñ i tư ng WireFrame, ta v t ng
c nh trong danh sách các c nh c a mô hình. V n ñ là làm th nào ñ v 1 ñư ng
th ng trong không gian 3 chi u vào m t ph ng?
ð làm ñi u này, ta ph i b b t ñi 1 chi u trong mô hình bi u di n, t c là ta ph i
dùng phép chi u t 3D → 2D .
Danh sách các c nh
C nh ð nh ñ u ð nh cu i
1 1 2
2 2 3
3 3 4
4 4 5
5 5 1
6 6 7
7 7 8
8 8 9
9 9 10
10 10 6
11 1 6
12 2 7
13 3 8
14 4 9
15 5 10
16 2 5
17 1 3
69. Chương V. Bi u di n các ñ i tư ng ba chi u
65
K thu t chung ñ v m t ñư ng th ng 3D là:
Chi u 2 ñi m ñ u mút thành các ñi m 2D.
V ñư ng th ng ñi qua 2 ñi m v a ñư c chi u.
Sau ñây là th t c xác ñ nh hình chi u c a m t ñi m qua phép chi u ph i c nh:
Procedure Chieu(P3D:ToaDo3D; E:Real; Var P2D:ToaDo2D);
Var t:Real;
Begin
If (P3D.x >=E) OR (E=0) Then
Writeln(‘ði m n m sau m t ho c m t n m trên m t ph ng
nhìn’);
Esle
Begin
t := 1/(1 - P3D.x/E);
P2D.y := t*P3D.y;
P2D.z := t*P3D.z;
End;
End;
5.3. V CÁC M T TOÁN H C
Ta s v các m t cong d a trên phương trình tham s c a các m t ñó.
Ví d :
(a) (b) (c)
Hình 5.2
• M t Ellipsoid: (hình 5.2.a)
x=Rx.cos(u).cos(v)
y=Ry.sin(u).cos(v)
70. Chương V. Bi u di n các ñ i tư ng ba chi u
66
z=Rz.sin(v)
Trong ñó: 0≤ u ≤ 2π -π/2 ≤ v ≤ π/2
• M t Hypeboloid: (hình 5.2.b)
x=u
y=v
z=u2
- v2
Trong ñó u,v ∈[-1,1]
• Hình xuy n: (hình 5.2.c)
x=(R + a.cos(v)).cos(u)
y=(R + a.cos(v)).sin(u)
z= a.sin(v)
Trong ñó: 0≤ u ≤ 2π -π/2 ≤ v ≤ π/2
• Hình tr tròn (Cylinder)
x = R.cos(u)
y = R.sin(u)
z = h
• Hình nón (Cone)
p(u,v) = (1-v).P0 + v.P1(u)
trong ñó:
P0: ñ nh nón
P1(u): ñư ng tròn
=
=
)sin(.
)cos(.
uRy
uRx
u,v ∈ [0,1]
• Ch o Parabol (Paraboloid)
x = a.v.cos(u)
y = b.v.sin(u) u∈[-π,π], v ≥ 0
z = v2
Phương pháp chính ñây cũng là v các ñư ng vi n theo u và v.
71. Chương V. Bi u di n các ñ i tư ng ba chi u
67
ð v m t ñư ng vi n u t i giá tr u’ khi v ch y t VMin ñ n VMax ta làm như
sau:
• T o m t t p h p các giá tr v[i] ∈ [VMin ,VMax], xác ñ nh v trí P[i] =
(X(u’,v[i]), Y(u’,v[i]), Z(u’,v[i])).
• Chi u t ng ñi m P[i] lên m t ph ng.
• V các ñư ng g p khúc d a trên các ñi m 2D P’[i].
Sau ñây là th t c v h ñư ng cong theo u:
ProcedureHoDuongCongU;
Var P: ToaDo3D;
u,v,du,dv:Real;
Begin
u:=UMin; du:=0.05; dv:=0.05;
While u<=UMax do
Begin
v:=Vmin;
P.x:=fx(u,v);
P.y:=fy(u,v);
P.z:=fz(u,v);
DiDen(P);{ ði ñ n ñi m xu t phát ban ñ u }
While v<=VMax do
Begin
v:=v+dv;
P.x:=fx(u,v);
P.y:=fy(u,v);
P.z:=fz(u,v);
VeDen(P);{ V ñ n ñi m m i }
End;
u:=u + du;
End;
End;
Tương t , ta có th v h ñư ng cong theo v.
72. Chương V. Bi u di n các ñ i tư ng ba chi u
68
TÓM L I: Mu n v m t m t cong, ta th c hi n các bư c sau
• Nh p các h s c a phương trình m t: a, b, c, d, Umin, Umax, Vmin, Vmax.
• Tính các hàm 2 bi n: X(u,v), Y(u,v), Z(u,v).
• Kh i t o phép chi u: Song song/Ph i c nh.
• V h ñư ng cong u.
V h ñư ng cong v.
BÀI T P
1. Hãy xây d ng m t c u trúc d li u ñ lưu tr mô hình WireFrame.
2. T o file text ñ lưu các ñ nh và c nh c a m t v t th trong không gian 3D theo mô
hình WireFrame v i c u trúc như sau:
Dòng ñ u tiên ch a hai s nguyên m, n dùng ñ lưu s ñ nh và s c nh c a mô
hình.
m dòng ti p theo, m i dòng lưu t a ñ x, y, z c a t ng ñ nh trong mô hình.
n dòng ti p theo, m i dòng lưu hai s nguyên là ñ nh ñ u và ñ nh cu i c a t ng
c nh trong mô hình.
3. Vi t th t c ñ ñ c các giá tr trong file text lưu vào mô hình WireFrame.
4. Vi t th t c ñ v v t th t mô hình WireFrame.
5. Vi t chương trình bi u di n các kh i ña di n sau: T di n ñ u, Kh i l p phương,
Bát di n ñ u, Th p nh di n ñ u, Nh th p di n ñ u.
6. Vi t chương trình ñ mô ph ng các m t toán h c: yên ng a, m t c u, hình xuy n...
73. CHƯƠNG VI
THI T K ðƯ NG VÀ M T CONG
BEZIER VÀ B-SPLINE
Khác v i nh ng phương pháp bi u di n m t và ñư ng b i các công th c toán h c
tư ng minh, ñây ta s bàn ñ n các công c cho phép ch ra các d ng ñư ng và m t
khác nhau d a trên các d li u.
ði u này có nghĩa là v i m t ñư ng cong cho trư c mà ta chưa xác ñ nh ñư c công
th c toán h c c a nó thì làm th nào ñ có th n m b t ñư c d ng c a ñư ng cong ñó
m t cách tương ñ i chính xác qua vi c s d ng m t t p nh các ñi m P0 , P1 ,... cùng
v i m t phương pháp n i suy nào ñó t t p ñi m này ñ t o ra ñư ng cong mong
mu n v i m t ñ chính xác cho phép.
Có nhi u cách ñ n m b t ñư c ñư ng cong cho trư c, ch ng h n:
• L y m t m u ñư ng cong ch ng vài ch c ñi m cách nhau tương ñ i ng n r i
tìm m t hàm toán h c và ch nh hàm này sao cho nó ñi qua các ñi m này và
kh p v i ñư ng cong ban ñ u. Khi ñó, ta có ñư c công th c c a ñư ng và dùng
nó ñ v l i ñư ng cong.
• Cách khác là dùng m t t p các ñi m ki m soát và dùng m t thu t toán ñ xây
d ng nên m t ñư ng cong c a riêng nó d a trên các ñi m này. Có th ñư ng
cong ban ñ u và ñư ng cong t o ra không kh p nhau l m, khi ñó ta có th di
chuy n m t vài ñi m ki m soát và lúc này thu t toán l i phát sinh m t ñư ng
cong m i d a trên t p ñi m ki m soát m i. Ti n trình này l p l i cho ñ n khi
ñư ng cong t o ra kh p v i ñư ng cong ban ñ u.
ñây, ta s ti p c n v n ñ theo phương pháp th hai, dùng ñ n các ñư ng cong
Bezier và B-Spline ñ t o các ñư ng và m t.
Gi s m t ñi m trong không gian ñư c bi u di n dư i d ng vector tham s p(t).
V i các ñư ng cong 2D, p(t) = (x(t), y(t)) và các ñư ng 3D, p(t) = (x(t), y(t), z(t)).
6.1. ðƯ NG CONG BEZIER VÀ M T BEZIER
6.1.1. Thu t toán Casteljau
74. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
70
ð xây d ng ñư ng cong p(t), ta d a trên m t dãy các ñi m cho trư c r i t o ra giá
tr p(t) ng v i m i giá tr t nào ñó. Vi c thay ñ i các ñi m này s làm thay ñ i d ng
c a ñư ng cong. Phương pháp này t o ra ñư ng cong d a trên m t dãy các bư c n i
suy tuy n tính hay n i suy kho ng gi a (In-Betweening).
Ví d : V i 3 ñi m P0 , P1 , P2 ta có th xây d ng m t Parabol n i suy t 3 ñi m này
b ng cách ch n m t giá tr t ∈ [0, 1] nào ñó r i chia ño n P0P1 theo t l t, ta ñư c
ñi m P0
1
trên P0P1 . Tương t , ta chia ti p P1P2 cũng theo t l t, ta ñư c P1
1
. N i P0
1
và P1
1
, l i l y ñi m trên P0
1
P1
1
chia theo t l t, ta ñư c P0
2
.
V i cách làm này, ta s l y nh ng giá tr t khác ∈ [0, 1] thì s ñư c t p ñi m P0
2
.
ðó chính là ñư ng cong p(t).
Ta bi u di n b ng phương trình:
P0
1
(t) = (1-t).P0 + t.P1 (1)
P1
1
(t) = (1-t).P1 + t.P2 (2)
P0
2
(t) = (1-t).P0
1
+ t.P1
1
(3)
Thay (1), (2) vào (3) ta ñư c:
P(t) = P0
2
(t) = (1-t)2
.P0 + 2t.(1-t).P1 + t2
.P2
ðây là m t ñư ng cong b c 2 theo t nên nó là m t Parabol.
T ng quát hóa ta có thu t toán Casteljau cho (L+1) ñi m:
Gi s ta có t p ñi m: P0, P1, P2, ..., PL
V i m i giá tr t cho trư c, ta t o ra ñi m Pi
r
(t) th h th r, t th h th (r - 1)
trư c ñó, ta có:
Pi
r
(t) = (1-t).Pi
r-1
(t) + t.Pi+1
r-1
(t) (3’)
r = 0,1,...,L và i = 0,...,L-r
Th h cu i cùng P0
L
(t) ñư c g i là ñư ng cong Bezier c a các ñi m P0,P1 ,P2,...,PL
Các ñi m Pi , i=0,1,...,L ñư c g i là các ñi m ki m soát hay các ñi m Bezier.
ða giác t o b i các ñi m ki m soát này g i là ña giác ki m soát hay ña giác Bezier.
6.1.2. D ng Bernstein c a các ñư ng cong Bezier
ðư ng cong Bezier d a trên (L+1) ñi m ki m soát P0 ,P1 , ...,PL ñư c cho b i công
th c:
P(t) =
k
L
=
∑
0
Pk.Bk
L
(t)
75. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
71
Trong ñó, P(t) là m t ñi m trong m t ph ng ho c trong không gian.
Bk
L
(t) ñư c g i là ña th c Bernstein, ñư c cho b i công th c:
Bk
L
(t) =
L
k L k
!
!( )!−
(1-t)L-k
.tk
v i L ≥ k
M i ña th c Bernstein có b c là L. Thông thư ng ta còn g i các Bk
L
(t) là các hàm
tr n (blending function).
Tương t , ñ i v i m t Bezier ta có phương trình sau:
P(u,v) =
i
M
=
∑
0 i
L
=
∑
0
Pi,k.Bi
M
(u).Bk
L
(v)
Trong trư ng h p này, kh i ña di n ki m soát s có (M+1).(L+1) ñ nh.
ðư ng cong Bezier b c 2 ðư ng cong Bezier b c 3
Hình 6.1
6.1.3. D ng bi u di n ma tr n c a ñư ng Bezier
ð thích h p cho vi c x lý trên máy tính, ta bi u di n hai m ng BL(t) và P như
sau:
BL
(t) = (B0
L
(t), B1
L
(t), ..., BL
L
(t))
P = (P0 ,P1 , ...,PL )
Do ñó: P(t) = BL
(t).P (tích vô hư ng)
hay P(t) = BL
(t).PT
(PT
là d ng chuy n v c a P)
Dư i d ng ña th c, có th bi u di n Bk
L
(t) như sau:
Bk
L
(t) = a0 + a1.t + a2.t2
+ ... + aL.tL
= (t0
,t1
,...,tL
).(a0 ,a1 ,...,aL)
Do ñó P(t) có th bi u di n l i như sau:
P(t) = PowL
(t).BezL
.PT
V i:
• PowL
(t) = (t0
,t1
,...,tL
)
P1
1
P1
P0
1
P1
P0
2
P2
76. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
72
• BezL
là ma tr n bi u di n m ng BL
(t) trong ñó m i hàng i c a ma tr n ng v i
các h s tương ng (a0 ,a1 ,...,aL) c a ña th c Bi
L
(t) và t i v trí (i,j) trong ma tr n BezL
có giá tr BezL
(i,j) = (-1)j-i
.Cn
i
.Ci
j
Ví d : Ma tr n Bez3
cho các ñư ng Bezier b c 3
Bez3
=
1 0 0 0
3 3 0 0
3 6 3 0
1 3 3 1
−
−
− −
6.1.4. T o và v các ñư ng Bezier
ð t o ra m t ñư ng cong Bezier t m t dãy các ñi m ki m soát ta s áp d ng
phương pháp l y m u hàm p(t) các giá tr cách ñ u nhau c a tham s t, ví d có th
l y ti = i/N, i=0,1,...,N. Khi ñó ta s ñư c các ñi m P(ti) t công th c Bezier.
N i các ñi m này b ng các ño n th ng ta s ñư c ñư ng cong Bezier g n ñúng. ð
tính P(ti) ta có th áp d ng ma tr n c a P(t) trên trong ñó ch có thành ph n PowL
(ti)
là thay ñ i, còn tích BezL
.PT
v i P = (P0 ,P1 , ...,PL ) là không thay ñ i.
Sau ñây là th t c minh h a vi c v ñư ng cong Bezier trong m t ph ng:
Type Mang = array[0..50] of PointType;
function tich(x,y:word):real;
var s:real;i:word;
begin
if y<=1 then tich:=1
else begin
s:=1;
for i:=x to y do s:=s*i;
tich:=s;
end;
end;
function CLK(l,k:word):real;
begin
CLk:=tich(k+1,l)/tich(1,l-k);
end;
function Xmu(x:real;mu:word):real;
77. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
73
var i:word;s:real;
begin
if mu=0 then s:=1
else begin
s:=1;
for i:=1 to mu do s:=s*x;
end;
Xmu:=s;
end;
function BKL(t:real;l,k:word):real;
begin
BKL:=CLK(l,k)*xmu(1-t,l-k)*xmu(t,k);
end;
procedure Pt(t:real;L:word;A:Mang;var diem:PointType);
var k:word;s,x,y:real;
begin
x:=0; y:=0;
for k:=0 to L do
begin
s:=BKL(t,l,k);
x:=x+A[k].x*s;
y:=y+A[k].y*s;
end;
diem.x:=round(x);
diem.y:=round(y);
end;
procedure Vebezier(A:Mang;L:integer);
var i,SoDiem:word; Diem:PointType;
dx,x:real;
begin
sodiem:=100;
dx:=1/sodiem;
78. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
74
x:=0;
if L>0 then
begin
for i:=1 to sodiem+1 do
begin
Pt(x,L,A,Diem);
if i=1 then moveto(round(diem.x),round(diem.y))
else lineto(round(diem.x),round(diem.y));
x:=x+dx;
end;
end
end;
6.1.5. Các tính ch t c a ñư ng cong Bezier
i/ N i suy ñư c các ñi m ñ u và cu i.
Ch ng minh:
Ta có: P(t) =
k
L
=
∑
0
Pk.Bk
L
(t)
Do ñó P(0) =
k
L
=
∑
0
Pk.Bk
L
(0)
trong ñó: Bk
L
(0) =
L
k L k
!
!( )!−
(1-0)L-k
.0k
∀k ≠ 0 và k ≠ L
=
L
k L k
!
!( )!−
.0 = 0
Vì v y, P(0) = P0.B0
L
(0) + PL.BL
L
(0)
= P0 + 0 = P0
Lý lu n tương t cho P(1). Ta có P(1) = PL.
ii/ Tính b t bi n Affine:
Khi bi n ñ i m t ñư ng cong Bezier, ta không c n bi n ñ i m i ñi m trên ñư ng
cong m t cách riêng r mà ch c n bi n ñ i các ñi m ki m soát c a ñư ng cong ñó r i
s d ng công th c Bernstein ñ tái t o l i ñư ng cong Bezier ñã ñư c bi n ñ i.
Ch ng minh:
Gi s ñi m P(t) bi n ñ i Affine thành P’(t)
79. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
75
P’(t) = P(t).N + tr =
k
L
=
∑
0
Pk.Bk
L
(t).N + tr
Trong ñó:
N: ma tr n bi n ñ i.
tr: vector t nh ti n.
Xét ñư ng cong
k
L
=
∑
0
(Pk.N + tr).Bk
L
(t) (*)
ñư c t o ra b ng cách bi n ñ i Affine các vector Pk. Ta s ch ng minh ñư ng cong
này chính là P’(t).
Khai tri n (*) ta có:
k
L
=
∑
0
Pk.N.Bk
L
(t) +
k
L
=
∑
0
tr.Bk
L
(t)
=
k
L
=
∑
0
Pk.N.Bk
L
(t) + tr.
k
L
=
∑
0
Bk
L
(t) (**)
Nhưng theo ña th c Bernstein thì
k
L
=
∑
0
Bk
L
(t) = (1-t+t)L
= 1 nên s h ng th hai c a
(**) s là tr.
Vì v y, P’(t) n m trên ñư ng cong Bezier t o ra b i các ñi m ki m soát Pk.
iii/ Tính ch t c a bao l i: ñư ng cong Bezier P(t) không bao gi ñi ra ngoài bao l i
c a nó.
ñây, bao l i c a các ñi m ki m soát là t p ñ nh nh nh t ch a t t c các ñi m
ki m soát ñó.
Ch ng minh:
Bao l i c a các ñi m ki m soát cũng chính là t p h p các t h p l i c a các
ñi m ki m soát.
Ta bi u di n t h p tuy n tính c a các ñi m Pk:
P(t) =
k
L
=
∑
0
ak.Pk , ak ≥ 0
Do P(t) là t h p l i c a các ñi m ki m soát ∀t ∈ [0,1] và
k
L
=
∑
0
Bk
L
(t) = 1
Nên ñư ng cong Bezier s n m trong bao l i c a các ñi m ki m soát.
iv/ ð chính xác tuy n tính:
ðư ng cong Bezier có th tr thành m t ñư ng th ng khi t t c các ñi m ki m
soát n m trên m t ñư ng th ng vì khi ñó bao l i c a chúng là m t ñư ng th ng
80. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
76
nên ñư ng Bezier b k p vào bên trong bao l i nên nó cũng tr thành ñư ng
th ng.
v/ B t kỳ m t ñư ng th ng hay m t ph ng nào cũng luôn luôn c t ñư ng cong
Bezier ít l n hơn so v i c t ña giác ki m soát.
vi/ ð o hàm c a các ñư ng Bezier:
Ta có: (P(t))’ = L.
k
L
=
−
∑
0
1
∆Pk.Bk
L-1
(t) , ∆Pk = Pk+1 - Pk
Do ñó, ñ o hàm c a ñư ng cong Bezier là m t ñư ng cong Bezier khác ñư c
t o ra t các vector ki m soát ∆Pk ( Ta ch c n l y các ñi m ki m soát g c theo
t ng c p ñ t o ra các ñi m ki m soát cho (P(t))’.
6.1.6. ðánh giá các ñư ng cong Bezier
B ng các ñi m ki m soát, ta có th t o ra các d ng ñư ng cong khác nhau b ng
cách hi u ch nh các ñi m ki m soát cho t i khi t o ra ñư c m t d ng ñư ng cong
mong mu n. Công vi c này l p ñi l p l i cho ñ n khi toàn b ñư ng cong th a yêu
c u.
Tuy nhiên, khi ta thay ñ i b t kỳ m t ñi m ki m soát nào thì toàn b ñư ng cong b
thay ñ i theo. Nhưng trong th c t , ta thư ng mong mu n ch thay ñ i m t ít v d ng
ñư ng cong g n khu v c ñang hi u ch nh các ñi m ki m soát.
Tính c c b y u c a ñư ng cong Bezier ñư c bi u hi n qua các ña th c Bk
L
(t) ñ u
khác 0 trên toàn kho ng [0,1]. M t khác ñư ng cong p(t) l i là m t t h p tuy n tính
c a các ñi m ki m soát ñư c gia tr ng b i các hàm Bk
L
(t) nên ta k t lu n r ng m i
ñi m ki m soát có nh hư ng ñ n ñư ng cong t t c các giá tr t ∈ [0,1]. Do ñó, hi u
ch nh b t kỳ m t ñi m ki m soát nào cũng s nh hư ng ñ n d ng c a toàn th ñư ng
cong.
ð gi i quy t bài toán này, ta s d ng m t t p h p các hàm tr n khác nhau. Các
hàm tr n này có giá mang (support: kho ng mà trên ñó hàm l y giá tr khác 0) ch là
m t ph n c a kho ng [0,1]. Ngoài giá mang này chúng có giá tr là 0.
Thư ng ta ch n các hàm tr n là các ña th c trên các giá mang ñó, các giá mang này
k nhau. Như v y, các hàm tr n chính là m t t p các ña th c ñư c ñ nh nghĩa trên
nh ng kho ng k nhau ñư c n i l i v i nhau ñ t o nên m t ñư ng cong liên t c. Các
81. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
77
ñư ng cong k t qu ñư c g i là ña th c riêng ph n hay t ng ph n (piecewise
polynomial).
Ví d : ta ñ nh nghĩa hàm g(t) g m 3 ña th c a(t), b(t), c(t) như sau:
g(t) =
[2,3]manggiaïcoït)-(3
2
1
=c(t)
[1,2]manggiaïcoï)
2
3
-(t-
4
3
=b(t)
[0,1]manggiaïcoït
2
1
=a(t)
2
2
2
Giá mang c a g(t) là [0,3]
Các giá tr c a t ng v i các ch n i c a các ño n g i là nút (knut), ch ng h n
t=0,1,2,3 là b n nút c a g(t). Hơn n a, t i các ch n i c a ñư ng cong g(t) là trơn,
không b g p khúc. Do ñó, ta g i ñó là hàm Spline.
V y, m t hàm Spline c p m là ña th c riêng ph n c p m có ñ o hàm c p m -1
liên t c m i nút.
D a trên tính ch t c a hàm Spline, ta có th dùng nó như các hàm tr n ñ t o ra
ñư ng cong p(t) d a trên các ñi m ki m soát P0,...,PL. Khi ñó:
P(t) =
k
L
=
∑
0
Pk.gk(t)
T ng quát hóa, ta xây d ng m t hàm p(t) v i L+1 ñi m ki m soát như sau:
V i m i ñi m ki m soát Pk , ta có m t hàm tr n tương ng Rk(t) và t p các nút g i
là vector nút T=(t0,t1,...,tn) v i ti ∈ R, ti ≤ ti+1 . Khi ñó:
P(t) =
k
L
=
∑
0
Pk.Rk(t)
6.2. ðƯ NG CONG SPLINE VÀ B-SPLINE
6.2.1. ð nh nghĩa
Theo trên ta có: P(t) =
k
L
=
∑
0
Pk.Rk(t) (*)
trong ñó Pk v i k=1..L là các ñi m ki m soát.
Rk(t) là các hàm tr n liên t c trong m i ño n con [ti , ti+1]và liên t c trên
m i nút. M i Rk(t) là m t ña th c riêng ph n.
Do ñó ñư ng cong p(t) là t ng c a các ña th c này, l y trên các ñi m ki m soát.