SlideShare a Scribd company logo
1 of 146
Download to read offline
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.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
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
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
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
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
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)
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),...
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:
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;
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
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;
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
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)
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;
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
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
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
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
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
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:
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
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);
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;
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);
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
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.
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).
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:
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
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
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;
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
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.
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
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
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.
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 )
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
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
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
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+
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.
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
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.
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),
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
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).
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
' .
' .
' .
=
=
=





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
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.
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.
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).
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.
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
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).
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)
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
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;
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);
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
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).
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);
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 ñ .
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...
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
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
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)
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.
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.
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...
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
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)
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
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;
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;
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)
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
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
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.
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa
Giao trinh ly_thuyet_do_hoa

More Related Content

What's hot

Nhập môn công nghệ thông tin
Nhập môn công nghệ thông tinNhập môn công nghệ thông tin
Nhập môn công nghệ thông tinThanh Lee
 
Arduino cho người mới bắt đầu
Arduino cho người mới bắt đầuArduino cho người mới bắt đầu
Arduino cho người mới bắt đầuHuynh MVT
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
 
Giao trinh mang_may_tinh
Giao trinh mang_may_tinhGiao trinh mang_may_tinh
Giao trinh mang_may_tinhHai Nguyen
 
Bai giang asp.net full
Bai giang asp.net fullBai giang asp.net full
Bai giang asp.net fullLy hai
 
Baigiang access ttth
Baigiang access ttthBaigiang access ttth
Baigiang access ttthlam04dt
 
Giáo trình nhập môn tin học đỗ thị mơ[bookbooming.com]
Giáo trình nhập môn tin học   đỗ thị mơ[bookbooming.com]Giáo trình nhập môn tin học   đỗ thị mơ[bookbooming.com]
Giáo trình nhập môn tin học đỗ thị mơ[bookbooming.com]bookbooming1
 
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự Nhiên
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự NhiênLập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự Nhiên
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự NhiênMasterCode.vn
 
Giao trinh visual studio[bookbooming.com]
Giao trinh visual studio[bookbooming.com]Giao trinh visual studio[bookbooming.com]
Giao trinh visual studio[bookbooming.com]bookbooming1
 
Giao trinh thdc
Giao trinh thdcGiao trinh thdc
Giao trinh thdcPhi Phi
 
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU nataliej4
 
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]bookbooming1
 
Sách lập trình với scratch
Sách lập trình với scratchSách lập trình với scratch
Sách lập trình với scratchHuy Phan
 

What's hot (17)

Nhập môn công nghệ thông tin
Nhập môn công nghệ thông tinNhập môn công nghệ thông tin
Nhập môn công nghệ thông tin
 
Ngôn ngữ lập trình C#
Ngôn ngữ lập trình C#Ngôn ngữ lập trình C#
Ngôn ngữ lập trình C#
 
Arduino cho người mới bắt đầu
Arduino cho người mới bắt đầuArduino cho người mới bắt đầu
Arduino cho người mới bắt đầu
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vn
 
Giao trinh mang_may_tinh
Giao trinh mang_may_tinhGiao trinh mang_may_tinh
Giao trinh mang_may_tinh
 
Bài giảng Assembly
Bài giảng AssemblyBài giảng Assembly
Bài giảng Assembly
 
hdsd excel_2010
 hdsd excel_2010 hdsd excel_2010
hdsd excel_2010
 
Bai giang asp.net full
Bai giang asp.net fullBai giang asp.net full
Bai giang asp.net full
 
Baigiang access ttth
Baigiang access ttthBaigiang access ttth
Baigiang access ttth
 
Giáo trình nhập môn tin học đỗ thị mơ[bookbooming.com]
Giáo trình nhập môn tin học   đỗ thị mơ[bookbooming.com]Giáo trình nhập môn tin học   đỗ thị mơ[bookbooming.com]
Giáo trình nhập môn tin học đỗ thị mơ[bookbooming.com]
 
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự Nhiên
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự NhiênLập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự Nhiên
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự Nhiên
 
Giao trinh visual studio[bookbooming.com]
Giao trinh visual studio[bookbooming.com]Giao trinh visual studio[bookbooming.com]
Giao trinh visual studio[bookbooming.com]
 
Giao trinh thdc
Giao trinh thdcGiao trinh thdc
Giao trinh thdc
 
Đề tài: Hệ thống máy nghiền than trong nhà máy nhiệt điện Uông Bí
Đề tài: Hệ thống máy nghiền than trong nhà máy nhiệt điện Uông BíĐề tài: Hệ thống máy nghiền than trong nhà máy nhiệt điện Uông Bí
Đề tài: Hệ thống máy nghiền than trong nhà máy nhiệt điện Uông Bí
 
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
 
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
 
Sách lập trình với scratch
Sách lập trình với scratchSách lập trình với scratch
Sách lập trình với scratch
 

Viewers also liked

Trabajo de la sociedad de la informacion
Trabajo de la sociedad de la informacionTrabajo de la sociedad de la informacion
Trabajo de la sociedad de la informacionjorge96carlos
 
Thiet ke san khau ra mat GIC
Thiet ke san khau ra mat GICThiet ke san khau ra mat GIC
Thiet ke san khau ra mat GICGoldidea
 
Idea 4 presentacio ecotendencies-projecte_urbes
Idea 4   presentacio ecotendencies-projecte_urbesIdea 4   presentacio ecotendencies-projecte_urbes
Idea 4 presentacio ecotendencies-projecte_urbesEcotendències Cosmocaixa
 
How To Avoid Becoming A Dot Bomb 2001
How To Avoid Becoming A Dot Bomb 2001How To Avoid Becoming A Dot Bomb 2001
How To Avoid Becoming A Dot Bomb 2001Julian Curtiss
 
New microsoft word document
New microsoft word documentNew microsoft word document
New microsoft word documentDuy Duy
 
Q1 In what ways does your media product use, develop or challenge forms and ...
Q1  In what ways does your media product use, develop or challenge forms and ...Q1  In what ways does your media product use, develop or challenge forms and ...
Q1 In what ways does your media product use, develop or challenge forms and ...briege simmonds
 
run the table poker football app
run the table  poker football apprun the table  poker football app
run the table poker football appLarry K. Gay
 
Work Shop
Work ShopWork Shop
Work ShopBLASS
 
New text document
New text documentNew text document
New text documentVan Ngo Thi
 
U4 T3 A B C E D G A R
U4  T3  A B C  E D G A RU4  T3  A B C  E D G A R
U4 T3 A B C E D G A Rprofeeddy
 
T2 famous person keynote
T2 famous person keynote T2 famous person keynote
T2 famous person keynote es436502mhs
 

Viewers also liked (20)

Kỹ năng đọc
Kỹ năng đọcKỹ năng đọc
Kỹ năng đọc
 
Trabajo de la sociedad de la informacion
Trabajo de la sociedad de la informacionTrabajo de la sociedad de la informacion
Trabajo de la sociedad de la informacion
 
Final directores
Final directoresFinal directores
Final directores
 
Thiet ke san khau ra mat GIC
Thiet ke san khau ra mat GICThiet ke san khau ra mat GIC
Thiet ke san khau ra mat GIC
 
SociologyExchange.co.uk Shared Resource
SociologyExchange.co.uk Shared ResourceSociologyExchange.co.uk Shared Resource
SociologyExchange.co.uk Shared Resource
 
Idea 4 presentacio ecotendencies-projecte_urbes
Idea 4   presentacio ecotendencies-projecte_urbesIdea 4   presentacio ecotendencies-projecte_urbes
Idea 4 presentacio ecotendencies-projecte_urbes
 
How To Avoid Becoming A Dot Bomb 2001
How To Avoid Becoming A Dot Bomb 2001How To Avoid Becoming A Dot Bomb 2001
How To Avoid Becoming A Dot Bomb 2001
 
Intoxicacion por causticos
Intoxicacion por causticosIntoxicacion por causticos
Intoxicacion por causticos
 
Usos de word
Usos de wordUsos de word
Usos de word
 
Z41 cy陶瓷闸阀 上海高川阀门制造有限公司
Z41 cy陶瓷闸阀 上海高川阀门制造有限公司Z41 cy陶瓷闸阀 上海高川阀门制造有限公司
Z41 cy陶瓷闸阀 上海高川阀门制造有限公司
 
New microsoft word document
New microsoft word documentNew microsoft word document
New microsoft word document
 
Q1 In what ways does your media product use, develop or challenge forms and ...
Q1  In what ways does your media product use, develop or challenge forms and ...Q1  In what ways does your media product use, develop or challenge forms and ...
Q1 In what ways does your media product use, develop or challenge forms and ...
 
Varun ppt
Varun pptVarun ppt
Varun ppt
 
run the table poker football app
run the table  poker football apprun the table  poker football app
run the table poker football app
 
Gregoy Lemarchal
Gregoy LemarchalGregoy Lemarchal
Gregoy Lemarchal
 
Work Shop
Work ShopWork Shop
Work Shop
 
Schedual
SchedualSchedual
Schedual
 
New text document
New text documentNew text document
New text document
 
U4 T3 A B C E D G A R
U4  T3  A B C  E D G A RU4  T3  A B C  E D G A R
U4 T3 A B C E D G A R
 
T2 famous person keynote
T2 famous person keynote T2 famous person keynote
T2 famous person keynote
 

Similar to Giao trinh ly_thuyet_do_hoa

Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoMan_Ebook
 
Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316minhpv32
 
Tìm hiểu về bộ điều khiển số TMS320F28335
Tìm hiểu về bộ điều khiển số TMS320F28335Tìm hiểu về bộ điều khiển số TMS320F28335
Tìm hiểu về bộ điều khiển số TMS320F28335Pham Hoang
 
tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...
tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...
tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...Nguyễn Hải Sứ
 
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]bookbooming1
 
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]bookbooming1
 
Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1quang
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_banzeus_91
 
giáo trình c căn bản
giáo trình c căn bảngiáo trình c căn bản
giáo trình c căn bảnLam Hoang
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_bankatakhung89
 
Lap trinh c can ban
Lap trinh c can banLap trinh c can ban
Lap trinh c can bandaihoccantho
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhCao Toa
 
Link asm in another language
Link asm in another languageLink asm in another language
Link asm in another languageMy Đá
 
Phần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụng
Phần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụngPhần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụng
Phần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụngLac Viet Computing Corporation
 
Đá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ệ...
Đá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ệ...Đá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ệ...
Đá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ệ...Man_Ebook
 

Similar to Giao trinh ly_thuyet_do_hoa (20)

Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải PhòngĐề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
 
Bồi dưỡng năng lực dạy cho giáo viên các trường dạy nghề, HAY
Bồi dưỡng năng lực dạy cho giáo viên các trường dạy nghề, HAYBồi dưỡng năng lực dạy cho giáo viên các trường dạy nghề, HAY
Bồi dưỡng năng lực dạy cho giáo viên các trường dạy nghề, HAY
 
Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316
 
Giao trinh ly thuyet do hoa
Giao trinh ly thuyet do hoaGiao trinh ly thuyet do hoa
Giao trinh ly thuyet do hoa
 
Shop AI
Shop AIShop AI
Shop AI
 
Tìm hiểu về bộ điều khiển số TMS320F28335
Tìm hiểu về bộ điều khiển số TMS320F28335Tìm hiểu về bộ điều khiển số TMS320F28335
Tìm hiểu về bộ điều khiển số TMS320F28335
 
tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...
tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...
tinh-toan-thiet-ke-va-mo-phong-he-thong-cap-phoi-tu-dong-su-dung-pheu-rung-va...
 
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
 
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
 
Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 
giáo trình c căn bản
giáo trình c căn bảngiáo trình c căn bản
giáo trình c căn bản
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 
Lap trinh c can ban
Lap trinh c can banLap trinh c can ban
Lap trinh c can ban
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tính
 
Link asm in another language
Link asm in another languageLink asm in another language
Link asm in another language
 
Phần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụng
Phần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụngPhần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụng
Phần mềm kế toán Cloud AccNetC - Tài liệu hướng dẫn sử dụng
 
Đá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ệ...
Đá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ệ...Đá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ệ...
Đá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.