Phần mềm kế toán Cloud AccNetC là phần mềm kế toán được triển khai trên nền điện toán đám mây, bảo mật cao, linh hoạt, dễ sử dụng, tiết kiệm chi phí, có thể xem dữ liệu tài chính trên mọi thiết bị di động, đáp ứng đầy đủ các chuẩn mực của hệ thống kế toán Việt Nam (VAS) cũng như quốc tế (IAS), và luôn cập nhật kịp thời các quy định của Bộ Tài chính.
Đăng ký dùng thử phần mềm tại: http://www.accnet.vn/phan-mem-ke-toan-cloud-accnetc.html
Phần mềm kế toán Cloud AccNetC là phần mềm kế toán được triển khai trên nền điện toán đám mây, bảo mật cao, linh hoạt, dễ sử dụng, tiết kiệm chi phí, có thể xem dữ liệu tài chính trên mọi thiết bị di động, đáp ứng đầy đủ các chuẩn mực của hệ thống kế toán Việt Nam (VAS) cũng như quốc tế (IAS), và luôn cập nhật kịp thời các quy định của Bộ Tài chính.
Đăng ký dùng thử phần mềm tại: http://www.accnet.vn/phan-mem-ke-toan-cloud-accnetc.html
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
Lập trình sáng tạo bao gồm việc sáng tạo. Khoa học máy tính và các ngành liên quan tới tính toán đã từ lâu đƣợc giới thiệu tới những ngƣời trẻ tuổi một cách rời rạc – quá nhấn mạnh kĩ thuật so với khả năng sáng tạo. Lập trình sáng tạo giúp cho sự phát triển của cá nhân đối với tính toán trở nên tốt hơn, bằng cách hỗ trợ vẽ vời dựa trên sáng tạo, tƣởng tƣợng, và sở thích.
Nhận viết luận văn đại học, thạc sĩ trọn gói, chất lượng, LH ZALO=>0909232620
Tham khảo dịch vụ, bảng giá tại: https://baocaothuctap.net
Download luận văn đồ án tốt nghiệp với đề tài: Nhận dạng, phân loại, xử lý ảnh biển số xe bằng phần mềm, cho các bạn làm luận văn tham khảo
Nhận viết luận văn đại học, thạc sĩ trọn gói, chất lượng, LH ZALO=>0909232620
Tham khảo dịch vụ, bảng giá tại: https://vietbaitotnghiep.com/dich-vu-viet-thue-luan-van
Download luận án tiến sĩ với đề tài: Bồi dưỡng năng lực dạy học cho giáo viên thực hành các trường dạy nghề khu vực miền núi phía Bắc, cho các bạn làm luận án tham khảo
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
Lập trình sáng tạo bao gồm việc sáng tạo. Khoa học máy tính và các ngành liên quan tới tính toán đã từ lâu đƣợc giới thiệu tới những ngƣời trẻ tuổi một cách rời rạc – quá nhấn mạnh kĩ thuật so với khả năng sáng tạo. Lập trình sáng tạo giúp cho sự phát triển của cá nhân đối với tính toán trở nên tốt hơn, bằng cách hỗ trợ vẽ vời dựa trên sáng tạo, tƣởng tƣợng, và sở thích.
Nhận viết luận văn đại học, thạc sĩ trọn gói, chất lượng, LH ZALO=>0909232620
Tham khảo dịch vụ, bảng giá tại: https://baocaothuctap.net
Download luận văn đồ án tốt nghiệp với đề tài: Nhận dạng, phân loại, xử lý ảnh biển số xe bằng phần mềm, cho các bạn làm luận văn tham khảo
Nhận viết luận văn đại học, thạc sĩ trọn gói, chất lượng, LH ZALO=>0909232620
Tham khảo dịch vụ, bảng giá tại: https://vietbaitotnghiep.com/dich-vu-viet-thue-luan-van
Download luận án tiến sĩ với đề tài: Bồi dưỡng năng lực dạy học cho giáo viên thực hành các trường dạy nghề khu vực miền núi phía Bắc, cho các bạn làm luận án tham khảo
Este documento introduce el concepto de polimorfismo en C++. Define polimorfismo como la capacidad de escribir programas de manera general manipulando clases existentes y futuras. Explica que polimorfismo requiere herencia, funciones virtuales y objetos dinámicos. Presenta un ejemplo de modelado de una orquesta para ilustrar polimorfismo. Describe los mecanismos de herencia, upcasting y funciones virtuales necesarios para lograr polimorfismo.
La Unión Europea ha acordado un paquete de sanciones contra Rusia por su invasión de Ucrania. Las sanciones incluyen restricciones a las transacciones con bancos rusos clave y la prohibición de la venta de aviones y equipos a Rusia. Los líderes de la UE esperan que las sanciones aumenten la presión económica sobre Rusia y la disuadan de continuar su agresión contra Ucrania.
Este documento presenta un proyecto llamado "Planeta Vivo" que busca promover el compromiso voluntario con el futuro ambiental, la convivencia y la paz. El proyecto invita a sumar voluntades individuales y colectivas para asegurar la supervivencia del planeta mediante acciones, valores y compromisos con el entorno natural y social. El proyecto involucra diversas áreas como ciencias naturales y educación ambiental, con el objetivo de provocar cambios positivos desde el respeto y la responsabilidad con el entorno.
The document discusses the energy crisis facing Pakistan. It notes that Pakistan faces shortages in natural gas, oil, and electricity in the coming years which will negatively impact the economy. The key causes of the energy crisis include a lack of investment in new infrastructure like dams, increasing demand outpacing supply, aging equipment, lack of energy conservation, high fuel costs due to imports, and monopoly of energy companies. The effects of the energy crisis include negative impacts on the education sector as well as business and trading, particularly the textile industry which is seeing plant closures and job losses that are reducing exports and economic growth.
Este documento trata sobre la contaminación del medio ambiente. Explica que la contaminación del aire se produce cuando gases tóxicos entran en contacto con la atmósfera, perjudicando la salud de humanos, animales y plantas. También define la contaminación hídrica como la modificación del agua por el hombre, haciéndola impropia para el consumo y la vida. Finalmente, concluye que la contaminación está destruyendo gradualmente la salud de los seres vivos y amenaza con acabar con la vida en la Tierra.
El documento describe los diferentes tipos y sitios de implantación de un embarazo ectópico, incluyendo la trompa de Falopio, cavidad abdominal, ovario, entre otros. Explica que la causa no se comprende completamente pero se relaciona con factores como enfermedades de transmisión sexual e inflamatorias pélvicas. Los síntomas pueden variar desde sangrado hasta shock, por lo que el diagnóstico temprano es un desafío. Los métodos de diagnóstico incluyen exámenes no invasivos como ecografía y también inv
On the Ground Validation of Online Diagnosis with Twitter and Medical RecordsWei-Yuan Chang
This document summarizes a research paper that developed a novel system for social-media based disease detection at the individual level. It collected Twitter data and medical records from 104 students, including 35 diagnosed with influenza. It analyzed the Twitter data using several methods: automated text classification with expert and machine-selected keywords, anomaly detection of tweeting rates, and network classification of friends' tweets. A meta-classifier was used to aggregate the separate classifiers and increase classification accuracy. The results showed it was possible to accurately diagnose an individual's disease from their social media data combined with medical records.
El documento contiene información sobre una persona que cursa la asignatura de Estadística II en el Instituto Universitario Politécnico Santiago Mariño en Venezuela. Se menciona el nombre de la persona, su cédula de identidad y la asignatura que cursa.
This document discusses key aspects of media language in film through quotes from famous directors and definitions of cinematic techniques. It provides quotes about film's ability to manipulate time from Tarkovsky and its betrayal of reality from Truffaut. Directors like David Lean and Federico Fellini discuss their storytelling through film. Techniques defined include mise-en-scene, mise-en-shot, editing styles like continuity and montage, and uses of diegetic and non-diegetic sound.
Nhận viết luận văn Đại học , thạc sĩ - Zalo: 0917.193.864
Tham khảo bảng giá dịch vụ viết bài tại: vietbaocaothuctap.net
Download luận văn đồ án tốt nghiệp với đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng, cho các bạn có thể tham khảo
Để xem full tài liệu Xin vui long liên hệ page để được hỗ trợ
: https://www.facebook.com/thuvienluanvan01
https://www.facebook.com/thuvienluanvan01
https://www.facebook.com/thuvienluanvan01
tai lieu tong hop, thu vien luan van, luan van tong hop, do an chuyen nganh
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