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 CƠ S C Að H A
1.1. T NG QUAN V ð H A MÁY TÍNH
ð h a máy tính là m t lãnh v c phát tri n nhanh nh t trong Tin h c. Nó ñư c áp
d ng r ng rãi trong nhi u lãnh v c khác nhau thu c v khoa h c, k ngh , y khoa,
ki n trúc và gi i trí.
Thu t ng ñ h a máy tính (Computer Graphics) ñư c ñ xu t b i nhà khoa h c
ngư i M tên là William Fetter vào năm 1960 khi ông ñang nghiên c u xây d ng mô
hình bu ng lái máy bay cho hãng Boeing.
Các chương trình ñ h a ng d ng cho phép chúng ta làm vi c v i máy tính m t
cách tho i mái, t nhiên.
1.1.1 Gi i thi u v ñ h a máy tính
ð h a máy tính là m t ngành khoa h c Tin h c chuyên nghiên c u v các
phương pháp và k thu t ñ có th mô t và thao tác trên các ñ i tư ng c a th gi i
th c b ng máy tính.
V b n ch t: ñó là m t quá trình xây d ng và phát tri n các công c trên c hai
lĩnh v c ph n c ng và ph n m m h tr cho các l p trình viên thi t k các chương
trình có kh năng ñ h a cao.
V i vi c mô t d li u thông qua các hình nh và màu s c ña d ng c a nó, các
chương trình ñ h a thư ng thu hút ngư i s d ng b i tính thân thi n, d dùng,... kích
thích kh năng sáng t o và nâng cao năng su t làm vi c.
1.1.2. CÁC K THU T ð H A
D a vào các phương pháp x lý d li u trong h th ng, ta phân ra làm hai k thu t
ñ h a:
1.1.2.1. K thu t ñ h a ñi m
7. Chương I. Các y u t cơ s c a ñ h a
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 MaxX
Y Y
O 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; IncY = ∆y/Step; {bư c tăng khi v }
x = x1; y = y1; {Ch n ñi m v ñ u tiên}
V ñi m (x,y);
Cho i ch y t 1 ñ n Step:
x = x + IncX; y = y + IncY;
V ñi m (Round(x),Round(y))
T ñó ta có th t c v ño n th ng theo thu t toán DDA như sau:
Procedure DDALine(x1,y1,x2,y2:Integer);
var dx,dy,step,i:integer;
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)
yi+
Phương trình ñư ng th ng qua 2 ñi m: 1
x − x1 y − y1 y
= (*)
x 2 − x1 y 2 − y1
yi
ð t ∆x = x2 - x1
∆y = y2 - y1 xi xi+1
∆y ∆y
(*) ⇔ y = x. + y1 - x1. Hình 1.2
∆x ∆x
∆y
Suy ra m = nên ∆y = m. ∆x (2)
∆x
b = y1 - m.x1 (3)
Ta ch xét trư ng h p h s góc 0<m<1.
Gi s ñi m (xi,yi) ñã ñư c v . Ta ph i ch n ñi m k ti p là:
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
∆y
= 2. .(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. (d1<d2)
. N u pi ≥ 0: Ch n yi+1 = yi + 1 T (5) ⇒ pi+1 = pi + 2∆y - 2∆x. (d1>d2)
V i ñi m mút ñ u tiên, theo (4) ta có:
p1 = 2∆y.x1 - 2∆x.y1 + 2∆y + ∆x[2.(y1 - m.x1) - 1] = 2∆y - ∆x
T ñó, ta có th tóm t t thu t toán v ñư ng th ng theo Bresenham cho trư ng h p h
s góc 0<m<1 như sau:
• Bư c 1: Nh p các ñi m ñ u mút. ði m ñ u mút bên trái ch a t a ñ (x1,y1), ñi m
ñ u mút bên ph i ch a t a ñ (x2,y2).
• Bư c 2: ði m ñư c ch n ñ v ñ u tiên là (x1,y1).
• Bư c 3: Tính ∆x = |x2 - x1| , ∆y = |y2 - y1| và P1 = 2∆y - ∆x
N u pi < 0 thì ñi m k ti p là (xi + 1,yi)
Ngư c l i: ñi m k ti p là (xi + 1,yi + 1)
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. v trí xi +1, ta tính:
pi+1 = pi + 2∆y n u pi < 0
pi+1 = pi + 2.( ∆y - ∆x) n u pi ≥ 0
N u pi+1 < 0 thì ta ch n to ñ y k ti p là yi+1
Ngư c l i thì ta ch n yi+1 +1
• Bư c 5: L p l i bư c 4 cho ñ n khi x = x2.
Sau ñây là th t c cài ñ t thu t toán:
Procedure LINE(x1,y1,x2,y2:integer); { 0<m<1}
var dx,dy,x,y,p,c1,c2,xMax:integer;
Begin
dx:=abs(x1-x2);
dy:=abs(y1-y2);
c1:=2*dy;
c2:=2*(dy-dx);
p:=2*dy-dx;
if x1>x2 then
begin
x:=x2; y:=y2; xMax:=x1;
end
else
begin
x:=x1;y:=y1;xMax:=x2;
end;
putpixel(x,y,red);
while x<xMax do
begin
x:=x+1;
if p<0 then p:=p+c1
else begin
y:=y+1;
p:=p+c2;
end;
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:
1
pi = F(M) = F(xi + 1,yi + )
2
N u pi < 0 ⇒ M n m trên ño n
th ng ⇒ Q n m dư i M ⇒ Ch n S P
N u pi ≥ 0 ⇒ M n m dư i ño n yi+
1 Q
th ng ⇒ Q n m trên M ⇒ Ch n P M
M t khác:
yi S
1
pi = F(xi + 1,yi + )
2
1 xi
pi+1 = F(xi+1 + 1,yi+1 + ) xi+1
2 Hình 1.3
nên
1 1
pi+1 - pi = F(xi+1 + 1,yi+1 + ) - F(xi + 1,yi + )
2 2
12
18. Chương I. Các y u t cơ s c a ñ h a
1 1
= A(xi+1+1) + B(yi+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ó:
1 1
p1 = F(x1 + 1,y1 + ) = A(x1+1) + B(y1 + ) + C
2 2
B B
= Ax1 + Bx1 + C + A + =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
Phương trình t ng quát c a ñư ng tròn có d ng: y,x) )
(x - xc)2 + (y - yc)2 = R2 (*) (- (x,y
x,y) )
⇔ y = yc ± R2 − ( x − xC ) 2 (1)
(-x,- (x,-
ð ñơn gi n thu t toán, ñ u tiên ta xét ñư ng y) y)
(-y,- (
tròn có tâm g c t a ñ (xc=0 và yc=0). x) y,-
* Ý tư ng: Hình
Do tính ñ i x ng c a ñư ng tròn nên n u ñi m 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
ð t: d1 = yi2 - y2 = yi2 - R2 + (xi + 1)2
d2 = y2 - (yi - 1)2 = R2 - (xi + 1)2 - (yi - 1)2 yi
y
Suy ra: yi-
pi = d1 - d2 = 2.(xi + 1)2 + yi2 + (yi - 1)2 - 2R2 (2) 1
⇒ pi+1 = 2.(xi+1 + 1)2 + y2i+1 + (yi+1 - 1)2 - 2R2 (3)
T (2) và (3) ta có: xi
xi+1
pi+1 - pi = 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi) Hình
1.5
⇒ pi+1 = pi + 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi)
(4)
* Nh n xét:
N u pi < 0: ch n yi+1 = yi (4) ⇒ pi+1 = pi + 4xi + 6
N u pi ≥ 0: ch n yi+1 = yi - 1 (4) ⇒ pi+1 = pi + 4.(xi - yi) + 10
Ta ch n ñi m ñ u tiên c n v (0,R), theo (2) ta có: p1 = 3 - 2R
Tóm l i: Ta có thu t toán v ñư ng tròn:
• Bư c 1: Ch n ñi m ñ u c n v (x1,y1) = (0,R)
• Bư c 2: Tính P ñ u tiên: p1 = 3 - 2R
N u p < 0: ch n ñi m k ti p là (xi +1,yi). Ngư c l i ch n ñi m (xi + 1,yi - 1)
• Bư c 3: x:=x + 1, tính l i p:
N u pi < 0: pi+1 = pi + 4xi + 6. Ngư c l i: pi+1 = pi + 4.(xi - yi) + 10
Khi ñó:
N u pi+1 < 0: ch n ñi m k ti p là (xi +1,yi+1). Ngư c l i ch n ñi m (xi+1,yi+1-1)
• Bư c 4: L p l i bư c 3 cho ñ n khi x = y.
Sau ñây là th t c ñ cài ñ t thu t toán:
Procedure Circle(x0,y0,r:Integer);
Var p,x,y:Integer;
Procedure VeDiem;
Begin
PutPixel( x0 + x , y0 + y , color);
PutPixel( x0 - x , y0 + y , color);
PutPixel( x0 + x , y0 - y , color);
PutPixel( x0 - x , y0 - y , color);
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 S
2 2 2 yi
ð t F(x,y) = x + y - R ,ta có:
M
< 0 n u (x,y) trong ñư ng tròn Q
yi- P
F(x,y) = 0 n u (x,y) trên ñư ng tròn 1
> 0 n u (x,y) ngoàiñư ng tròn
Lúc này, vi c ch n các ñi m S(xi+1,yi) hay xi xi+1
P(xi+1,yi-1) ñư c ñưa v vi c xét d u c a: Hình
1.6
1
pi = F(M) = F(xi + 1,yi - ) (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:
1
pi = F(xi + 1,yi - )
2
1
pi+1 = F(xi+1 + 1,yi+1 - )
2
nên
1 1
pi+1 - pi = F(xi+1 + 1,yi+1 - ) - F(xi + 1,yi - )
2 2
1 2 1
= [(xi+1+1)2 + (yi+1 - ) - R2] - [(xi+1)2 + (yi - )2 - R2]
2 2
1 2 1
= [(xi+2)2 + (yi+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ó:
1 1 1 5
p1 = F(x1 + 1,y1 - ) = F(1,R - ) = 1 + (R - )2 - R2 = - R
2 2 2 4
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:
x2 y2
+ 2 =1
a2 b
b2 2
Ta có th vi t l i: y2 = - 2
.x + b2 (*)
a
*Ý tư ng: Gi ng như thu t toán v ñư ng tròn. Hình
1.7
Ch có s khác bi t ñây là ta ph i v 2 nhánh: M t nhánh t trên xu ng và m t
nhánh t dư i lên và 2 nhánh này s g p nhau t i ñi m mà ñó h s góc c a ti p
tuy n v i Ellipse = -1 (Hình 1.7).
Phương trình ti p tuy n v i Ellipse t i ñi m (x0,y0) ∈ (E) :
16
22. Chương I. Các y u t cơ s c a ñ h a
x y
x0 . 2
+ y0. 2 = 1
a b
x 0 .b 2
Suy ra, h s góc c a ti p tuy n t i ñi m ñó là: - .
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)
b2
Thay (xi +1) vào (*): y2 = - 2
.(xi +1)2 + b2
a
ð t:
b2
d1= yi2 - y2 = yi2 + 2
.(xi +1)2 -b2
a
b2
d2= y2 - (yi -1)2 = - 2
.(xi +1)2 + b2 - (yi -1)2
a
b2
⇒ pi = d1 - d2 = 2.[ 2 .(xi +1)2 - b2] + 2.(yi2 + yi) -1
a
b2
pi+1 = 2.[ 2
.(xi+1 +1)2 - b2] + 2.(yi+12 + yi+1) -1
a
Suy ra:
b2
pi+1 - pi = 2. 2
.[(xi+1 +1)2 - (xi +1)2] + 2.( yi+12 - yi2 + yi+1 - yi) (**)
a
*Nh n xét:
• pi < 0: Ch n yi+1 = yi
b2
(**) ⇒ pi+1 = pi + 2. .(2x + 3)
a2
• pi ≥ 0: Ch n yi+1 = yi -1
b2
(**) ⇒ pi+1 = pi + 2. .(2x + 3) - 4yi
a2
V i ñi m ñ u tiên (0,b), ta có:
b2
p1 = 2 - 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 ý:
x2 y2
Phương trình Ellipse: + 2 =1
a2 b
Nhánh 1:
1 2
p1 = b2 - a 2 b + .a
4
If pi < 0 Then pi+1 = pi + b2 + 2b2xi+1
else pi+1 = pi + b2 + 2b2xi+1 - 2a2yi+1
Nhánh 2:
1 2
p1 = b2(xi + ) + 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
ax + b ax 2 + bx + c
y= , y= .
cx + d dx + e
12. V các ñư ng cong sau:
x2 y2 x2 y2
2
y = 2px + 2 =1 - 2 = ±1
a2 b 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
Blue Cyan
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
26
31. Chương II. Tô màu
Y 0.299 0.587 0.114 R
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
Green Yellow
1.0
Cyan White Red
Blue 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
Green Yellow
Cyan 0.5 Red
Blue 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,
..., Pn. Hãy tô màu mi n S. W
P1 P3
* Phương pháp t ng quát : 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. P4
N u P ∈ S thì tô màu ñi m P. 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 x0 xi
th t tăng d n ñ i v i yi (ñi m ñ u x
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
Xét các ñi m lân c n c a P (Hình 2.6). X O X
O
N u các ñi m lân c n ñó v n còn thu c S và chưa 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:
X min ≤ x ≤ X max
D = ( x, y ) ∈ R 2 |
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
t ∈ [0,1]
y = y1 + ( y 2 − y1). t
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à
A
nghi m c a h b t phương trình (theo t): y P
yMax
Xmin ≤ x1+ (x2 - x1). t ≤ Xmax
Q
Ymin ≤ y1+ (y2 - y1). t ≤ Ymax yMin
0≤ t ≤1
B
G i N là t p nghi m c a h phương trình xMin xMax X
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:
37. Chương III. Xén hình
Px = x1 + ( x 2 − x1). t 1 Qx = x1 + ( x 2 − x1). t 2
Py = y1 + ( y 2 − y1). t 1 Qy = y1 + ( y 2 − y1). t 2
thì: ClipD(F) = PQ (Hình 3.1)
3.2.1.1. Thu t toán Cohen - Sutherland
• Chia m t ph ng ra làm 9 vùng, m i vùng ñánh m t mã nh phân 4 bit (hình 3.2).
Bit 1: Qui ñ nh vùng n m bên trái c a s
100 100 101
1 0 0
Bit 2: Qui ñ nh vùng n m bên ph i c a s
000 000 001
Bit 3: Qui ñ nh vùng n m bên dư i c a s 1 0 0
Bit 4: Qui ñ nh vùng n m bên trên c a s 010 010 011
1 0 0
• Xét ñi m P ∈ R2 : Hình 3.2
1 nãúuPx < X min
Pleft =
0 Ngæåüclaûi
1 nãúuP > X max
x
PRight =
0 Ngæåüc laûi
1 nãúuPy < Y min
PBelow =
0 Ngæåüclaûi
1 nãúuPy > Y max
PAbove =
0 Ngæåüclaûi
• 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
ð t ∆x = x2 - x1 ∆y = y2 - y1
p1 = - ∆x q1 = x1 - xMin
p2 = ∆x q2 = xMax - x1
p3 = - ∆y q3 = y1 - yMin
p4 = ∆y q4 = yMax - y1
thì h b t phương trình giao ñi m c a F và D có th vi t l i:
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 }
Qk
u1 = Max({ | k ∈ K2} ∪ {0})
Pk
Qk
u2 = Min({ | 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
O x
cos(α ) sin(α )
v i R= Hình 3.3
− sin(α ) cos(α )
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).λ (2)
0 ≤ λ ≤1
− a ± a 2 − bc
◊ Thay (2) vào (1) ta suy ra: λ =
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}
Hình
*Trư c h t, ta ki m tra các trư ng h p ñ c bi t sau: 3.5
i/ N u xMin ≤ xC -R; xC +R ≤ xMax;
yMin ≤ yC -R; yC +R ≤ yMax;
thì ClipD(F) = F (Hình 3.5)
ii/ N u xC +R < xMin
ho c xC -R > xMax
ho c yC +R < yMin
ho c yC - R > yMax
Hình
3.6
thì ClipD(F) = ∅ (Hình 3.6)
*Xét trư ng h p còn l i: Tìm các giao ñi m c a F và D. S p x p các giao ñi m ñó
theo chi u ngư c kim ñ ng h .
• Các cung tròn ñư c t o b i 2 giao ñi m liên ti p s hoàn toàn n m trong D
ho c hoàn toàn n m bên ngoài D.
• ð xác ñ nh các cung này n m trong hay ngoài D, ta ch c n l y trung ñi m
M c a cung ñó. N u M ∈ D thì cung ñó n m trong D, ngư c l i thì nó n m
ngoài D.
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
i/ N u t t c các ñ nh c a ña giác ñ u n m trong hình ch nh t thì hình c n xén
chính là ña giác và bài toán coi như ñã ñư c gi i quy t.
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
(x’ y’) = (x y).
+ (trx try)
C D
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
M=
- ma tr n bi n ñ i.
C D
4.1.1.1. Phép ñ ng d ng
Ma tr n c a phép ñ ng d ng là:
A 0 x ' = Ax
M= ⇔
0 D 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
ñ i x ng qua Oy
0 1
46. Chương IV. Các phép bi n ñ i
1 0
ñ i x ng qua Ox
0 −1
−1 0
ñ i x ng qua g c t a ñ
0 −1
4.1.1.3. Phép quay
Cos (α ) Sin(α )
Ma tr n t ng quát c a phép quay là R=
− Sin(α ) Cos (α )
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 0 0
(x y 1). 0 1 0 = (x + M y+N 1)
M N 1
4.1.1.5. Phép bi n d ng
Ma tr n t ng quát là: M = 1 g
h
1
Trong ñó:
g = 0: bi n d ng theo tr c x.
h = 0: bi n d ng theo tr c y.
4.1.1.6. H p c a các phép bi n ñ i
Có ma tr n bi n ñ i là tích c a các ma tr n c a các phép bi n ñ i.
.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 0 Cos(α ) Sin (α ) 0 1 0 0
0 1 0 . − Sin (α ) Cos(α ) 0 . 0 1 0
−M −N 1 0 0 1 M N 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(x,y,z) P(R,θ,φ)
R
Y φ Y
O O
θ
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
x ' = A. x
0 B 0 0
M= ⇔ y ' = B. y
0 0 C 0
z ' = C. z
0 0 0 1
.46
51. Chương IV. Các phép bi n ñ i
4.2.2.2. Phép ñ i x ng
1 0 0
0
0 1 0
0
Mz = ñ i x ng qua m t (XY)
0 0 −1 0
0 0 0 1
1 0 0 0
0 −1 0 0
My= ñ i x ng qua m t (XZ)
0 0 1 0
0 0 0 1
−1 0 0 0
0 1 0 0
Mx = ñ i x ng qua m t (YZ)
0 0 1 0
0 0 0 1
4.2.2.3. Phép t nh ti n
1 0 0 0
x ' = x + M
0 1 0 0
M= ⇔ y' = y + N
0 0 1 0
z' = z + P
M N P 1
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(θ ) 0 0
− Sin(θ ) Cos (θ ) 0 0
RZ =
0 0 1 0
0 1
0 0
1 0 0 0
0 Cos (θ ) Sin(θ ) 0
RX =
0 − Sin(θ ) Cos (θ ) 0
0 1
0 0
.47
52. Chương IV. Các phép bi n ñ i
Cos (θ ) 0 Sin(θ )0
0 1 0 0
RY =
− Sin(θ ) 0 Cos (θ ) 0
1
0 0 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)
Maét
X 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.
1
Do thành ph n x’ c a tia r là E.(1-t) + x.t = 0 nên t = . Thay t vào (*) ta
1− x / E
tính ñư c:
y z
y’ = 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