SlideShare uma empresa Scribd logo
1 de 146
Baixar para ler offline
M CL 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 IM

ð 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
1.1. T NG QUAN V ð

CƠ S

C Að

H A

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
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
2
Chương I. Các y u t cơ s c a ñ h a
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)
3
Chương I. Các y u t cơ s c a ñ h a
ðâ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),...

4
Chương I. Các y u t cơ s c a ñ h a
• 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:
5
Chương I. Các y u t cơ s c a ñ h a
•

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;
6
Chương I. Các y u t cơ s c a ñ h a
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

O

MaxX
Y

X

X

MaxY

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
7
Chương I. Các y u t cơ s c a ñ h a
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;
x = x1;

IncY = ∆y/Step; {bư c tăng khi v }
{Ch n ñi m v ñ u tiên}

y = y1;

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;
8
Chương I. Các y u t cơ s c a ñ h a
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:
x − x1
y − y1
=
x 2 − x1
y 2 − y1

ð t

yi+
1
y

(*)

yi

∆x = x2 - x1
∆y = y2 - y1

(*) ⇔ y = x.

xi

∆y
∆y
+ y1 - x1.
∆x
∆x

∆y
∆x

xi+1

Hình 1.2

∆y = m. ∆x

(2)

b = y1 - m.x1

Suy ra m =

(3)

nên

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à:
9
Chương I. Các y u t cơ s c a ñ h a
(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.

∆y
.(xi + 1) - 2yi + 2b - 1
∆x

⇔ ∆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.
. N u pi ≥ 0: Ch n yi+1 = yi + 1

(d1<d2)

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)
10
Chương I. Các y u t cơ s c a ñ h a
• Bư c 4: Ti p t c tăng x lên 1 Pixel.
pi+1 = pi + 2∆y

v trí xi +1, ta tính:

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;
11
Chương I. Các y u t cơ s c a ñ h a
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 +

1
)
2

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

P
yi+
1

Q
M

th ng ⇒ Q n m trên M ⇒ Ch n P
M t khác:
pi

pi+1 = F(xi+1 + 1,yi+1 +

S

yi

1
= F(xi + 1,yi + )
2

xi
xi+1

1
)
2

Hình 1.3

nên
pi+1 - pi = F(xi+1 + 1,yi+1 +

1
1
) - F(xi + 1,yi + )
2
2

12
Chương I. Các y u t cơ s c a ñ h a
= A(xi+1+1) + B(yi+1 +

1
1
) + C - A(xi+1) - B(yi + ) - C
2
2

= 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 +

1
1
) = A(x1+1) + B(y1 + ) + C
2
2

= Ax1 + Bx1 + C + A +

B
B
=A+
(vì Ax1 + Bx1 + C = 0)
2
2

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.

(y,x)

(y,x
)
(x,y
)

(-x,y)
(-y,x)

(x,y)

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 ±

R2 − ( x − xC ) 2

(*)
(1)

ð ñơn gi n thu t toán, ñ u tiên ta xét ñư ng
tròn có tâm

(x,y)

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

(
y,-

Hình
1.4

(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à:
13
Chương I. Các y u t cơ s c a ñ h a
y2 = R2 - (xi +1)2
d1 = yi2 - y2 = yi2 - R2 + (xi + 1)2

ð t:

d2 = y2 - (yi - 1)2 = R2 - (xi + 1)2 - (yi - 1)2
Suy ra:
pi = d1 - d2 = 2.(xi + 1)2 + yi2 + (yi - 1)2 - 2R2
⇒ pi+1 = 2.(xi+1 + 1)2 + y2i+1 + (yi+1 - 1)2 - 2R2

(2)

yi
y
yi1

(3)

T (2) và (3) ta có:
pi+1 - pi = 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi)
⇒ pi+1 = pi + 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi)

xi
xi+1
Hình
1.5

(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);
14
Chương I. Các y u t cơ s c a ñ h a
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
2

2

2

ð t F(x,y) = x + y - R ,ta có:
< 0 n u (x,y)
= 0 n u (x,y)

trên ñư ng tròn

M
Q
P

trong ñư ng tròn

> 0 n u (x,y)

F(x,y)

S
yi

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 -

yi1
xi

xi+1
Hình
1.6

1
) (Hình 1.6)
2

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
15
Chương I. Các y u t cơ s c a ñ h a
M t khác:
pi

= F(xi + 1,yi -

1
)
2

pi+1 = F(xi+1 + 1,yi+1 -

1
)
2

nên
pi+1 - pi = F(xi+1 + 1,yi+1 -

1
1
) - F(xi + 1,yi - )
2
2

= [(xi+1+1)2 + (yi+1 = [(xi+2)2 + (yi+1 -

1 2
1
) - R2] - [(xi+1)2 + (yi - )2 - R2]
2
2

1 2
1
) - R2] - [(xi+1)2 + (yi - )2 - R2]
2
2

= 2xi + 3 + (yi+12 - yi2) - (yi+1 - yi)
Suy ra:
pi+1 = pi + 2xi + 3 + (yi+12 - yi2) - (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 -

1
1
1
5
) = F(1,R - ) = 1 + (R - )2 - R2 = - R
4
2
2
2

1.6. THU T TOÁN V ELLIPSE
ð ñơn gi n, ta ch n Ellipse có tâm

g ct a

ñ . Phương trình c a nó có d ng:
y2
x2
+ 2 =1
a2
b

Ta có th vi t l i:

y2 = -

b2 2
.x + b2
2
a

(*)

*Ý tư ng: Gi ng như thu t toán v ñư ng tròn.
Ch có s khác bi t

Hình
1.7

ñâ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) :
16
Chương I. Các y u t cơ s c a ñ h a
x0 .

y
x
+ y0. 2 = 1
2
a
b

Suy ra, h s góc c a ti p tuy n t i ñi m ñó là: -

x 0 .b 2
.
y0 a 2

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)
y2 = -

Thay (xi +1) vào (*):

b2
.(xi +1)2 + b2
2
a

ð t:
d1= yi2 - y2 = yi2 +
d2= y2 - (yi -1)2 = -

b2
.(xi +1)2 -b2
2
a
b2
.(xi +1)2 + b2 - (yi -1)2
2
a

b2
⇒ pi = d1 - d2 = 2.[ 2 .(xi +1)2 - b2] + 2.(yi2 + yi) -1
a

pi+1

= 2.[

b2
.(xi+1 +1)2 - b2] + 2.(yi+12 + yi+1) -1
2
a

Suy ra:
pi+1 - pi = 2.

b2
.[(xi+1 +1)2 - (xi +1)2] + 2.( yi+12 - yi2 + yi+1 - yi)
2
a

(**)

*Nh n xét:
• pi < 0: Ch n yi+1 = yi
(**) ⇒ pi+1 = pi + 2.

b2
.(2x + 3)
a2

• pi ≥ 0: Ch n yi+1 = yi -1
(**) ⇒ pi+1 = pi + 2.

b2
.(2x + 3) - 4yi
a2

V i ñi m ñ u tiên (0,b), ta có:
p1 = 2

b2
- 2b + 1
a2

T ñó, ta có th t c v Ellipse như sau:
17
Chương I. Các y u t cơ s c a ñ h a
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
18
Chương I. Các y u t cơ s c a ñ h a
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:

y2
x2
+ 2 =1
a2
b

Nhánh 1:
p1 = b2 - a 2 b +

1 2
.a
4

If pi < 0 Then pi+1 = pi + b2 + 2b2xi+1
else pi+1 = pi + b2 + 2b2xi+1 - 2a2yi+1
Nhánh 2:
p1 = b2(xi +

1 2
) + a2(yi - 1)2 - a2b2
2

If pi > 0 Then pi+1 = pi + a2 - 2a2yi+1
else pi+1 = pi + a2 + 2b2xi+1 - 2a2yi+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);
19
Chương I. Các y u t cơ s c a ñ h a
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;
20
Chương I. Các y u t cơ s c a ñ h a
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);
21
Chương I. Các y u t cơ s c a ñ h a
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
22
Chương I. Các y u t cơ s c a ñ h a
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=

ax + b
,
cx + d

y=

ax 2 + bx + c
.
dx + e

12. V các ñư ng cong sau:
2

y = 2px

y2
x2
+ 2 =1
a2
b

y2
x2
- 2 = ±1
a2
b

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.

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

Cyan

Blue
Magenta

White
Y

Black
Green
Red

Yellow

X

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 :
 C  1  R 
 M  = 1 − G 
    
 Y  1  B 
    

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:
26
Chương II. Tô màu
0.114   R 
Y  0.299 0.587
 I  = 0.596 − 0.275 − 0.321 * G 
  
  
Q  0.212 − 0.523 0.311   B 
  
  

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
V
Yellow

Green
1.0

Cyan

White

Blue

Red
White

H

S

0.0
Black

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).
1.0

L
White

Yellow

Green
0.5

Cyan
Blue

Red
White

H

S

0.0
Black

Hình 2.3. H màu HSL
27
Chương II. Tô màu
2.2. CÁC THU T TOÁN TÔ MÀU
2.2.1. Bài toán
P2
Cho ña giác S xác ñ nh b i n ñ nh : P1, P2,
W
P1

..., Pn. Hãy tô màu mi n S.
* Phương pháp t ng quát :

P3
S

- Tìm hình ch nh t W nh nh t ch a S

P5

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

P4
Hình 2.4

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

-N u

∑ dt(S )
i =1

i

= dt(S) thì P ∈ S.

Ta có công th c tính di n tích c a S:

1 n
(
S= | ∑xi yi+1 −xi+1yi) |
2 i=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ì
28
Chương II. Tô màu
• 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;

29
Chương II. Tô màu
2.2.3. Thu t toán tô màu theo dòng quét (Scanline)
ð t x0 = Min(xi), i∈ [1,n].

y

Bư c 1: K Dy//0y ñi qua x0 (hình 2.5).
Dy
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

x0
x

xi
Hình 2.5

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).

X
X

O
N u các ñi m lân c n ñó v n còn thu c S và chưa

O

X

X

ñư 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

Hình 2.6

ñ qui:
Procedure TOLOANG(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);
30
Chương II. Tô màu
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.

31
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 = ( x, y ) ∈ R 2 |


X min ≤ x ≤ X max 

Y min ≤ y ≤ Y max 

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 = x1 + ( x 2 − x1). t

 y = y1 + ( y 2 − y1). t

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 ≤ y1+ (y2 - y1). t ≤ Ymax

0≤ t ≤1


G i N là t p nghi m c a h phương trình

A
y
yMax

P
Q

yMin

B
xMin

trên.
Hình 3.1

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:

xMax X
Chương III. Xén hình
 Px = x1 + ( x 2 − x1). t 1

 Py = y1 + ( y 2 − y1). t 1

thì:

ClipD(F) = PQ

 Qx = x1 + ( x 2 − x1). t 2

Qy = y1 + ( y 2 − y1). t 2

(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

100
1

100
0

101
0

Bit 3: Qui ñ nh vùng n m bên dư i c a s

000
1

000
0

001
0

Bit 4: Qui ñ nh vùng n m bên trên c a s

010
1

010
0

011
0

Bit 2: Qui ñ nh vùng n m bên ph i c a s

• Xét ñi m P ∈ R2 :

Hình 3.2

1
0

nãúuPx < X min
Ngæåüc
laûi

1
0

nãúuP > X max
x
Ngæåüc
laûi

1
0

nãúuPy < Y min
Ngæåüc
laûi

1

0

nãúuPy > Y max
Ngæåüc
laûi

Pleft

= 

PRight

= 

PBelow = 

PAbove =

• 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.
33
Chương III. Xén hình
♦ 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.
34
Chương III. Xén hình
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) = A1B1

3.2.1.3. Thu t toán Liang - Barsky
∆x = x2 - x1

∆y = y2 - y1

p1 = - ∆x

q1 = x1 - xMin

p2 = ∆x

q2 = xMax - x1

p3 = - ∆y

q3 = y1 - yMin

p4 = ∆y

ð t

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:
Pk .t ≤ Q k , k = 1..4

 0 ≤ t ≤1

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 )

35
Chương III. Xén hình
⇒ 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({

Qk
| k ∈ K2} ∪ {0})
Pk

u2 = Min({

Qk
| k ∈ K1} ∪ {1})
Pk

N u u1 > u2 thì ClipD(F) = ∅
Ngư c l i: G i P, Q là 2 ñi m th a
 Px = x1 + ∆x.u1
Qx = x1 + ∆x.u2
và 

Py = y1 + ∆y.u1
Qy = y1 + ∆y.u2

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).
y

G i R là ma tr n quay c a phép ñ i tr c, ta có:
 X min
 X min

 = R. 

 Y min 
 Y min 
α

 X max
 X max

 = R. 

 Y max 
 Y max 

x

O

v i

 cos(α ) sin(α ) 

 − sin(α ) cos(α )

R= 

Hình 3.3

36
Chương III. Xén hình
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).

A

* Thu t toán:
B

• Tính d(O,AB)
• Xét các trư ng h p:
i/ N u d > R thì ClipD(F) = ∅
Hình 3.4

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)

 x = x1 + ( x 2 − x1).λ

◊ Phương trình ño n AB:  y = y1 + ( y 2 − y1).λ

0 ≤ λ ≤1


(2)

◊ Thay (2) vào (1) ta suy ra: λ =

− a ± a 2 − bc
b

Trong ñó:
a = ∆x.(x1 - xc) + ∆y.(y1 - yc)
b = (∆x)2 + (∆y)2
c = (x1 - xc)2 + (y1 - yc)2 - R2
37
Chương III. Xén hình
∆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/

Hình
3.5

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)

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.

38
Chương III. Xén hình
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
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

i/

chính là ña giác và bài toán coi như ñã ñư c gi i quy t.
Ai+

Ai

Ai

Ai+

Ai+

Ai+
Ai+
Ai

Ai

Ai

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.

39
Chương III. Xén hình
- 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.

40
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:
A B
 + (trx try)

C D

(x’ y’) = (x y). 

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;
A B
 - ma tr n bi n ñ i.

C D

M= 


4.1.1.1. Phép ñ ng d ng
Ma tr n c a phép ñ ng d ng là:
 A 0

 0 D

M= 

 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
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à

 Cos (α ) Sin(α ) 


 − Sin(α ) Cos (α ) 

R= 


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):
1

(x y 1).  0

M

0
1
N

0

0 = (x + M

1

y+N

1)

4.1.1.5. Phép bi n d ng
Ma tr n t ng quát là: M =  1 g 
Trong ñó:


h



1


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.

.42
Chương IV. Các phép bi n ñ i
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

−M

0
1
−N

0  Cos(α ) Sin (α ) 0  1
 
 
0 .  − Sin (α ) Cos(α ) 0 .  0
 
 
1 
0
0
1  M

0
1
N

0

0

1

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),
.43
Chương IV. Các phép bi n ñ i
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
.44
Chương IV. Các phép bi n ñ i
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 ñ :
Z

Z

Y

Y
O

X

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).
.45
Chương IV. Các phép bi n ñ i
•

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:
Z

Z

P(R,θ,φ)

P(x,y,z)
R
Y

φ

O

O

Y

θ

X

X

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(Φ)
Φ
R 2 = x2 + y 2 + z 2
ð 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
 A 0 0 0


 0 B 0 0
M=
 0 0 C 0


 0 0 0 1

⇔

 x ' = A. x

 y ' = B. y
 z ' = C. z


.46
Chương IV. Các phép bi n ñ i
4.2.2.2. Phép ñ i x ng
1

0
Mz = 
0

0

0

0
0 −1 0

0 0 1
0
1

0
0

1 0

0 −1
My= 
0 0

0 0
 −1

0
Mx = 
0

0

ñ i x ng qua m t (XY)

0 0

0 0
1 0

0 1

ñ i x ng qua m t (XZ)

0 0 0

1 0 0
0 1 0

0 0 1

ñ i x ng qua m t (YZ)

4.2.2.3. Phép t nh ti n
1

0
M= 
0

M

0
1
0
N

0

0
1 0

P 1
0
0

⇔

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:
 Cos (θ ) Sin(θ )

 − Sin(θ ) Cos (θ )
RZ = 
0
0


0
0


0 0

0 0
1 0

0 1


0
0
1

 0 Cos (θ ) Sin(θ )
RX = 
0 − Sin(θ ) Cos (θ )

0
0
0


0

0
0

1


.47
Chương IV. Các phép bi n ñ i
 Cos (θ )

0

RY = 
− Sin(θ )


0


Sin(θ )

0

1
0
0
0 Cos (θ ) 0 

0
0
1

0

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  6 −2 −3  1 0 0

 
 

 1 3 3 .  −1 1 0  =  0 1 0

 
 

 1 2 4  −1 0 1   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.
.48
Chương IV. Các phép bi n ñ i
Z

P(x,y,z)
z'
P'

y'
(E,0,0)
X

Maét
Y

Maët phaún g 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
. Thay t vào (*) ta
1− x / E

tính ñư c:
y’ =

y
z
va z’ =
1− x / E
1− x / E

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.
.49
Chương IV. Các phép bi n ñ i
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.
A

A'
Taâm chieáu (∝)
B'

B

Maët phaúng chieáu

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.
Y0

Z
Z0
YE

O'

XE

Y

φ

O

X0

θ

X

Maøn hình

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).
.50
Chương IV. Các phép bi n ñ i
•

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).
Z1
Z

Y1
O'
φ

O
θ

Y

X1

X

Hình 4.6
Ma tr n c a phép t nh ti n (L y ngh ch ñ o):
 1

0
A= 
 0

−M

0
1
0
−N

0
1
0
0



0
0
1
0
=

1 0
0
0
1


− P 1
 − R. Cos(θ ). Cos(φ ) − R. Sin (θ ). Cos(φ ) − R. Sin (φ )
0
0

0

0
0

1

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-1z.

.51
Chương IV. Các phép bi n ñ i
 Cos( a ) Sin ( a )

− Sin ( a ) Cos( a )
Rz = 
 0
0

0
 0

 Cos( a ) − Sin ( a )

-1
 Sin ( a ) Cos( a )
R z=
 0
0

0
 0

0 0

0 0
1 0

0 1

0 0

0 0
1 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(θ)
θ
θ
θ
θ
Z

Z2

O'
Y2
Y

φ

O
θ

θ'
X2

X

Hình 4.7
Nên ma tr n c a phép quay tìm ñư c s có d ng:
 Sin (θ ) Cos(θ )

− Cos(θ ) Sin (θ )
B= 

0
0

0
0

Bư c

0 0

0 0
và h (X1,Y1,Z1) bi n ñ i thành h (X2,Y2,Z2).
1 0

0 1

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ó:
0
0
1

 0 Cos (a ) Sin(a )
Rx = 
0 − Sin(a ) Cos (a )

0
0
0


0

0
0

1


.52
Chương IV. Các phép bi n ñ i
Z

Y3

O'
Z3
φ

O
θ

X3

Y

θ'

X

Hình 4.8
0
0
1

0 Cos( a ) − Sin ( a )
R-1x = 
 0 Sin ( a ) Cos( a )

0
0
0

0

0
0

1

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:
0
0
1

0 − Sin (φ ) − Cos(φ )
C= 
 0 Cos(φ ) − Sin (φ )

0
0
0

0

0
0

1

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:
 −1

0
D= 
0

0

0 0 0

1 0 0
0 1 0

0 0 1

và h (X3,Y3,Z3) bi n ñ i thành h (X0,Y0,Z0).

.53
Chương IV. Các phép bi n ñ i
Z

Y0

X0

O'

Z0

Y

φ

O

θ'

θ

X

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:
 − sin(θ ) − Cos(θ ). Sin (φ ) − Cos(θ ). Cos(φ )

Cos(θ ) − Sin (θ ). Sin (φ ) − Sin (θ ). Cos(φ )
T= 
 0
Cos(φ )
− Sin (φ )

0
R
 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)

.54
Chương IV. Các phép bi n ñ i
Y0

P(x0,y0,z0)
P'(xE,yE,zE)
Z0

O

Maøn hình

X0
Y0

P(x0,y0,z0)
yE
O

D
Maøn hình

Z0

O
xE
P(x0,y0,z0)

X0

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

.55
Chương IV. Các phép bi n ñ i
Phoùng to

Thu nhoû

Maét
Vaät theå

Maøn hình

Maøn hình

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;
.56
Chương IV. Các phép bi n ñ i
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);
.57
Chương IV. Các phép bi n ñ i
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
.58
Chương IV. Các phép bi n ñ i
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).
.59
Chương IV. Các phép bi n ñ i
Z

P7

P6
P5

P8
Y

P1
P2
P3

P4
X

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);
.60
Chương IV. Các phép bi n ñ i
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 ñ .
.61
Chương IV. Các phép bi n ñ i
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...

.62
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

Z

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

P4

P10

Const

P8
Y
P2

P6
P7
X

Hình 5.1

ñây, chúng ta dùng c u trúc record d a trên 2 m ng:
MaxDinh = 50; { S

ñ nh t i ña}

MaxCanh = 100; {S
Type

P3

P1

Có nhi u cách ñ lưu gi mô hình
WireFrame.

P9

P5

c nh t i ña}

ToaDo3D = record
x, y, z:real;
end;
WireFrame = Record
Chương V. Bi u di n các ñ i tư ng ba chi u
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:

Danh sách các c nh
C nh

ð nh ñ u

ð nh cu i

With House Do

1

1

2

Begin

2

2

3

sodinh:=10;

3

3

4

socanh:=17;

4

4

5

dinh[1].x:=0;

5

5

1

dinh[1].y:=0;

6

6

7

dinh[1].z:=0;

7

7

8

8

8

9

{S ñ nh th nh t c a

9

9

10

c nh s 1}

10

10

6

11

1

6

12

2

7

...

13

3

8

end;

14

4

9

15

5

10

16

2

5

17

1

3

...
canh[1, 1]:=1;

canh[1, 2]:=2; {S ñ nh th hai c a
c nh s 1}

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 .
64
Chương V. Bi u di n các ñ i tư ng ba chi u
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)
Hình 5.2

(c)

• M t Ellipsoid: (hình 5.2.a)
x=Rx.cos(u).cos(v)
y=Ry.sin(u).cos(v)
65
Chương V. Bi u di n các ñ i tư ng ba chi u
z=Rz.sin(v)
Trong ñó: 0≤ u ≤ 2π
•

M t

-π/2 ≤ v ≤ π/2

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
u
 x = R. cos( )
u,v ∈ [0,1]
 y = R. sin(u)

P1(u): ñư ng tròn 

• 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.

66
Chương V. Bi u di n các ñ i tư ng ba chi u
ð 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:
Procedure HoDuongCongU;
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.
67
Chương V. Bi u di n các ñ i tư ng ba chi u
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...

68
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
ð 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 P01 trên P0P1 . Tương t , ta chia ti p P1P2 cũng theo t l t, ta ñư c P11 . N i P01
và P11 , l i l y ñi m trên P01P11 chia theo t l t, ta ñư c P02.
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 P02.
ðó chính là ñư ng cong p(t).
Ta bi u di n b ng phương trình:
P01(t) = (1-t).P0 + t.P1

(1)

P11(t) = (1-t).P1 + t.P2

(2)

P02(t) = (1-t).P01 + t.P11

(3)

Thay (1), (2) vào (3) ta ñư c:
P(t) = P02(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 Pir(t)

th h th r, t th h th (r - 1)

trư c ñó, ta có:
Pir(t) = (1-t).Pir-1(t) + t.Pi+1r-1(t)
r = 0,1,...,L

(3’)

và i = 0,...,L-r

Th h cu i cùng P0L (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:
L

P(t) =

∑ Pk.BkL(t)
k=0

70
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
Trong ñó, P(t) là m t ñi m trong m t ph ng ho c trong không gian.
BkL(t) ñư c g i là ña th c Bernstein, ñư c cho b i công th c:
BkL(t) =

L!
(1-t)L-k.tk
k !( L − k )!

v iL≥k

M i ña th c Bernstein có b c là L. Thông thư ng ta còn g i các BkL(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:
M

L

i =0

P(u,v) =

i =0

∑ ∑ Pi,k.BiM(u).BkL(v)

Trong trư ng h p này, kh i ña di n ki m soát s có (M+1).(L+1) ñ nh.
P1

P 01

P 11
P 02

P1
P2

ðư 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) = (B0L(t), B1L(t), ..., BLL(t))
P = (P0 ,P1 , ...,PL )
Do ñó: P(t) = BL(t).P
P(t) = BL(t).PT

hay

(tích vô hư ng)
(PT là d ng chuy n v c a P)

Dư i d ng ña th c, có th bi u di n BkL(t) như sau:
BkL(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)

71
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
• 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 BiL(t) và t i v trí (i,j) trong ma tr n BezL
có giá tr BezL(i,j) = (-1)j-i.Cni.Cij
Ví d : Ma tr n Bez3 cho các ñư ng Bezier b c 3
1 0 0

−3 3 0
3
Bez = 
 3 −6 3

 −1 3 −3

0

0
0

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;
72
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
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;
73
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
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:
L

Ta có:

P(t) =

∑ Pk.BkL(t)
k=0
L

Do ñó

P(0) =

∑ Pk.BkL(0)
k=0

trong ñó: BkL(0) =
=

L!
(1-0)L-k.0k
k !( L − k )!
L!
.0 = 0
k !( L − k )!

P(0)

= P0.B0L(0)

+ PL.BLL(0)

= P0

Vì v y,

∀k ≠ 0 và k ≠ L

+ 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)
74
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
L

P’(t) = P(t).N + tr =

∑ Pk.BkL(t).N + tr
k=0

Trong ñó:
N: ma tr n bi n ñ i.
tr: vector t nh ti n.
L

Xét ñư ng cong

∑ (Pk.N + tr).BkL(t)

(*)

k=0

ñư 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).
L

L

∑ Pk.N.BkL(t) +

∑ tr.BkL(t)

k=0

Khai tri n (*) ta có:

k=0

L

L

k=0

=

k=0

∑ Pk.N.BkL(t) + tr. ∑ BkL(t)

(**)

L

Nhưng theo ña th c Bernstein thì

∑ BkL(t) = (1-t+t)L = 1 nên s

h ng th hai c a

k=0

(**) 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:
L

P(t) =

∑ ak.Pk

,

ak ≥ 0

k=0

Do P(t) là t h p l i c a các ñi m ki m soát ∀t ∈ [0,1] và

L

∑ BkL(t) = 1
k=0

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
75
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
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:
L−1

Ta có:

(P(t))’ = L. ∑ ∆Pk.BkL-1(t) ,

∆Pk = Pk+1 - Pk

k =0

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 BkL(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 BkL(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
ch nh b t kỳ m t ñi m ki m soát nào cũng s

t t c các giá tr t ∈ [0,1]. Do ñó, hi u
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

76
Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
ñư 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:
1 2

a(t) = 2 t

3
3

g(t) = b(t) = - (t - )2
4
2

1
2
c(t) = (3 - t)

2


coï mang[0,1]
giaï
coï mang[1,2]
giaï
coï mang[2,3]
giaï

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 ñó:
L

P(t) =

∑ Pk.gk(t)
k=0

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 ñó:
L

P(t) =

∑ Pk.Rk(t)
k=0

6.2. ðƯ NG CONG SPLINE VÀ B-SPLINE
6.2.1. ð nh nghĩa
L

Theo trên ta có:

P(t) =

∑ Pk.Rk(t)

(*)

k=0

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.

77
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

Mais conteúdo relacionado

Mais procurados

Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]
bookbooming1
 
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Man_Ebook
 
Excel 2010-training-book
Excel 2010-training-bookExcel 2010-training-book
Excel 2010-training-book
Hien Nguyen
 
Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++
Trần Thiên Đại
 
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
 

Mais procurados (17)

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
 
Giaotrinh excel 2010
Giaotrinh excel 2010Giaotrinh excel 2010
Giaotrinh excel 2010
 
Đề tài: Nhận dạng, phân loại, xử lý ảnh biển số xe bằng phần mềm
Đề tài: Nhận dạng, phân loại, xử lý ảnh biển số xe bằng phần mềmĐề tài: Nhận dạng, phân loại, xử lý ảnh biển số xe bằng phần mềm
Đề tài: Nhận dạng, phân loại, xử lý ảnh biển số xe bằng phần mềm
 
Quy hoạch thuỷ lợi tỉnh Vĩnh Phúc đến năm 2020 và định hướng đến năm 2030
Quy hoạch thuỷ lợi tỉnh Vĩnh Phúc đến năm 2020 và định hướng đến năm 2030 Quy hoạch thuỷ lợi tỉnh Vĩnh Phúc đến năm 2020 và định hướng đến năm 2030
Quy hoạch thuỷ lợi tỉnh Vĩnh Phúc đến năm 2020 và định hướng đến năm 2030
 
Luận văn: Bài toán nhận dạng biển số xe, HAY
Luận văn: Bài toán nhận dạng biển số xe, HAYLuận văn: Bài toán nhận dạng biển số xe, HAY
Luận văn: Bài toán nhận dạng biển số xe, HAY
 
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAYLuận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
 
Shop AI
Shop AIShop AI
Shop AI
 
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
 
Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]Giao trinh-phan-cung-dien-tu[bookbooming.com]
Giao trinh-phan-cung-dien-tu[bookbooming.com]
 
Thiết kế nhà máy bia năng suất 15 triệu lít/năm
Thiết kế nhà máy bia năng suất 15 triệu lít/nămThiết kế nhà máy bia năng suất 15 triệu lít/năm
Thiết kế nhà máy bia năng suất 15 triệu lít/năm
 
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
 
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
 
Excel 2010-training-book
Excel 2010-training-bookExcel 2010-training-book
Excel 2010-training-book
 
Code igniter v1
Code igniter v1Code igniter v1
Code igniter v1
 
Luận văn: Thiết kế tối ưu cửa van cung bằng phần mềm SAP2000
Luận văn: Thiết kế tối ưu cửa van cung bằng phần mềm SAP2000Luận văn: Thiết kế tối ưu cửa van cung bằng phần mềm SAP2000
Luận văn: Thiết kế tối ưu cửa van cung bằng phần mềm SAP2000
 
Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++
 
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]
 

Destaque

Tailieu.vncty.com canh tranh va nang cao nang luc canh tranh tren thi truon...
Tailieu.vncty.com   canh tranh va nang cao nang luc canh tranh tren thi truon...Tailieu.vncty.com   canh tranh va nang cao nang luc canh tranh tren thi truon...
Tailieu.vncty.com canh tranh va nang cao nang luc canh tranh tren thi truon...
Trần Đức Anh
 
Legalizacion de las drogas 2
Legalizacion de las drogas 2Legalizacion de las drogas 2
Legalizacion de las drogas 2
genesis7g
 
Energy crisis in pakistan real
Energy crisis in pakistan realEnergy crisis in pakistan real
Energy crisis in pakistan real
Samia Dogar
 
Media language
Media languageMedia language
Media language
Lily He
 

Destaque (20)

Tailieu.vncty.com thuc trang cong tac kiem toan o viet nam
Tailieu.vncty.com   thuc trang cong tac kiem toan o viet namTailieu.vncty.com   thuc trang cong tac kiem toan o viet nam
Tailieu.vncty.com thuc trang cong tac kiem toan o viet nam
 
Tailieu.vncty.com dt22
Tailieu.vncty.com   dt22Tailieu.vncty.com   dt22
Tailieu.vncty.com dt22
 
Tailieu.vncty.com van dung-tu_tuong_su_pham_tich_hop_trong_day_hoc_mot_so_k...
Tailieu.vncty.com   van dung-tu_tuong_su_pham_tich_hop_trong_day_hoc_mot_so_k...Tailieu.vncty.com   van dung-tu_tuong_su_pham_tich_hop_trong_day_hoc_mot_so_k...
Tailieu.vncty.com van dung-tu_tuong_su_pham_tich_hop_trong_day_hoc_mot_so_k...
 
Tailieu.vncty.com canh tranh va nang cao nang luc canh tranh tren thi truon...
Tailieu.vncty.com   canh tranh va nang cao nang luc canh tranh tren thi truon...Tailieu.vncty.com   canh tranh va nang cao nang luc canh tranh tren thi truon...
Tailieu.vncty.com canh tranh va nang cao nang luc canh tranh tren thi truon...
 
Tailieu.vncty.com dt22
Tailieu.vncty.com   dt22Tailieu.vncty.com   dt22
Tailieu.vncty.com dt22
 
Tailieu.vncty.com hợp nhat thau tom doanh nghiep duoi goc nhin tai chinh
Tailieu.vncty.com   hợp nhat thau tom doanh nghiep duoi goc nhin tai chinhTailieu.vncty.com   hợp nhat thau tom doanh nghiep duoi goc nhin tai chinh
Tailieu.vncty.com hợp nhat thau tom doanh nghiep duoi goc nhin tai chinh
 
Tailieu.vncty.com giao trinh quan tri ban hang
Tailieu.vncty.com   giao trinh quan tri ban hangTailieu.vncty.com   giao trinh quan tri ban hang
Tailieu.vncty.com giao trinh quan tri ban hang
 
Tailieu.vncty.com nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
Tailieu.vncty.com   nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...Tailieu.vncty.com   nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
Tailieu.vncty.com nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
 
Tailieu.vncty.com tieu luan giua ki de tai phuong phap quay lui
Tailieu.vncty.com   tieu luan giua ki de tai  phuong phap quay luiTailieu.vncty.com   tieu luan giua ki de tai  phuong phap quay lui
Tailieu.vncty.com tieu luan giua ki de tai phuong phap quay lui
 
Polimorfismo2015c1
Polimorfismo2015c1Polimorfismo2015c1
Polimorfismo2015c1
 
Legalizacion de las drogas 2
Legalizacion de las drogas 2Legalizacion de las drogas 2
Legalizacion de las drogas 2
 
Presentacion proyecto planeta vivo
Presentacion proyecto planeta vivoPresentacion proyecto planeta vivo
Presentacion proyecto planeta vivo
 
Energy crisis in pakistan real
Energy crisis in pakistan realEnergy crisis in pakistan real
Energy crisis in pakistan real
 
Nallely tupiza
Nallely tupizaNallely tupiza
Nallely tupiza
 
Embarazo ectopico
Embarazo ectopicoEmbarazo ectopico
Embarazo ectopico
 
On the Ground Validation of Online Diagnosis with Twitter and Medical Records
On the Ground Validation of Online Diagnosis with Twitter and Medical RecordsOn the Ground Validation of Online Diagnosis with Twitter and Medical Records
On the Ground Validation of Online Diagnosis with Twitter and Medical Records
 
anneiles leal
anneiles lealanneiles leal
anneiles leal
 
official_transcript
official_transcriptofficial_transcript
official_transcript
 
Daisy Mae's Vintaige Home
Daisy Mae's Vintaige HomeDaisy Mae's Vintaige Home
Daisy Mae's Vintaige Home
 
Media language
Media languageMedia language
Media language
 

Semelhante a Giao trinh ly thuyet do hoa

Phan tich va thiet ke he thong tin
Phan tich va thiet ke he thong tinPhan tich va thiet ke he thong tin
Phan tich va thiet ke he thong tin
Huy Lee
 
Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010
Cao Toa
 

Semelhante a Giao trinh ly thuyet do hoa (20)

Link asm in another language
Link asm in another languageLink asm in another language
Link asm in another language
 
Dgthcv Bctttn Anh Nguyet
Dgthcv Bctttn Anh NguyetDgthcv Bctttn Anh Nguyet
Dgthcv Bctttn Anh Nguyet
 
Đồ án môn học thiết kế trạm xử lý nước thải KCN Hiệp Phước
Đồ án môn học thiết kế trạm xử lý nước thải KCN Hiệp PhướcĐồ án môn học thiết kế trạm xử lý nước thải KCN Hiệp Phước
Đồ án môn học thiết kế trạm xử lý nước thải KCN Hiệp Phước
 
Đề 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
 
Bai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệuBai giang hệ quản trị cơ sở dữ liệu
Bai giang hệ quản trị cơ sở dữ liệu
 
Php
PhpPhp
Php
 
Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7 Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Bài giảng Toán kinh tế
Bài giảng Toán kinh tếBài giảng Toán kinh tế
Bài giảng Toán kinh tế
 
Tài liệu hướng dẫn phần mềm quản lý chấm công Att_Paradise Viettinsoft
Tài liệu hướng dẫn phần mềm quản lý chấm công Att_Paradise ViettinsoftTài liệu hướng dẫn phần mềm quản lý chấm công Att_Paradise Viettinsoft
Tài liệu hướng dẫn phần mềm quản lý chấm công Att_Paradise Viettinsoft
 
thuyết minh đồ án thép 2
thuyết minh đồ án thép 2 thuyết minh đồ án thép 2
thuyết minh đồ án thép 2
 
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...
 
Crystal repor
Crystal reporCrystal repor
Crystal repor
 
Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT
 
Phan tich va thiet ke he thong tin
Phan tich va thiet ke he thong tinPhan tich va thiet ke he thong tin
Phan tich va thiet ke he thong tin
 
Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010
 
Tiểu luận môn quản trị học phân tích quản trị tại kfc
Tiểu luận môn quản trị học phân tích quản trị tại kfcTiểu luận môn quản trị học phân tích quản trị tại kfc
Tiểu luận môn quản trị học phân tích quản trị tại kfc
 
Luận văn: Đánh giá thực hiện công việc tại Báo điện tử VTV News - Đài Truyền ...
Luận văn: Đánh giá thực hiện công việc tại Báo điện tử VTV News - Đài Truyền ...Luận văn: Đánh giá thực hiện công việc tại Báo điện tử VTV News - Đài Truyền ...
Luận văn: Đánh giá thực hiện công việc tại Báo điện tử VTV News - Đài Truyền ...
 

Mais de Trần Đức Anh

Mais de Trần Đức Anh (20)

Tailieu.vncty.com 5275 1261
Tailieu.vncty.com   5275 1261Tailieu.vncty.com   5275 1261
Tailieu.vncty.com 5275 1261
 
Tailieu.vncty.com 5249 5591
Tailieu.vncty.com   5249 5591Tailieu.vncty.com   5249 5591
Tailieu.vncty.com 5249 5591
 
Tailieu.vncty.com 5219 0449
Tailieu.vncty.com   5219 0449Tailieu.vncty.com   5219 0449
Tailieu.vncty.com 5219 0449
 
Tailieu.vncty.com 5208 2542
Tailieu.vncty.com   5208 2542Tailieu.vncty.com   5208 2542
Tailieu.vncty.com 5208 2542
 
Tailieu.vncty.com 5145 0887
Tailieu.vncty.com   5145 0887Tailieu.vncty.com   5145 0887
Tailieu.vncty.com 5145 0887
 
Tailieu.vncty.com 5142 5647
Tailieu.vncty.com   5142 5647Tailieu.vncty.com   5142 5647
Tailieu.vncty.com 5142 5647
 
Tailieu.vncty.com 5138 529
Tailieu.vncty.com   5138 529Tailieu.vncty.com   5138 529
Tailieu.vncty.com 5138 529
 
Tailieu.vncty.com 5125 4608
Tailieu.vncty.com   5125 4608Tailieu.vncty.com   5125 4608
Tailieu.vncty.com 5125 4608
 
Tailieu.vncty.com 5117 1019
Tailieu.vncty.com   5117 1019Tailieu.vncty.com   5117 1019
Tailieu.vncty.com 5117 1019
 
Tailieu.vncty.com 5106 4775
Tailieu.vncty.com   5106 4775Tailieu.vncty.com   5106 4775
Tailieu.vncty.com 5106 4775
 
Tailieu.vncty.com 5089 2417
Tailieu.vncty.com   5089 2417Tailieu.vncty.com   5089 2417
Tailieu.vncty.com 5089 2417
 
Tailieu.vncty.com 5088 8018
Tailieu.vncty.com   5088 8018Tailieu.vncty.com   5088 8018
Tailieu.vncty.com 5088 8018
 
Tailieu.vncty.com 5067 1967
Tailieu.vncty.com   5067 1967Tailieu.vncty.com   5067 1967
Tailieu.vncty.com 5067 1967
 
Tailieu.vncty.com nst gioi-tinh_va_di_truyen_lien_ket_gioi_tinh_747
Tailieu.vncty.com   nst gioi-tinh_va_di_truyen_lien_ket_gioi_tinh_747Tailieu.vncty.com   nst gioi-tinh_va_di_truyen_lien_ket_gioi_tinh_747
Tailieu.vncty.com nst gioi-tinh_va_di_truyen_lien_ket_gioi_tinh_747
 
Tailieu.vncty.com nhom 6-de_tai_flo_9602
Tailieu.vncty.com   nhom 6-de_tai_flo_9602Tailieu.vncty.com   nhom 6-de_tai_flo_9602
Tailieu.vncty.com nhom 6-de_tai_flo_9602
 
Tailieu.vncty.com lai phan-tu_2413
Tailieu.vncty.com   lai phan-tu_2413Tailieu.vncty.com   lai phan-tu_2413
Tailieu.vncty.com lai phan-tu_2413
 
Tailieu.vncty.com duong hoa-hoc_3666
Tailieu.vncty.com   duong hoa-hoc_3666Tailieu.vncty.com   duong hoa-hoc_3666
Tailieu.vncty.com duong hoa-hoc_3666
 
Tailieu.vncty.com do an-nhan_giong_in_vi_tro_cay_co_ngot_stevia_4562
Tailieu.vncty.com   do an-nhan_giong_in_vi_tro_cay_co_ngot_stevia_4562Tailieu.vncty.com   do an-nhan_giong_in_vi_tro_cay_co_ngot_stevia_4562
Tailieu.vncty.com do an-nhan_giong_in_vi_tro_cay_co_ngot_stevia_4562
 
Tailieu.vncty.com tieu luanc4v-1324
Tailieu.vncty.com   tieu luanc4v-1324Tailieu.vncty.com   tieu luanc4v-1324
Tailieu.vncty.com tieu luanc4v-1324
 
Tailieu.vncty.com do an-cong_nghe_san_xuat_sua_tiet_trung_9366
Tailieu.vncty.com   do an-cong_nghe_san_xuat_sua_tiet_trung_9366Tailieu.vncty.com   do an-cong_nghe_san_xuat_sua_tiet_trung_9366
Tailieu.vncty.com do an-cong_nghe_san_xuat_sua_tiet_trung_9366
 

Giao trinh ly thuyet do hoa

  • 1.
  • 2. M CL 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 IM ð 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 1.1. T NG QUAN V ð CƠ S C Að H A 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 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 2
  • 8. Chương I. Các y u t cơ s c a ñ h a 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) 3
  • 9. Chương I. Các y u t cơ s c a ñ h a ðâ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),... 4
  • 10. Chương I. Các y u t cơ s c a ñ h a • 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: 5
  • 11. Chương I. Các y u t cơ s c a ñ h a • 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; 6
  • 12. Chương I. Các y u t cơ s c a ñ h a 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 O MaxX Y X X MaxY 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 7
  • 13. Chương I. Các y u t cơ s c a ñ h a 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; x = x1; IncY = ∆y/Step; {bư c tăng khi v } {Ch n ñi m v ñ u tiên} y = y1; 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; 8
  • 14. Chương I. Các y u t cơ s c a ñ h a 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: x − x1 y − y1 = x 2 − x1 y 2 − y1 ð t yi+ 1 y (*) yi ∆x = x2 - x1 ∆y = y2 - y1 (*) ⇔ y = x. xi ∆y ∆y + y1 - x1. ∆x ∆x ∆y ∆x xi+1 Hình 1.2 ∆y = m. ∆x (2) b = y1 - m.x1 Suy ra m = (3) nên 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à: 9
  • 15. Chương I. Các y u t cơ s c a ñ h a (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. ∆y .(xi + 1) - 2yi + 2b - 1 ∆x ⇔ ∆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. . N u pi ≥ 0: Ch n yi+1 = yi + 1 (d1<d2) 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) 10
  • 16. Chương I. Các y u t cơ s c a ñ h a • Bư c 4: Ti p t c tăng x lên 1 Pixel. pi+1 = pi + 2∆y v trí xi +1, ta tính: 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; 11
  • 17. Chương I. Các y u t cơ s c a ñ h a 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 + 1 ) 2 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 P yi+ 1 Q M th ng ⇒ Q n m trên M ⇒ Ch n P M t khác: pi pi+1 = F(xi+1 + 1,yi+1 + S yi 1 = F(xi + 1,yi + ) 2 xi xi+1 1 ) 2 Hình 1.3 nên pi+1 - pi = F(xi+1 + 1,yi+1 + 1 1 ) - F(xi + 1,yi + ) 2 2 12
  • 18. Chương I. Các y u t cơ s c a ñ h a = A(xi+1+1) + B(yi+1 + 1 1 ) + C - A(xi+1) - B(yi + ) - C 2 2 = 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 + 1 1 ) = A(x1+1) + B(y1 + ) + C 2 2 = Ax1 + Bx1 + C + A + B B =A+ (vì Ax1 + Bx1 + C = 0) 2 2 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. (y,x) (y,x ) (x,y ) (-x,y) (-y,x) (x,y) 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 ± R2 − ( x − xC ) 2 (*) (1) ð ñơn gi n thu t toán, ñ u tiên ta xét ñư ng tròn có tâm (x,y) 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 ( y,- Hình 1.4 (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à: 13
  • 19. Chương I. Các y u t cơ s c a ñ h a y2 = R2 - (xi +1)2 d1 = yi2 - y2 = yi2 - R2 + (xi + 1)2 ð t: d2 = y2 - (yi - 1)2 = R2 - (xi + 1)2 - (yi - 1)2 Suy ra: pi = d1 - d2 = 2.(xi + 1)2 + yi2 + (yi - 1)2 - 2R2 ⇒ pi+1 = 2.(xi+1 + 1)2 + y2i+1 + (yi+1 - 1)2 - 2R2 (2) yi y yi1 (3) T (2) và (3) ta có: pi+1 - pi = 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi) ⇒ pi+1 = pi + 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi) xi xi+1 Hình 1.5 (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); 14
  • 20. Chương I. Các y u t cơ s c a ñ h a 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 2 2 2 ð t F(x,y) = x + y - R ,ta có: < 0 n u (x,y) = 0 n u (x,y) trên ñư ng tròn M Q P trong ñư ng tròn > 0 n u (x,y) F(x,y) S yi 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 - yi1 xi xi+1 Hình 1.6 1 ) (Hình 1.6) 2 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 15
  • 21. Chương I. Các y u t cơ s c a ñ h a M t khác: pi = F(xi + 1,yi - 1 ) 2 pi+1 = F(xi+1 + 1,yi+1 - 1 ) 2 nên pi+1 - pi = F(xi+1 + 1,yi+1 - 1 1 ) - F(xi + 1,yi - ) 2 2 = [(xi+1+1)2 + (yi+1 = [(xi+2)2 + (yi+1 - 1 2 1 ) - R2] - [(xi+1)2 + (yi - )2 - R2] 2 2 1 2 1 ) - R2] - [(xi+1)2 + (yi - )2 - R2] 2 2 = 2xi + 3 + (yi+12 - yi2) - (yi+1 - yi) Suy ra: pi+1 = pi + 2xi + 3 + (yi+12 - yi2) - (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 - 1 1 1 5 ) = F(1,R - ) = 1 + (R - )2 - R2 = - R 4 2 2 2 1.6. THU T TOÁN V ELLIPSE ð ñơn gi n, ta ch n Ellipse có tâm g ct a ñ . Phương trình c a nó có d ng: y2 x2 + 2 =1 a2 b Ta có th vi t l i: y2 = - b2 2 .x + b2 2 a (*) *Ý tư ng: Gi ng như thu t toán v ñư ng tròn. Ch có s khác bi t Hình 1.7 ñâ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) : 16
  • 22. Chương I. Các y u t cơ s c a ñ h a x0 . y x + y0. 2 = 1 2 a b Suy ra, h s góc c a ti p tuy n t i ñi m ñó là: - x 0 .b 2 . y0 a 2 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) y2 = - Thay (xi +1) vào (*): b2 .(xi +1)2 + b2 2 a ð t: d1= yi2 - y2 = yi2 + d2= y2 - (yi -1)2 = - b2 .(xi +1)2 -b2 2 a b2 .(xi +1)2 + b2 - (yi -1)2 2 a b2 ⇒ pi = d1 - d2 = 2.[ 2 .(xi +1)2 - b2] + 2.(yi2 + yi) -1 a pi+1 = 2.[ b2 .(xi+1 +1)2 - b2] + 2.(yi+12 + yi+1) -1 2 a Suy ra: pi+1 - pi = 2. b2 .[(xi+1 +1)2 - (xi +1)2] + 2.( yi+12 - yi2 + yi+1 - yi) 2 a (**) *Nh n xét: • pi < 0: Ch n yi+1 = yi (**) ⇒ pi+1 = pi + 2. b2 .(2x + 3) a2 • pi ≥ 0: Ch n yi+1 = yi -1 (**) ⇒ pi+1 = pi + 2. b2 .(2x + 3) - 4yi a2 V i ñi m ñ u tiên (0,b), ta có: p1 = 2 b2 - 2b + 1 a2 T ñó, ta có th t c v Ellipse như sau: 17
  • 23. Chương I. Các y u t cơ s c a ñ h a 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 18
  • 24. Chương I. Các y u t cơ s c a ñ h a 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: y2 x2 + 2 =1 a2 b Nhánh 1: p1 = b2 - a 2 b + 1 2 .a 4 If pi < 0 Then pi+1 = pi + b2 + 2b2xi+1 else pi+1 = pi + b2 + 2b2xi+1 - 2a2yi+1 Nhánh 2: p1 = b2(xi + 1 2 ) + a2(yi - 1)2 - a2b2 2 If pi > 0 Then pi+1 = pi + a2 - 2a2yi+1 else pi+1 = pi + a2 + 2b2xi+1 - 2a2yi+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); 19
  • 25. Chương I. Các y u t cơ s c a ñ h a 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; 20
  • 26. Chương I. Các y u t cơ s c a ñ h a 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); 21
  • 27. Chương I. Các y u t cơ s c a ñ h a 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 22
  • 28. Chương I. Các y u t cơ s c a ñ h a 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= ax + b , cx + d y= ax 2 + bx + c . dx + e 12. V các ñư ng cong sau: 2 y = 2px y2 x2 + 2 =1 a2 b y2 x2 - 2 = ±1 a2 b 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. 23
  • 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 Z Cyan Blue Magenta White Y Black Green Red Yellow X 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 :  C  1  R   M  = 1 − G        Y  1  B       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: 26
  • 31. Chương II. Tô màu 0.114   R  Y  0.299 0.587  I  = 0.596 − 0.275 − 0.321 * G        Q  0.212 − 0.523 0.311   B        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 V Yellow Green 1.0 Cyan White Blue Red White H S 0.0 Black 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). 1.0 L White Yellow Green 0.5 Cyan Blue Red White H S 0.0 Black Hình 2.3. H màu HSL 27
  • 32. Chương II. Tô màu 2.2. CÁC THU T TOÁN TÔ MÀU 2.2.1. Bài toán P2 Cho ña giác S xác ñ nh b i n ñ nh : P1, P2, W P1 ..., Pn. Hãy tô màu mi n S. * Phương pháp t ng quát : P3 S - Tìm hình ch nh t W nh nh t ch a S P5 (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. P4 Hình 2.4 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 -N u ∑ dt(S ) i =1 i = dt(S) thì P ∈ S. Ta có công th c tính di n tích c a S: 1 n ( S= | ∑xi yi+1 −xi+1yi) | 2 i=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ì 28
  • 33. Chương II. Tô màu • 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; 29
  • 34. Chương II. Tô màu 2.2.3. Thu t toán tô màu theo dòng quét (Scanline) ð t x0 = Min(xi), i∈ [1,n]. y Bư c 1: K Dy//0y ñi qua x0 (hình 2.5). Dy 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 x0 x xi Hình 2.5 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). X X O N u các ñi m lân c n ñó v n còn thu c S và chưa O X X ñư 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 Hình 2.6 ñ qui: Procedure TOLOANG(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); 30
  • 35. Chương II. Tô màu 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. 31
  • 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 = ( x, y ) ∈ R 2 |  X min ≤ x ≤ X max   Y min ≤ y ≤ Y max  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 = x1 + ( x 2 − x1). t   y = y1 + ( y 2 − y1). t 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 ≤ y1+ (y2 - y1). t ≤ Ymax  0≤ t ≤1  G i N là t p nghi m c a h phương trình A y yMax P Q yMin B xMin trên. Hình 3.1 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: xMax X
  • 37. Chương III. Xén hình  Px = x1 + ( x 2 − x1). t 1   Py = y1 + ( y 2 − y1). t 1 thì: ClipD(F) = PQ  Qx = x1 + ( x 2 − x1). t 2  Qy = y1 + ( y 2 − y1). t 2 (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 100 1 100 0 101 0 Bit 3: Qui ñ nh vùng n m bên dư i c a s 000 1 000 0 001 0 Bit 4: Qui ñ nh vùng n m bên trên c a s 010 1 010 0 011 0 Bit 2: Qui ñ nh vùng n m bên ph i c a s • Xét ñi m P ∈ R2 : Hình 3.2 1 0 nãúuPx < X min Ngæåüc laûi 1 0 nãúuP > X max x Ngæåüc laûi 1 0 nãúuPy < Y min Ngæåüc laûi 1  0 nãúuPy > Y max Ngæåüc laûi Pleft =  PRight =  PBelow =  PAbove = • 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. 33
  • 38. Chương III. Xén hình ♦ 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. 34
  • 39. Chương III. Xén hình 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) = A1B1 3.2.1.3. Thu t toán Liang - Barsky ∆x = x2 - x1 ∆y = y2 - y1 p1 = - ∆x q1 = x1 - xMin p2 = ∆x q2 = xMax - x1 p3 = - ∆y q3 = y1 - yMin p4 = ∆y ð t 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: Pk .t ≤ Q k , k = 1..4   0 ≤ t ≤1 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 ) 35
  • 40. Chương III. Xén hình ⇒ 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({ Qk | k ∈ K2} ∪ {0}) Pk u2 = Min({ Qk | k ∈ K1} ∪ {1}) Pk N u u1 > u2 thì ClipD(F) = ∅ Ngư c l i: G i P, Q là 2 ñi m th a  Px = x1 + ∆x.u1 Qx = x1 + ∆x.u2 và   Py = y1 + ∆y.u1 Qy = y1 + ∆y.u2 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). y G i R là ma tr n quay c a phép ñ i tr c, ta có:  X min  X min   = R.    Y min   Y min  α  X max  X max   = R.    Y max   Y max  x O v i  cos(α ) sin(α )    − sin(α ) cos(α ) R=  Hình 3.3 36
  • 41. Chương III. Xén hình 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). A * Thu t toán: B • Tính d(O,AB) • Xét các trư ng h p: i/ N u d > R thì ClipD(F) = ∅ Hình 3.4 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)  x = x1 + ( x 2 − x1).λ  ◊ Phương trình ño n AB:  y = y1 + ( y 2 − y1).λ  0 ≤ λ ≤1  (2) ◊ Thay (2) vào (1) ta suy ra: λ = − a ± a 2 − bc b Trong ñó: a = ∆x.(x1 - xc) + ∆y.(y1 - yc) b = (∆x)2 + (∆y)2 c = (x1 - xc)2 + (y1 - yc)2 - R2 37
  • 42. Chương III. Xén hình ∆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/ Hình 3.5 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) 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. 38
  • 43. Chương III. Xén hình 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 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 i/ chính là ña giác và bài toán coi như ñã ñư c gi i quy t. Ai+ Ai Ai Ai+ Ai+ Ai+ Ai+ Ai Ai Ai 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. 39
  • 44. Chương III. Xén hình - 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. 40
  • 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: A B  + (trx try)  C D (x’ y’) = (x y).   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; A B  - ma tr n bi n ñ i.  C D M=   4.1.1.1. Phép ñ ng d ng Ma tr n c a phép ñ ng d ng là:  A 0   0 D M=   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 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à  Cos (α ) Sin(α )     − Sin(α ) Cos (α )  R=   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): 1  (x y 1).  0  M 0 1 N 0  0 = (x + M  1 y+N 1) 4.1.1.5. Phép bi n d ng Ma tr n t ng quát là: M =  1 g  Trong ñó:  h   1  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. .42
  • 47. Chương IV. Các phép bi n ñ i 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  −M 0 1 −N 0  Cos(α ) Sin (α ) 0  1     0 .  − Sin (α ) Cos(α ) 0 .  0     1  0 0 1  M 0 1 N 0  0  1 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), .43
  • 48. Chương IV. Các phép bi n ñ i 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 .44
  • 49. Chương IV. Các phép bi n ñ i 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 ñ : Z Z Y Y O X 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). .45
  • 50. Chương IV. Các phép bi n ñ i • 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: Z Z P(R,θ,φ) P(x,y,z) R Y φ O O Y θ X X 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(Φ) Φ R 2 = x2 + y 2 + z 2 ð 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  A 0 0 0    0 B 0 0 M=  0 0 C 0    0 0 0 1 ⇔  x ' = A. x   y ' = B. y  z ' = C. z  .46
  • 51. Chương IV. Các phép bi n ñ i 4.2.2.2. Phép ñ i x ng 1  0 Mz =  0  0 0  0 0 −1 0  0 0 1 0 1 0 0 1 0  0 −1 My=  0 0  0 0  −1  0 Mx =  0  0 ñ i x ng qua m t (XY) 0 0  0 0 1 0  0 1 ñ i x ng qua m t (XZ) 0 0 0  1 0 0 0 1 0  0 0 1 ñ i x ng qua m t (YZ) 4.2.2.3. Phép t nh ti n 1  0 M=  0  M 0 1 0 N 0  0 1 0  P 1 0 0 ⇔ 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:  Cos (θ ) Sin(θ )   − Sin(θ ) Cos (θ ) RZ =  0 0   0 0  0 0  0 0 1 0  0 1  0 0 1   0 Cos (θ ) Sin(θ ) RX =  0 − Sin(θ ) Cos (θ )  0 0 0  0  0 0  1  .47
  • 52. Chương IV. Các phép bi n ñ i  Cos (θ )  0  RY =  − Sin(θ )   0  Sin(θ ) 0  1 0 0 0 Cos (θ ) 0   0 0 1  0 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  6 −2 −3  1 0 0        1 3 3 .  −1 1 0  =  0 1 0        1 2 4  −1 0 1   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. .48
  • 53. Chương IV. Các phép bi n ñ i Z P(x,y,z) z' P' y' (E,0,0) X Maét Y Maët phaún g 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 . Thay t vào (*) ta 1− x / E tính ñư c: y’ = y z va z’ = 1− x / E 1− x / E 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. .49
  • 54. Chương IV. Các phép bi n ñ i 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. A A' Taâm chieáu (∝) B' B Maët phaúng chieáu 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. Y0 Z Z0 YE O' XE Y φ O X0 θ X Maøn hình 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). .50
  • 55. Chương IV. Các phép bi n ñ i • 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). Z1 Z Y1 O' φ O θ Y X1 X Hình 4.6 Ma tr n c a phép t nh ti n (L y ngh ch ñ o):  1  0 A=   0  −M 0 1 0 −N 0 1 0 0    0 0 1 0 =  1 0 0 0 1   − P 1  − R. Cos(θ ). Cos(φ ) − R. Sin (θ ). Cos(φ ) − R. Sin (φ ) 0 0 0  0 0  1 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-1z. .51
  • 56. Chương IV. Các phép bi n ñ i  Cos( a ) Sin ( a )  − Sin ( a ) Cos( a ) Rz =   0 0  0  0  Cos( a ) − Sin ( a )  -1  Sin ( a ) Cos( a ) R z=  0 0  0  0 0 0  0 0 1 0  0 1 0 0  0 0 1 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(θ) θ θ θ θ Z Z2 O' Y2 Y φ O θ θ' X2 X Hình 4.7 Nên ma tr n c a phép quay tìm ñư c s có d ng:  Sin (θ ) Cos(θ )  − Cos(θ ) Sin (θ ) B=   0 0  0 0  Bư c 0 0  0 0 và h (X1,Y1,Z1) bi n ñ i thành h (X2,Y2,Z2). 1 0  0 1 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ó: 0 0 1   0 Cos (a ) Sin(a ) Rx =  0 − Sin(a ) Cos (a )  0 0 0  0  0 0  1  .52
  • 57. Chương IV. Các phép bi n ñ i Z Y3 O' Z3 φ O θ X3 Y θ' X Hình 4.8 0 0 1  0 Cos( a ) − Sin ( a ) R-1x =   0 Sin ( a ) Cos( a )  0 0 0 0  0 0  1 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: 0 0 1  0 − Sin (φ ) − Cos(φ ) C=   0 Cos(φ ) − Sin (φ )  0 0 0 0  0 0  1 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:  −1  0 D=  0  0 0 0 0  1 0 0 0 1 0  0 0 1 và h (X3,Y3,Z3) bi n ñ i thành h (X0,Y0,Z0). .53
  • 58. Chương IV. Các phép bi n ñ i Z Y0 X0 O' Z0 Y φ O θ' θ X 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:  − sin(θ ) − Cos(θ ). Sin (φ ) − Cos(θ ). Cos(φ )  Cos(θ ) − Sin (θ ). Sin (φ ) − Sin (θ ). Cos(φ ) T=   0 Cos(φ ) − Sin (φ )  0 R  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) .54
  • 59. Chương IV. Các phép bi n ñ i Y0 P(x0,y0,z0) P'(xE,yE,zE) Z0 O Maøn hình X0 Y0 P(x0,y0,z0) yE O D Maøn hình Z0 O xE P(x0,y0,z0) X0 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 .55
  • 60. Chương IV. Các phép bi n ñ i Phoùng to Thu nhoû Maét Vaät theå Maøn hình Maøn hình 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; .56
  • 61. Chương IV. Các phép bi n ñ i 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); .57
  • 62. Chương IV. Các phép bi n ñ i 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 .58
  • 63. Chương IV. Các phép bi n ñ i 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). .59
  • 64. Chương IV. Các phép bi n ñ i Z P7 P6 P5 P8 Y P1 P2 P3 P4 X 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); .60
  • 65. Chương IV. Các phép bi n ñ i 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 ñ . .61
  • 66. Chương IV. Các phép bi n ñ i 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... .62
  • 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 Z 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 P4 P10 Const P8 Y P2 P6 P7 X Hình 5.1 ñây, chúng ta dùng c u trúc record d a trên 2 m ng: MaxDinh = 50; { S ñ nh t i ña} MaxCanh = 100; {S Type P3 P1 Có nhi u cách ñ lưu gi mô hình WireFrame. P9 P5 c nh t i ña} ToaDo3D = record x, y, z:real; end; WireFrame = Record
  • 68. Chương V. Bi u di n các ñ i tư ng ba chi u 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: Danh sách các c nh C nh ð nh ñ u ð nh cu i With House Do 1 1 2 Begin 2 2 3 sodinh:=10; 3 3 4 socanh:=17; 4 4 5 dinh[1].x:=0; 5 5 1 dinh[1].y:=0; 6 6 7 dinh[1].z:=0; 7 7 8 8 8 9 {S ñ nh th nh t c a 9 9 10 c nh s 1} 10 10 6 11 1 6 12 2 7 ... 13 3 8 end; 14 4 9 15 5 10 16 2 5 17 1 3 ... canh[1, 1]:=1; canh[1, 2]:=2; {S ñ nh th hai c a c nh s 1} 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 . 64
  • 69. Chương V. Bi u di n các ñ i tư ng ba chi u 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) Hình 5.2 (c) • M t Ellipsoid: (hình 5.2.a) x=Rx.cos(u).cos(v) y=Ry.sin(u).cos(v) 65
  • 70. Chương V. Bi u di n các ñ i tư ng ba chi u z=Rz.sin(v) Trong ñó: 0≤ u ≤ 2π • M t -π/2 ≤ v ≤ π/2 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 u  x = R. cos( ) u,v ∈ [0,1]  y = R. sin(u) P1(u): ñư ng tròn  • 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. 66
  • 71. Chương V. Bi u di n các ñ i tư ng ba chi u ð 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: Procedure HoDuongCongU; 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. 67
  • 72. Chương V. Bi u di n các ñ i tư ng ba chi u 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... 68
  • 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 ð 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 P01 trên P0P1 . Tương t , ta chia ti p P1P2 cũng theo t l t, ta ñư c P11 . N i P01 và P11 , l i l y ñi m trên P01P11 chia theo t l t, ta ñư c P02. 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 P02. ðó chính là ñư ng cong p(t). Ta bi u di n b ng phương trình: P01(t) = (1-t).P0 + t.P1 (1) P11(t) = (1-t).P1 + t.P2 (2) P02(t) = (1-t).P01 + t.P11 (3) Thay (1), (2) vào (3) ta ñư c: P(t) = P02(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 Pir(t) th h th r, t th h th (r - 1) trư c ñó, ta có: Pir(t) = (1-t).Pir-1(t) + t.Pi+1r-1(t) r = 0,1,...,L (3’) và i = 0,...,L-r Th h cu i cùng P0L (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: L P(t) = ∑ Pk.BkL(t) k=0 70
  • 75. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline Trong ñó, P(t) là m t ñi m trong m t ph ng ho c trong không gian. BkL(t) ñư c g i là ña th c Bernstein, ñư c cho b i công th c: BkL(t) = L! (1-t)L-k.tk k !( L − k )! v iL≥k M i ña th c Bernstein có b c là L. Thông thư ng ta còn g i các BkL(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: M L i =0 P(u,v) = i =0 ∑ ∑ Pi,k.BiM(u).BkL(v) Trong trư ng h p này, kh i ña di n ki m soát s có (M+1).(L+1) ñ nh. P1 P 01 P 11 P 02 P1 P2 ðư 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) = (B0L(t), B1L(t), ..., BLL(t)) P = (P0 ,P1 , ...,PL ) Do ñó: P(t) = BL(t).P P(t) = BL(t).PT hay (tích vô hư ng) (PT là d ng chuy n v c a P) Dư i d ng ña th c, có th bi u di n BkL(t) như sau: BkL(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) 71
  • 76. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline • 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 BiL(t) và t i v trí (i,j) trong ma tr n BezL có giá tr BezL(i,j) = (-1)j-i.Cni.Cij Ví d : Ma tr n Bez3 cho các ñư ng Bezier b c 3 1 0 0  −3 3 0 3 Bez =   3 −6 3   −1 3 −3 0  0 0  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; 72
  • 77. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline 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; 73
  • 78. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline 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: L Ta có: P(t) = ∑ Pk.BkL(t) k=0 L Do ñó P(0) = ∑ Pk.BkL(0) k=0 trong ñó: BkL(0) = = L! (1-0)L-k.0k k !( L − k )! L! .0 = 0 k !( L − k )! P(0) = P0.B0L(0) + PL.BLL(0) = P0 Vì v y, ∀k ≠ 0 và k ≠ L + 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) 74
  • 79. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline L P’(t) = P(t).N + tr = ∑ Pk.BkL(t).N + tr k=0 Trong ñó: N: ma tr n bi n ñ i. tr: vector t nh ti n. L Xét ñư ng cong ∑ (Pk.N + tr).BkL(t) (*) k=0 ñư 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). L L ∑ Pk.N.BkL(t) + ∑ tr.BkL(t) k=0 Khai tri n (*) ta có: k=0 L L k=0 = k=0 ∑ Pk.N.BkL(t) + tr. ∑ BkL(t) (**) L Nhưng theo ña th c Bernstein thì ∑ BkL(t) = (1-t+t)L = 1 nên s h ng th hai c a k=0 (**) 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: L P(t) = ∑ ak.Pk , ak ≥ 0 k=0 Do P(t) là t h p l i c a các ñi m ki m soát ∀t ∈ [0,1] và L ∑ BkL(t) = 1 k=0 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 75
  • 80. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline 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: L−1 Ta có: (P(t))’ = L. ∑ ∆Pk.BkL-1(t) , ∆Pk = Pk+1 - Pk k =0 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 BkL(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 BkL(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 ch nh b t kỳ m t ñi m ki m soát nào cũng s t t c các giá tr t ∈ [0,1]. Do ñó, hi u 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 76
  • 81. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline ñư 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: 1 2  a(t) = 2 t  3 3  g(t) = b(t) = - (t - )2 4 2  1 2 c(t) = (3 - t)  2  coï mang[0,1] giaï coï mang[1,2] giaï coï mang[2,3] giaï 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 ñó: L P(t) = ∑ Pk.gk(t) k=0 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 ñó: L P(t) = ∑ Pk.Rk(t) k=0 6.2. ðƯ NG CONG SPLINE VÀ B-SPLINE 6.2.1. ð nh nghĩa L Theo trên ta có: P(t) = ∑ Pk.Rk(t) (*) k=0 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. 77