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.
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự NhiênMasterCode.vn
Sau khi hoàn thành khóa học này, học viên sẽcó các khảnăng:
Cài đặt và cấu hình Web Server.
Thiết kế, xây dựng, phát triển ứng dụng web với Asp.Net
Với thời lượng là 36 tiết LT và 60 tiết TH được phân bổnhưsau:
STT Bài học Sốtiết LT Sốtiết TH
1 Tổng quan vềAsp.Net 3 5
2 Asp Server Control 6 10
3 Các điều khiển liên kết dữliệu 6 10
4 Xây dựng lớp xửlý dữliệu 3 5
5 Xây dựng các đối tượng thểhiện 6 10
6 Xây dựng và quản lý ứng dụng web 9 15
7 Web Services 3 5
Tổng số
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 ngành điện với đề tài: Tìm hiểu quy trình sản xuất điện năng trong các nhà máy nhiệt điện. Đi sâu nghiên cứu hệ thống máy nghiền than trong nhà máy nhiệt điện Uông Bí
Trabajo de la sociedad de la informacionjorge96carlos
La sociedad de la información se basa en las tecnologías de la información y la comunicación que permiten el acceso y distribución de información a gran escala. Estas tecnologías han transformado la sociedad actual en una sociedad del conocimiento en la que la información se aplica ampliamente para mejorar la vida de las personas. El documento explorará estos conceptos clave y cómo las TIC han impactado positivamente a la sociedad moderna.
The document discusses two main components of a city: the superstructure and infrastructure/economic base. The superstructure includes institutions and social structures, while the infrastructure/economic base comprises the jobs, industries, and transportation systems that drive a city's economy. In summary, the document separates a city's social and institutional components from its underlying economic foundation and transportation infrastructure.
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.
Lập trình ứng dụng web asp.net Trung Tâm Tin Học Khoa Học Tự NhiênMasterCode.vn
Sau khi hoàn thành khóa học này, học viên sẽcó các khảnăng:
Cài đặt và cấu hình Web Server.
Thiết kế, xây dựng, phát triển ứng dụng web với Asp.Net
Với thời lượng là 36 tiết LT và 60 tiết TH được phân bổnhưsau:
STT Bài học Sốtiết LT Sốtiết TH
1 Tổng quan vềAsp.Net 3 5
2 Asp Server Control 6 10
3 Các điều khiển liên kết dữliệu 6 10
4 Xây dựng lớp xửlý dữliệu 3 5
5 Xây dựng các đối tượng thểhiện 6 10
6 Xây dựng và quản lý ứng dụng web 9 15
7 Web Services 3 5
Tổng số
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 ngành điện với đề tài: Tìm hiểu quy trình sản xuất điện năng trong các nhà máy nhiệt điện. Đi sâu nghiên cứu hệ thống máy nghiền than trong nhà máy nhiệt điện Uông Bí
Trabajo de la sociedad de la informacionjorge96carlos
La sociedad de la información se basa en las tecnologías de la información y la comunicación que permiten el acceso y distribución de información a gran escala. Estas tecnologías han transformado la sociedad actual en una sociedad del conocimiento en la que la información se aplica ampliamente para mejorar la vida de las personas. El documento explorará estos conceptos clave y cómo las TIC han impactado positivamente a la sociedad moderna.
The document discusses two main components of a city: the superstructure and infrastructure/economic base. The superstructure includes institutions and social structures, while the infrastructure/economic base comprises the jobs, industries, and transportation systems that drive a city's economy. In summary, the document separates a city's social and institutional components from its underlying economic foundation and transportation infrastructure.
To avoid becoming a "dot-bomb", organizations must carefully evaluate their internet strategy by addressing key issues. They must consider how their brand, management, operations, and equity will be impacted. Specifically, they need to determine if their brand naturally extends online, if management has the needed skills, if systems can support online operations, and if outside capital is required. Organizations must also understand the strategic implications an online channel may have on their existing channels to avoid conflicts that can dissatisfy customers. Failure to properly evaluate these issues can lead organizations to pursue online initiatives without a sound strategy, wasting cash and losing shareholder support.
Las sustancias cáusticas pueden causar lesiones químicas directas en la piel y mucosas. Los factores que contribuyen a la gravedad de la lesión incluyen la concentración, volumen, estado sólido o líquido y tiempo de exposición. El tratamiento para la ingestión incluye evitar inducir vómitos, asegurar la vía aérea, administrar analgésicos y antibióticos, y protección gástrica con antiácidos.
Este documento proporciona una guía de atajos de teclado y opciones de formato en Microsoft Word. Explica los atajos de teclado y grupos de herramientas para cortar, copiar y pegar texto, aplicar format
Q1 In what ways does your media product use, develop or challenge forms and ...briege simmonds
The document discusses how the media product uses and develops conventions of real media forms. It describes taking inspiration from Rolling Stone magazine for the masthead design, including a selling line like many magazines to attract readers, and using headlines similar to Q magazine. Conventionally, it includes the date, price, and barcode, but develops this by adding the email address. Photos are used conventionally to create eye contact. Splashes and a band index also follow conventions. The ransom note style quote is unconventional but aims to intrigue readers. Cover lines and placement of the title aim to inform and engage readers. Large pictures on their own page and credits for photos are also conventional. More photos were added to be visual and show aspects of the
Over the course of 10 days, Ritu Nissan provided training that included a full vehicle inspection and servicing on day 1. On subsequent days, tasks included inspecting and replacing brake parts, wheel alignment, electrical checks, battery inspection, AC recharging, sensor scanning, diagnosing door noises, replacing brake light bulbs, and inspecting belts. The training covered maintenance and repairs of various vehicle systems and components.
This document provides information on how to play various versions of a memory and pool game called "Run the Table". It details the settings and rules for 3 ball, 7 ball, 8 ball, 9 ball, and Cribbage pool versions of the game. The games involve studying the layout of balls on a felt surface for a set time, then recalling and shooting the balls in a certain order without scratching. Difficulty increases based on the number of balls, recall method (order or solids/stripes), and distractions on the felt between viewing and shooting.
El documento presenta un análisis del sitio para un proyecto de Centro Cultural en Zitácuaro, Michoacán. Describe el paisaje natural y urbano del área, incluyendo los antiguos terrenos de la estación de tren que se regenerarán. El proyecto modificará el entorno existente mediante la regeneración urbana y dará un nuevo uso al sitio con una arquitectura distinta pero respetando lo existente.
This document outlines the weekly progress and plans over a 5 month period for a group creating a music video as part of an A2 Media Studies course. It details research, choosing a song, storyboarding, test filming, editing, additional filming, and completing post-production work and evaluations. Contingency plans are made in case of problems with filming or editing deadlines. The overall plan is to have a completed music video and evaluations uploaded to YouTube and the student's blog by the end of the period.
This string of random characters does not contain any meaningful information that can be summarized in 3 sentences or less. The string appears to be gibberish without any identifiable words, topics, people, places, events, or other elements that could be coherently summarized.
El documento describe el aprendizaje basado en proyectos y problemas. Se enfoca en involucrar activamente a los estudiantes mediante propuestas didácticas que los lleven a desarrollar y producir conocimientos a través de proyectos. Explica los pasos para implementar el aprendizaje basado en problemas, incluyendo la creación de un grupo pionero y la incorporación progresiva en los planes de estudio. Finalmente, concluye que este enfoque permite a los estudiantes dominar los contenidos de manera autónoma siguiendo las indic
El documento habla sobre la jugadora de fútbol estadounidense Mia Hamm. Describe que es de Selma, Alabama pero vive en Los Angeles. Destaca que Mia Hamm es atlética, talentosa y bella, y ha sido miembro del equipo nacional de fútbol de los Estados Unidos durante dieciocho años. También compara a Mia Hamm con la jugadora brasileña Marta Vieira da Silva, y menciona que Mia Hamm sabe fútbol, español y matemáticas.
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
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
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
Đánh giá chất lượng điện năng (sụt giảm điện áp) cho lưới điện phân phối huyệ...
Giao trinh ly_thuyet_do_hoa
1.
2. M C L C
Chương 1: CÁC Y U T CƠ S C A ð H A
1.1. T ng quan v ñ h a máy tính ............................................................................... 1
1.1.1. Gi i thi u v ñ h a máy tính ................................................................................ 1
1.1.2. Các k thu t ñ h a ................................................................................................ 1
1.1.2.1. K thu t ñ h a ñi m........................................................................................ 1
1.1.2.2. K thu t ñ h a vector...................................................................................... 2
1.1.3. ng d ng c a ñ h a máy tính............................................................................... 2
1.1.4. Các lĩnh v c c a ñ h a máy tính .......................................................................... 3
1.1.5. T ng quan v m t h ñ h a .................................................................................. 4
1.2. Màn hình ñ h a...................................................................................................... 6
1.3. Các khái ni m........................................................................................................... 6
1.3.1. ði m..................................................................................................................... 6
1.3.2. Các bi u di n t a ñ ............................................................................................ 8
1.3.3. ðo n th ng........................................................................................................... 8
1.4. Các thu t toán v ño n th ng................................................................................. 8
1.4.1. Bài toán................................................................................................................ 8
1.4.2. Thu t toán DDA................................................................................................... 9
1.4.3. Thu t toán Bresenham ....................................................................................... 10
1.4.4. Thu t toán MidPoint.......................................................................................... 12
1.5. Thu t toán v ñư ng tròn..................................................................................... 14
1.5.1. Thu t toán Bresenham ....................................................................................... 14
1.5.2. Thu t toán MidPoint.......................................................................................... 16
1.6. Thu t toán v Ellipse............................................................................................. 17
1.6.1. Thu t toán Bresenham ....................................................................................... 17
1.6.2. Thu t toán MidPoint.......................................................................................... 20
1.7. Phương pháp v ñ th hàm s ............................................................................. 21
Bài t p............................................................................................................................ 23
Chương 2: TÔ MÀU
2.1. Gi i thi u các h màu............................................................................................ 25
2.2. Các thu t toán tô màu .......................................................................................... 28
2.2.1. Bài toán.............................................................................................................. 28
2.2.2. Thu t toán xác ñ nh P ∈ S ................................................................................. 28
2.2.3. Thu t toán tô màu theo dòng quét ..................................................................... 30
2.2.4. Thu t toán tô màu theo v t d u loang................................................................ 30
Bài t p............................................................................................................................ 31
Chương 3: XÉN HÌNH
3.1. ð t v n ñ ............................................................................................................... 32
3. 3.2. Xén ño n th ng vào vùng hình ch nh t............................................................. 32
3.2.1. C nh c a hình ch nh t song song v i các tr c t a ñ ..................................... 32
3.2.1.1. Thu t toán Cohen – Sutherland ...................................................................... 33
3.2.1.2. Thu t toán chia nh phân................................................................................. 34
3.2.1.3. Thu t toán Liang – Barsky ............................................................................. 35
3.2.2. Khi c nh c a hình ch nh t t o v i tr c hoành m t góc α................................ 36
3.3. Xén ño n th ng vào hình tròn.............................................................................. 37
3.4. Xén ñư ng tròn vào hình ch nh t...................................................................... 38
3.5. Xén ña giác vào hình ch nh t ............................................................................. 39
Bài t p............................................................................................................................ 40
Chương 4: CÁC PHÉP BI N ð I
4.1. Các phép bi n ñ i trong m t ph ng..................................................................... 41
4.1.1. Cơ s toán h c ................................................................................................... 41
4.1.2. Ví d minh h a .................................................................................................. 43
4.2. Các phép bi n ñ i trong không gian.................................................................... 45
4.2.1. Các h tr c t a ñ .............................................................................................. 45
4.2.2. Các công th c bi n ñ i ...................................................................................... 46
4.2.3. Ma tr n ngh ch ñ o ............................................................................................ 48
4.3. Các phép chi u c a v t th trong không gian lên m t ph ng ........................... 48
4.3.1. Phép chi u ph i c nh......................................................................................... 48
4.3.2. Phép chi u song song......................................................................................... 50
4.4. Công th c c a các phép chi u lên màn hình....................................................... 50
4.5. Ph l c .................................................................................................................... 56
4.6. Ví d minh h a....................................................................................................... 59
Bài t p............................................................................................................................ 61
Chương 5: BI U DI N CÁC ð I TƯ NG BA CHI U
5.1. Mô hình WireFrame.............................................................................................. 63
5.2. V mô hình WireFrame v i các phép chi u........................................................ 64
5.3. V các m t toán h c............................................................................................... 65
Bài t p............................................................................................................................ 68
Chương 6: THI T K ðƯ NG VÀ M T CONG BEZIER VÀ B-SPLINE
6.1. ðư ng cong Bezier và m t Bezier........................................................................ 69
6.1.1. Thu t toán Casteljau .......................................................................................... 70
6.1.2. D ng Bernstein c a ñư ng cong Bezier ............................................................ 70
6.1.3. D ng bi u di n ma tr n c a ñư ng Bezier ........................................................ 71
6.1.4. T o và v ñư ng cong Bezier............................................................................ 72
6.1.5. Các tính ch t c a ñư ng Bezier......................................................................... 74
6.1.6. ðánh giá các ñư ng cong Bezier....................................................................... 76
6.2. ðư ng cong Spline và B-Spline............................................................................ 77
6.2.1. ð nh nghĩa.......................................................................................................... 77
4. 6.2.2. Các tính ch t h u ích trong vi c thi t k các ñư ng cong B-Spline ................. 78
6.2.3. Thi t k các m t Bezier và B-Spline ................................................................. 79
6.2.4. Các băng Bezier................................................................................................. 80
6.2.5. Dán các băng Bezier v i nhau ........................................................................... 81
6.2.6. Các băng B-Spline ............................................................................................. 81
Chương 7: KH ðƯ NG VÀ M T KHU T
7.1. Các khái ni m......................................................................................................... 83
7.2. Các phương pháp kh m t khu t........................................................................ 85
7.2.1. Gi i thu t s p x p theo chi u sâu ...................................................................... 85
7.2.2. Gi i thu t BackFace........................................................................................... 88
7.2.3. Gi i thu t vùng ñ m ñ sâu ............................................................................... 90
Bài t p.......................................................................................................................... 103
Chương 8: T O BÓNG V T TH 3D
8.1. Khái ni m ............................................................................................................. 104
8.2. Ngu n sáng xung quanh...................................................................................... 104
8.3. Ngu n sáng ñ nh hư ng ...................................................................................... 105
8.4. Ngu n sáng ñi m.................................................................................................. 109
8.5. Mô hình bóng Gouraud....................................................................................... 110
Bài t p.......................................................................................................................... 121
Ph l c: M T S CHƯƠNG TRÌNH MINH H A
I. Các thu t toán tô màu ............................................................................................ 122
II. Các thu t toán xén hình........................................................................................ 129
III. V các ñ i tư ng 3D............................................................................................. 136
Tài li u tham kh o...................................................................................................... 143
5. L I M ð U
ð h a là m t trong nh ng lĩnh v c phát tri n r t nhanh c a ngành Công ngh
thông tin. Nó ñư c ng d ng r ng rãi trong nhi u lĩnh v c khoa h c và công ngh .
Ch ng h n như y h c, ki n trúc, gi i trí... ð h a máy tính ñã giúp chúng ta thay ñ i
cách c m nh n và s d ng máy tính, nó ñã tr thành nh ng công c tr c quan quan
tr ng không th thi u trong ñ i s ng h ng ngày. Vì v y môn “ð h a” ñã tr thành
m t trong nh ng môn h c chính trong các chuyên ngành Công ngh thông tin các
trư ng ñ i h c.
Cu n sách “Giáo trình lý thuy t ñ h a” ñư c biên so n theo sát n i dung
chương trình ñào t o c nhân Công ngh thông tin. N i dung c a giáo trình này
cung c p m t s ki n th c cơ b n v lý thuy t và thu t toán xây d ng các công c
ñ h a 2D và 3D. T ñó giúp sinh viên có th ñ c l p xây d ng nh ng thư vi n ñ
h a cho riêng mình và phát tri n các ph n m m ng d ng ñ h a cao hơn.
Giáo trình ñư c chia làm 8 chương và ph n ph l c, sau m i chương ñ u có
ph n bài t p ñ ki m tra ki n th c và rèn luy n kh năng l p trình cho b n ñ c. ð
thu n ti n cho vi c trình bày thu t toán m t cách d hi u, các gi i thu t trong giáo
trình ñư c vi t trên ngôn ng “t a Pascal” và các mã ngu n ñư c cài ñ t trên Turbo
Pascal 7.0. Nh m giúp b n ñ c b t lúng túng trong quá trình cài ñ t các gi i thu t,
ph n ph l c li t kê m t s mã ngu n cài ñ t các thu t toán trong các chương. Tuy
nhiên, b n ñ c nên t cài ñ t các thu t toán ph n lý thuy t, n u c m th y khó
khăn l m m i nên tham kh o ph n ph l c này.
Chương 1, 2 và 3 trình bày v các y u t cơ s c a ñ h a như: màn hình ñ
h a, ñi m, ño n th ng, ñư ng tròn, các h màu và các thu t toán tô màu, xén hình ...
Chương 4 trang b các ki n th c toán h c v các phép bi n ñ i trong không gian 2D
và 3D. Chương 5, 6 và 7 gi i thi u các mô hình ñ h a 3D, các gi i thu t kh m t
khu t và t o bóng cho v t th ... Chương 8 trình bày v phương pháp thi t k các
ñư ng cong Bezier và B-Spline.
M c dù ñã r t c g ng trong quá trình biên so n nhưng ch c ch n giáo trình
này v n không th tránh kh i nh ng thi u sót. Chúng tôi r t mong nh n ñư c nh ng
ý ki n ñóng góp c a b n ñ c cũng như các b n ñ ng nghi p trong lĩnh v c ð h a
ñ giáo trình ngày càng ñư c hoàn thi n hơn trong l n tái b n sau. ð a ch liên l c:
Khoa Công ngh Thông tin, trư ng ð i h c Khoa h c Hu .
ði n tho i: 054.826767. Email: paphuong@hueuni.edu.vn
nhtai@hueuni.edu.vn
Hu , tháng 08 năn 2003
Các tác gi
6. Updatesofts.com Ebooks Team
CHƯƠNG I
CÁC Y U T CƠ S C A ð H A
1.1. T NG QUAN V ð H A MÁY TÍNH
ð h a máy tính là m t lãnh v c phát tri n nhanh nh t trong Tin h c. Nó ñư c áp
d ng r ng rãi trong nhi u lãnh v c khác nhau thu c v khoa h c, k ngh , y khoa,
ki n trúc và gi i trí.
Thu t ng ñ h a máy tính (Computer Graphics) ñư c ñ xu t b i nhà khoa h c
ngư i M tên là William Fetter vào năm 1960 khi ông ñang nghiên c u xây d ng mô
hình bu ng lái máy bay cho hãng Boeing.
Các chương trình ñ h a ng d ng cho phép chúng ta làm vi c v i máy tính m t
cách tho i mái, t nhiên.
1.1.1 Gi i thi u v ñ h a máy tính
ð h a máy tính là m t ngành khoa h c Tin h c chuyên nghiên c u v các
phương pháp và k thu t ñ có th mô t và thao tác trên các ñ i tư ng c a th gi i
th c b ng máy tính.
V b n ch t: ñó là m t quá trình xây d ng và phát tri n các công c trên c hai
lĩnh v c ph n c ng và ph n m m h tr cho các l p trình viên thi t k các chương
trình có kh năng ñ h a cao.
V i vi c mô t d li u thông qua các hình nh và màu s c ña d ng c a nó, các
chương trình ñ h a thư ng thu hút ngư i s d ng b i tính thân thi n, d dùng,... kích
thích kh năng sáng t o và nâng cao năng su t làm vi c.
1.1.2. CÁC K THU T ð H A
D a vào các phương pháp x lý d li u trong h th ng, ta phân ra làm hai k thu t
ñ h a:
1.1.2.1. K thu t ñ h a ñi m
7. Chương I. Các y u t cơ s c a ñ h a
2
Nguyên lý c a k thu t này như sau: các hình nh ñư c hi n th thông qua t ng
pixel (t ng m u r i r c). V i k thu t này, chúng ta có th t o ra, xóa ho c thay ñ i
thu c tính c a t ng pixel c a các ñ i tư ng. Các hình nh ñư c hi n th như m t lư i
ñi m r i r c (grid), t ng ñi m ñ u có v trí xác ñ nh ñư c hi n th v i m t giá tr
nguyên bi u th màu s c ho c d sáng c a ñi m ñó. T p h p t t c các pixel c a grid
t o nên hình nh c a ñ i tư ng mà ta mu n bi u di n.
1.1.2.2. K thu t ñ h a vector
Nguyên lý c a k thu t này là xây d ng mô hình hình h c (geometrical model) cho
hình nh ñ i tư ng, xác ñ nh các thu c tính c a mô hình hình h c, sau ñó d a trên mô
hình này ñ th c hi n quá trình tô trát (rendering) ñ hi n th t ng ñi m c a mô hình,
hình nh c a ñ i tư ng.
k thu t này, chúng ta ch lưu tr mô hình toán h c c a các thành ph n trong mô
hình hình h c cùng v i các thu c tính tương ng mà không c n lưu l i toàn b t t c
các pixel c a hình nh ñ i tư ng.
1.1.3. ng d ng c a ñ h a máy tính hi n nay
Ngày nay, ñ h a máy tính ñư c s d ng r ng rãi trong nhi u lĩnh v c khác
nhau như: Công nghi p, thương m i, qu n lý, giáo d c, gi i trí,... Sau ñây là m t s
ng d ng tiêu bi u:
1.1.3.1. T o giao di n (User Interfaces): như các chương trình ng d ng WINDOWS,
WINWORD, EXCEL ... ñang ñư c ña s ngư i s d ng ưa chu ng nh tính thân
thi n, d s d ng.
1.1.3.2. T o ra các bi u ñ dùng trong thương m i, khoa h c và k thu t: Các bi u
ñ ñư c t o ra r t ña d ng, phong phú bao g m c hai chi u l n ba chi u góp ph n
thúc ñ y xu hư ng phát tri n các mô hình d li u h tr ñ c l c cho vi c phân tích
thông tin và tr giúp ra quy t ñ nh.
1.1.3.3. T ñ ng hóa văn phòng và ch b n ñi n t : dùng nh ng ng d ng c a ñ
h a ñ in n các tài li u v i nhi u lo i d li u khác nhau như: văn b n, bi u ñ , ñ th
và nhi u lo i hình nh khác ...
1.1.3.4. Thi t k v i s tr giúp c a máy tính (Computer aided design): M t trong
nh ng l i ích l n nh t c a máy tính là tr giúp con ngư i trong vi c thi t k . Các ng
8. Chương I. Các y u t cơ s c a ñ h a
3
d ng ñ h a cho phép chúng ta thi t k các thi t b cơ khí, ñi n, ñi n t , ô tô, máy bay,
... như ph n m m AUTOCAD ...
1.1.3.5. Lĩnh v c gi i trí, ngh thu t: cho phép các h a sĩ t o ra các hình nh ngay
trên màn hình c a máy tính. Ngư i h a sĩ có th t pha màu, tr n màu, th c hi n m t
s thao tác: c t, dán, t y, xóa, phóng to, thu nh ... như các ph n m m PAINTBRUSH,
CORELDRAW,...
1.1.3.6. Lĩnh v c b n ñ : xây d ng và in n các b n ñ ñ a lý. M t trong nh ng ng
d ng hi n nay c a ñ h a là h th ng thông tin ñ a lý (GIS - Geographical Information
System).
1.1.4. Các lĩnh v c c a ñ h a máy tính
1.1.4.1. Các h CAD/CAM (CAD – Computer Aided Design, CAM – Computer
Aided Manufacture)
Các h này xây d ng t p h p các công c ñ h a tr giúp cho vi c thi t k các chi
ti t và các h th ng khác nhau: các thi t b cơ khí, ñi n t ... Ch ng h n như ph n m m
Auto Cad c a h ng AutoDesk...
1.1.4.2. X lý nh (Image Processing)
ðây là lĩnh v c x lý các d li u nh trong cu c s ng. Sau quá trình x lý nh, d
li u ñ u ra là nh c a ñ i tư ng. Trong quá trình x lý nh, chúng ta s s d ng r t
nhi u các k thu t ph c t p: khôi ph c nh, xác ñ nh biên...
Ví d : ph n m m PhotoShop, Corel Draw, ...
1.1.4.3. Khoa h c nh n d ng (Pattern Recognition)
Nh n d ng là m t lĩnh v c trong k thu t x lý nh. T nh ng m u nh có s n, ta
phân lo i theo c u trúc ho c theo các phương pháp xác ñ nh nào ñó và b ng các thu t
toán ch n l c ñ có th phân tích hay t ng h p nh ñã cho thành m t t p h p các nh
g c, các nh g c này ñư c lưu trong m t thư vi n và căn c vào thư vi n này ñ nh n
d ng các nh khác.
Ví d : Ph n m m nh n d ng ch vi t (VnDOCR) c a vi n Công ngh Thông tin
Hà N i, nh n d ng vân tay, nh n d ng m t ngư i trong khoa h c hình s ...
1.1.4.4. ð h a minh h a (Presentation Graphics)
9. Chương I. Các y u t cơ s c a ñ h a
4
ðây là lĩnh v c ñ h a bao g m các công c tr giúp cho vi c hi n th các s li u
th ng kê m t cách tr c quan thông qua các m u ñ th ho c bi u ñ có s n. Ch ng h n
như các bi u ñ (Chart) trong các ph n m m Word, Excel...
1.1.4.5. Ho t hình và ngh thu t
Lĩnh v c ñ h a này bao g m các công c giúp cho các h a sĩ, các nhà thi t k
phim nh chuyên nghi p th c hi n các công vi c c a mình thông qua các k x o v
tranh, ho t hình ho c các k x o ñi n nh khác...
Ví d : Ph n m m x lý các k x o ho t hình như: 3D Animation, 3D Studio
Max..., ph n m m x lý các k x o ñi n nh: Adobe Primiere, Cool 3D,...
1.1.5. T ng quan v m t h ñ h a (Graphics System)
1.1.5.1. H th ng ñ h a
Ph n m m ñ h a: Là t p h p các câu l nh ñ h a c a h th ng. Các câu l nh l p
trình dùng cho các thao tác ñ h a không ñư c các ngôn ng l p trình thông d ng như
PASCAL, C, ... h tr . Thông thư ng, nó ch cung c p như là m t t p công c thêm
vào trong ngôn ng . T p các công c này dùng ñ t o ra các thành ph n cơ s c a m t
hình nh ñ h a như: ði m, ño n th ng, ñư ng tròn, màu s c,... Qua ñó, các nhà l p
trình ph i t o ra các chương trình ñ h a có kh năng ng d ng cao hơn.
Ph n c ng ñ h a: Là các thi t b ñi n t : CPU, Card, màn hình, chu t, phím...
giúp cho vi c th c hi n và phát tri n các ph n m m ñ h a.
1.1.5.2. Các thành ph n c a m t h th ng ñ h a
T p h p các công c này ñư c phân lo i d a trên nh ng công vi c trong t ng hoàn
c nh c th : xu t, nh p, bi n ñ i nh, ... bao g m:
• T p công c t o ra nh g c (output primitives): cung c p các công c cơ b n
nh t cho vi c xây d ng các hình nh. Các nh g c bao g m các chu i ký t , các th c
th hình h c như ñi m, ñư ng th ng, ña giác, ñư ng tròn,...
• T p các công c thay ñ i thu c tính (attributes): dùng ñ thay ñ i thu c tính c a
các nh g c. Các thu c tính c a nh g c bao g m màu s c (color), ki u ñư ng th ng
(line style), ki u văn b n (text style), m u tô vùng (area filling pattern),...
10. Chương I. Các y u t cơ s c a ñ h a
5
• T p các công c thay ñ i h quan sát (viewing transformation): M t khi mà các
nh g c và các thu c tính c a nó ñư c xác ñ nh trong h t a ñ th c, ta c n ph i chi u
ph n quan sát c a nh sang m t thi t b xu t c th . Các công c này cho phép ñ nh
nghĩa các vùng quan sát trên h t a ñ th c ñ hi n th hình nh ñó.
• T p các công c ph c v cho các thao tác nh p d li u (input operations): Các
ng d ng ñ h a có th s d ng nhi u lo i thi t b nh p khác nhau như bút v , b ng,
chu t, ... Chính vì v y, c n xây d ng thêm các công c này ñ ñi u khi n và x lý các
d li u nh p sao cho có hi u qu .
M t yêu c u v ph n c ng không th thi u ñ t ra cho các ph n m m ñ h a là:
tính d mang chuy n (portability), có nghĩa là chương trình có th chuy n ñ i m t
cách d dàng gi a các ki u ph n c ng khác nhau. N u không có s chu n hóa, các
chương trình thi t k thư ng không th chuy n ñ i ñ n các h th ng ph n c ng khác
mà không vi t l i g n như toàn b chương trình.
Sau nh ng n l c c a các t ch c chu n hóa qu c t , m t chu n cho vi c phát tri n
các ph n m m ñ h a ñã ra ñ i: ñó là GKS (Graphics Kernel System - H ñ h a cơ
s ). H th ng này ban ñ u ñư c thi t k như là m t t p các công c ñ h a hai chi u,
sau ñó ñư c phát tri n ñ m r ng trong ñ h a ba chi u.
Ngoài ra, còn có m t s chu n ñ h a ph bi n như:
• CGI (Computer Graphics Interface System): h chu n cho các phương pháp
giao ti p v i các thi t b ngo i vi.
• OPENGL: thư vi n ñ h a c a h ng Silicon Graphics.
• DIRECTX: thư vi n ñ h a c a h ng Microsoft.
1.2. MÀN HÌNH ð H A
M i máy tính ñ u có m t CARD dùng ñ qu n lý màn hình, g i là Video Adapter
hay Graphics Adapter. Có nhi u lo i adapter như: CGA, MCGA, EGA, VGA,
Hercules... Các adapter có th làm vi c hai ch ñ : văn b n (Text Mode) và ñ h a
(Graphics Mode).
Có nhi u cách ñ kh i t o các mode ñ h a. Ta có th s d ng hàm $00 ng t $10
c a BIOS v i các Mode sau:
11. Chương I. Các y u t cơ s c a ñ h a
6
• Mode $12: ch ñ phân gi i 640x480x16
• Mode $13: ch ñ phân gi i 320x200x256
Ta có th vi t m t th t c ñ kh i t o ch ñ ñ h a như sau:
Procedure InitGraph(Mode:Word);
var Reg:Registers;
Begin
reg.ah := 0;
reg.al := mode;
intr($10,reg);
End;
Các b n có th tham kh o thêm các tài li u v l p trình h th ng.
1.3. CÁC KHÁI NI M
1.3.1. ði m (Pixel)
Trong các h th ng ñ h a, m t ñi m ñư c bi u th b i các t a ñ b ng s .
Ví du: Trong m t ph ng, m t ñi m là m t c p (x,y)
Trong không gian ba chi u, m t ñi m là b ba (x,y,z)
Trên màn hình c a máy tính, m t ñi m là m t v trí trong vùng nh màn hình dùng
ñ lưu tr các thông tin v ñ sáng c a ñi m tương ng trên màn hình.
S ñi m v trên màn hình ñư c g i là ñ phân gi i c a màn hình (320x200,
480x640, 1024x1024,...)
Cách hi n th thông tin lên màn hình ñ h a:
Vùng ñ m màn hình hay còn g i là b nh hi n th ñư c b t ñ u t ñ a ch
A000h:$0000h. Vì v y, ñ hi n th thông tin ra màn hình thì ta ch c n ñưa thông tin
vào vùng ñ m màn hình b t ñ u t ñ a ch trên là ñư c.
Có nhi u cách ñ v m t ñi m ra màn hình: có th dùng các ph c v c a BIOS ho c
cũng có th truy xu t tr c ti p vào vùng nh màn hình.
• N u dùng ph c v c a BIOS, ta dùng hàm $0C ng t $10:
Procedure PutPixel(Col,Row:Word; Color:Byte);
Var reg:Registers;
Begin
reg.ah:=$0C;
reg.al:=Color;
12. Chương I. Các y u t cơ s c a ñ h a
7
reg.bh:=0;
reg.cx:=Col;
reg.dx:=Row;
Intr($10,reg);
End;
• N u mu n truy xu t tr c ti p vào vùng ñ m màn hình: Gi s m t ñi m (x,y)
ñư c v trên màn hình v i ñ phân gi i 320x200x256 (mode 13h), ñi m ñó s ñư c
ñ nh v trong vùng ñ m b t ñ u t ñ a ch segment A000h và ñ a ch offset ñư c tính
theo công th c: Offset = y*320 + x.
Ta có th vi t th t c như sau:
Procedure PutPixel(x,y:Word; Color:Byte);
Var Offset:Word;
Begin
Offset:=(y shl 8) + (y shl 6) + x;
Mem[$A000:Offset]:=Color;
End;
1.3.2. Các bi u di n t a ñ
H u h t các chương trình ñ h a ñ u dùng h t a ñ Decartes (Hình 1.1).
Ta bi n ñ i:
O
Y
X X
Y
O
MaxY
MaxX
T a ñ th gi i th c T a ñ thi t b màn hình.
Hình 1.1
1.3.3. ðo n th ng
Trong các h th ng ñ h a, các ño n th ng ñư c bi u th b i vi c “tô” ño n th ng
b t ñ u t ñi m ñ u mút này kéo dài cho ñ n khi g p ñi m ñ u mút kia.
1.4. CÁC THU T TOÁN V ðO N TH NG
13. Chương I. Các y u t cơ s c a ñ h a
8
1.4.1. Bài toán: V ño n th ng ñi qua 2 ñi m A(x1,y1) và B(x2,y2)
* Trư ng h p x1=x2 ho c y1=y2: r t ñơn gi n.
* Trư ng h p ñư ng th ng có h s góc m:
Ý tư ng:
Vì các Pixel ñư c v các v trí nguyên nên ñư ng th ng ñư c v gi ng như hình
b c thang (do làm tròn).
V n ñ ñ t ra là ch n các t a ñ nguyên g n v i ñư ng th ng nh t.
1.4.2. Thu t toán DDA (Digital differential analyzer)
Xét ñư ng th ng có h s góc 0<m≤1(gi s ñi m ñ u A n m bên trái và ñi m cu i
B n m bên ph i). N u ta ch n ∆x=1và tính giá tr y k ti p như sau:
yk+1 = yk + ∆y = yk + m.∆x
= yk + m
V i h s góc m>1: ta hoán ñ i vai trò c a x,y cho nhau. N u ch n ∆y=1 thì:
xk+1 = xk + 1/m
Tương t , n u ñi m B n m bên trái và A n m bên ph i thì:
yk+1 = yk - m (0<m≤1, ∆x= -1)
xk+1 = xk - 1/m (m>1, ∆y= -1)
Tóm l i: Ta có thu t toán v ñư ng th ng DDA như sau:
Nh p A(x1,y1) B(x2,y2)
Tính ∆x = x2 - x1 ∆y = y2 - y1 Step = Max(|∆x| , |∆y|)
Kh i t o các giá tr :
IncX = ∆x/Step; IncY = ∆y/Step; {bư c tăng khi v }
x = x1; y = y1; {Ch n ñi m v ñ u tiên}
V ñi m (x,y);
Cho i ch y t 1 ñ n Step:
x = x + IncX; y = y + IncY;
V ñi m (Round(x),Round(y))
T ñó ta có th t c v ño n th ng theo thu t toán DDA như sau:
Procedure DDALine(x1,y1,x2,y2:Integer);
var dx,dy,step,i:integer;
14. Chương I. Các y u t cơ s c a ñ h a
9
xInc,yInc,x,y:real;
Begin
dx:=x2-x1; dy:=y2-y1;
If abs(dx)>abs(dy) Then step:=abs(dx)
else step:=abs(dy);
xInc:=dx/step;
yInc:=dy/step;
x:=x1;
y:=y1;
Putpixel(round(x),round(y),15);
for i:=1 to step do
Begin
x:=x+xInc;
y:=y+yInc;
Putpixel(round(x),round(y),15);
End;
End;
1.4.3. Thu t toán Bresenham
Phương trình ñư ng th ng có th phát
bi u dư i d ng: y = m.x + b (1)
Phương trình ñư ng th ng qua 2 ñi m:
12
1
xx
xx
−
−
=
12
1
yy
yy
−
−
(*)
ð t ∆x = x2 - x1
∆y = y2 - y1
(*) ⇔ y = x.
x
y
∆
∆
+ y1 - x1.
x
y
∆
∆
Suy ra m =
x
y
∆
∆
nên ∆y = m. ∆x (2)
b = y1 - m.x1 (3)
Ta ch xét trư ng h p h s góc 0<m<1.
Gi s ñi m (xi,yi) ñã ñư c v . Ta ph i ch n ñi m k ti p là:
xi xi+1
yi+
1
y
yi
Hình 1.2
15. Chương I. Các y u t cơ s c a ñ h a
10
(xi + 1,yi) ho c (xi +1,yi +1) (Xem hình 1.2)
Xét kho ng cách gi a 2 ñi m ch n v i ñi m n m trên ñư ng th c. N u kho ng
cách nào bé hơn thì ta l y ñi m ñó.
ð t:
d1 = y - yi = m.(xi +1) + b - yi
d2 = (yi +1) - y = yi + 1 - m.(xi + 1) - b
Suy ra:
d1 - d2 = 2m.(xi + 1) - 2yi + 2b - 1
= 2.
x
y
∆
∆
.(xi + 1) - 2yi + 2b - 1
⇔ ∆x(d1 - d2) = 2∆y.xi - 2∆x.yi + 2∆y + ∆x.(2b - 1)
ð t pi = ∆x(d1 - d2) và C = 2∆y + ∆x.(2b - 1)
thì pi = 2∆y.xi - 2∆x.yi + C (4)
pi+1 = 2∆y.xi+1 - 2∆x.yi+1 + C
Suy ra:
pi+1 - pi = 2∆y(xi+1 - xi) - 2∆x(yi - yi+1)
= 2∆y - 2∆x(yi+1 - yi) (5)
( vì xi+1 - xi = 1 )
* Nh n xét:
. N u pi < 0: Ch n yi+1 = yi T (5) ⇒ pi+1 = pi + 2∆y. (d1<d2)
. N u pi ≥ 0: Ch n yi+1 = yi + 1 T (5) ⇒ pi+1 = pi + 2∆y - 2∆x. (d1>d2)
V i ñi m mút ñ u tiên, theo (4) ta có:
p1 = 2∆y.x1 - 2∆x.y1 + 2∆y + ∆x[2.(y1 - m.x1) - 1] = 2∆y - ∆x
T ñó, ta có th tóm t t thu t toán v ñư ng th ng theo Bresenham cho trư ng h p h
s góc 0<m<1 như sau:
• Bư c 1: Nh p các ñi m ñ u mút. ði m ñ u mút bên trái ch a t a ñ (x1,y1), ñi m
ñ u mút bên ph i ch a t a ñ (x2,y2).
• Bư c 2: ði m ñư c ch n ñ v ñ u tiên là (x1,y1).
• Bư c 3: Tính ∆x = |x2 - x1| , ∆y = |y2 - y1| và P1 = 2∆y - ∆x
N u pi < 0 thì ñi m k ti p là (xi + 1,yi)
Ngư c l i: ñi m k ti p là (xi + 1,yi + 1)
16. Chương I. Các y u t cơ s c a ñ h a
11
• Bư c 4: Ti p t c tăng x lên 1 Pixel. v trí xi +1, ta tính:
pi+1 = pi + 2∆y n u pi < 0
pi+1 = pi + 2.( ∆y - ∆x) n u pi ≥ 0
N u pi+1 < 0 thì ta ch n to ñ y k ti p là yi+1
Ngư c l i thì ta ch n yi+1 +1
• Bư c 5: L p l i bư c 4 cho ñ n khi x = x2.
Sau ñây là th t c cài ñ t thu t toán:
Procedure LINE(x1,y1,x2,y2:integer); { 0<m<1}
var dx,dy,x,y,p,c1,c2,xMax:integer;
Begin
dx:=abs(x1-x2);
dy:=abs(y1-y2);
c1:=2*dy;
c2:=2*(dy-dx);
p:=2*dy-dx;
if x1>x2 then
begin
x:=x2; y:=y2; xMax:=x1;
end
else
begin
x:=x1;y:=y1;xMax:=x2;
end;
putpixel(x,y,red);
while x<xMax do
begin
x:=x+1;
if p<0 then p:=p+c1
else begin
y:=y+1;
p:=p+c2;
end;
17. Chương I. Các y u t cơ s c a ñ h a
12
putpixel(x,y,red);
end;
end;
1.4.4. Thu t toán MidPoint
Ta ch xét trư ng h p h s góc 0<m<1.
Thu t toán này ñưa ra cách ch n ñi m S(xi+1,yi) hay P(xi+1,yi+1) b ng cách so
sánh ñi m th c Q(xi+1,y) v i ñi m M (trung ñi m c a S và P).
N u ñi m Q n m dư i ñi m M thì ch n ñi m S
Ngư c l i, ch n ñi m P. (Xem hình 1.3)
Ta có d ng t ng quát c a phương trình ñư ng th ng:
Ax + By + C = 0
v i A = y2 – y1 , B = –(x2 – x1) ,
C = x2.y1 – x1.y2
ð t F(x,y) = Ax + By + C, ta có nh n xét:
< 0 n u (x,y) n m phía trên ñư ng th ng
F(x,y) = 0 n u (x,y) thu c v ñư ng th ng
> 0 n u (x,y) n m phía dư i ñư ng th ng
Lúc này, vi c ch n các ñi m S hay P ñư c ñưa v vi c xét d u c a:
pi = F(M) = F(xi + 1,yi +
2
1
)
N u pi < 0 ⇒ M n m trên ño n
th ng ⇒ Q n m dư i M ⇒ Ch n S
N u pi ≥ 0 ⇒ M n m dư i ño n
th ng ⇒ Q n m trên M ⇒ Ch n P
M t khác:
pi = F(xi + 1,yi +
2
1
)
pi+1 = F(xi+1 + 1,yi+1 +
2
1
)
nên
pi+1 - pi = F(xi+1 + 1,yi+1 +
2
1
) - F(xi + 1,yi +
2
1
)
P
Q
M
S
xi
xi+1
yi+
1
yi
Hình 1.3
18. Chương I. Các y u t cơ s c a ñ h a
13
= A(xi+1+1) + B(yi+1 +
2
1
) + C - A(xi+1) - B(yi +
2
1
) - C
= A(xi+1 - xi) + B(yi+1 - yi)
= A + B(yi+1 - yi) (vì xi+1 - xi =1)
Suy ra:
pi+1 = pi + A + B(yi+1 - yi) (*)
*Nh n xét:
. N u pi < 0: Ch n ñi m S: yi+1 = yi T (*) suy ra pi+1 = pi + A
. N u pi ≥ 0: Ch n ñi m P: yi+1 = yi + 1 T (*) suy ra pi+1 = pi + A + B
V i ñi m mút ñ u tiên, ta có:
p1 = F(x1 + 1,y1 +
2
1
) = A(x1+1) + B(y1 +
2
1
) + C
= Ax1 + Bx1 + C + A +
2
B
= A +
2
B
(vì Ax1 + Bx1 + C = 0)
Thu t toán MidPoint cho k t qu tương t như thu t toán Bresenham.
1.5. THU T TOÁN V ðƯ NG TRÒN
Xét ñư ng tròn (C) tâm O(xc,yc) bán kính R.
Phương trình t ng quát c a ñư ng tròn có d ng:
(x - xc)2
+ (y - yc)2
= R2
(*)
⇔ y = yc ± R x xC
2 2
− −( ) (1)
ð ñơn gi n thu t toán, ñ u tiên ta xét ñư ng
tròn có tâm g c t a ñ (xc=0 và yc=0).
* Ý tư ng:
Do tính ñ i x ng c a ñư ng tròn nên n u ñi m
(x,y)∈(C) thì các ñi m (y,x), (-y,x), (-x,y), (-x,-y), (-y,-x), (y,-x), (x,-y) cũng ∈ (C) (Hình 1.4)
Vì v y, ta ch c n v m t ph n tám cung tròn r i l y ñ i x ng qua g c O và 2 tr c to
ñ thì ta có ñư c toàn b ñư ng tròn.
1.5.1. Thu t toán Bresenham
Gi s (xi,yi) ñã v ñư c. C n ch n ñi m k ti p là (xi +1,yi) ho c (xi +1,yi -1)
(Hình 1.5)
T phương trình: x2
+ y2
= R2
ta tính ñư c giá tr y th c ng v i xi +1 là:
(-x,-
y)
(x,y
)
(y,x
)
(-
y,x)
(-
x,y)
(-y,-
x)
(x,-
y)
(
y,-
Hình
1.4
19. Chương I. Các y u t cơ s c a ñ h a
14
y2
= R2
- (xi +1)2
ð t: d1 = yi
2
- y2
= yi
2
- R2
+ (xi + 1)2
d2 = y2
- (yi - 1)2
= R2
- (xi + 1)2
- (yi - 1)2
Suy ra:
pi = d1 - d2 = 2.(xi + 1)2
+ yi
2
+ (yi - 1)2
- 2R2
(2)
⇒ pi+1 = 2.(xi+1 + 1)2
+ y2
i+1 + (yi+1 - 1)2
- 2R2
(3)
T (2) và (3) ta có:
pi+1 - pi = 4xi + 6 + 2.(y2
i+1 - yi
2
) - 2.(yi+1 - yi)
⇒ pi+1 = pi + 4xi + 6 + 2.(y2
i+1 - yi
2
) - 2.(yi+1 - yi)
(4)
* Nh n xét:
N u pi < 0: ch n yi+1 = yi (4) ⇒ pi+1 = pi + 4xi + 6
N u pi ≥ 0: ch n yi+1 = yi - 1 (4) ⇒ pi+1 = pi + 4.(xi - yi) + 10
Ta ch n ñi m ñ u tiên c n v (0,R), theo (2) ta có: p1 = 3 - 2R
Tóm l i: Ta có thu t toán v ñư ng tròn:
• Bư c 1: Ch n ñi m ñ u c n v (x1,y1) = (0,R)
• Bư c 2: Tính P ñ u tiên: p1 = 3 - 2R
N u p < 0: ch n ñi m k ti p là (xi +1,yi). Ngư c l i ch n ñi m (xi + 1,yi - 1)
• Bư c 3: x:=x + 1, tính l i p:
N u pi < 0: pi+1 = pi + 4xi + 6. Ngư c l i: pi+1 = pi + 4.(xi - yi) + 10
Khi ñó:
N u pi+1 < 0: ch n ñi m k ti p là (xi +1,yi+1). Ngư c l i ch n ñi m (xi+1,yi+1-1)
• Bư c 4: L p l i bư c 3 cho ñ n khi x = y.
Sau ñây là th t c ñ cài ñ t thu t toán:
Procedure Circle(x0,y0,r:Integer);
Var p,x,y:Integer;
Procedure VeDiem;
Begin
PutPixel( x0 + x , y0 + y , color);
PutPixel( x0 - x , y0 + y , color);
PutPixel( x0 + x , y0 - y , color);
PutPixel( x0 - x , y0 - y , color);
yi
y
yi-
1
xi
xi+1
Hình
1.5
20. Chương I. Các y u t cơ s c a ñ h a
15
PutPixel( x0 + y , y0 + x , color);
PutPixel( x0 - y , y0 + x , color);
PutPixel( x0 + y , y0 - x , color);
PutPixel( x0 - y , y0 - x , color);
End;
Begin
x:=0; y:=r;
p:=3 - 2*r;
While x<=y do
Begin
VeDiem;
If p<0 then p:=p + 4*x + 6
Else
Begin
p:=p + 4*(x-y) + 10;
y:=y-1;
End;
x:=x+1;
End;
End;
1.5.2. Thu t toán MidPoint
T phương trình ñư ng tròn: x2
+ y2
= R2
ð t F(x,y) = x2
+ y2
- R2
,ta có:
< 0 n u (x,y) trong ñư ng tròn
F(x,y) = 0 n u (x,y) trên ñư ng tròn
> 0 n u (x,y) ngoàiñư ng tròn
Lúc này, vi c ch n các ñi m S(xi+1,yi) hay
P(xi+1,yi-1) ñư c ñưa v vi c xét d u c a:
pi = F(M) = F(xi + 1,yi -
2
1
) (Hình 1.6)
N u pi < 0 ⇒ M n m trong ñư ng tròn ⇒ Q g n S hơn ⇒ Ch n S
N u pi ≥ 0 ⇒ M n m ngoài ñư ng tròn ⇒ Q g n P hơn ⇒ Ch n P
yi
yi-
1
xi xi+1
S
M
Q
P
Hình
1.6
21. Chương I. Các y u t cơ s c a ñ h a
16
M t khác:
pi = F(xi + 1,yi -
2
1
)
pi+1 = F(xi+1 + 1,yi+1 -
2
1
)
nên
pi+1 - pi = F(xi+1 + 1,yi+1 -
2
1
) - F(xi + 1,yi -
2
1
)
= [(xi+1+1)2
+ (yi+1 -
2
1
)2
- R2
] - [(xi+1)2
+ (yi -
2
1
)2
- R2
]
= [(xi+2)2
+ (yi+1 -
2
1
)2
- R2
] - [(xi+1)2
+ (yi -
2
1
)2
- R2
]
= 2xi + 3 + (yi+1
2
- yi
2
) - (yi+1 - yi)
Suy ra:
pi+1 = pi + 2xi + 3 + (yi+1
2
- yi
2
) - (yi+1 - yi) (*)
*Nh n xét:
. N u pi < 0: Ch n ñi m S : yi+1 = yi T (*) ⇒ pi+1 = pi + 2xi + 3
. N u pi ≥ 0: Ch n ñi m P: yi+1 = yi - 1 T (*) ⇒ pi+1 = pi + 2(xi - yi) + 5
V i ñi m ñ u tiên (0,R), ta có:
p1 = F(x1 + 1,y1 -
2
1
) = F(1,R -
2
1
) = 1 + (R -
2
1
)2
- R2
=
4
5
- R
1.6. THU T TOÁN V ELLIPSE
ð ñơn gi n, ta ch n Ellipse có tâm g c t a
ñ . Phương trình c a nó có d ng:
2
2
a
x
+ 2
2
b
y
= 1
Ta có th vi t l i: y2
= - 2
2
a
b
.x2
+ b2
(*)
*Ý tư ng: Gi ng như thu t toán v ñư ng tròn.
Ch có s khác bi t ñây là ta ph i v 2 nhánh: M t nhánh t trên xu ng và m t
nhánh t dư i lên và 2 nhánh này s g p nhau t i ñi m mà ñó h s góc c a ti p
tuy n v i Ellipse = -1 (Hình 1.7).
Phương trình ti p tuy n v i Ellipse t i ñi m (x0,y0) ∈ (E) :
Hình
1.7
22. Chương I. Các y u t cơ s c a ñ h a
17
x0. 2
a
x
+ y0. 2
b
y
= 1
Suy ra, h s góc c a ti p tuy n t i ñi m ñó là: - 2
0
2
0 .
ay
bx
.
1.6.1. Thu t toán Bresenham
ñây, ta ch xét nhánh v t trên xu ng.
Gi s ñi m (xi,yi) ñã ñư c v . ði m ti p theo c n ch n s là (xi+1,yi) ho c
(xi+1,yi-1)
Thay (xi +1) vào (*): y2
= - 2
2
a
b
.(xi +1)2
+ b2
ð t:
d1= yi2
- y2
= yi
2
+ 2
2
a
b
.(xi +1)2
-b2
d2= y2
- (yi -1)2
= - 2
2
a
b
.(xi +1)2
+ b2
- (yi -1)2
⇒ pi = d1 - d2 = 2.[ 2
2
a
b
.(xi +1)2
- b2
] + 2.(yi
2
+ yi) -1
pi+1 = 2.[ 2
2
a
b
.(xi+1 +1)2
- b2
] + 2.(yi+1
2
+ yi+1) -1
Suy ra:
pi+1 - pi = 2. 2
2
a
b
.[(xi+1 +1)2
- (xi +1)2
] + 2.( yi+1
2
- yi
2
+ yi+1 - yi) (**)
*Nh n xét:
• pi < 0: Ch n yi+1 = yi
(**) ⇒ pi+1 = pi + 2. 2
2
a
b
.(2x + 3)
• pi ≥ 0: Ch n yi+1 = yi -1
(**) ⇒ pi+1 = pi + 2. 2
2
a
b
.(2x + 3) - 4yi
V i ñi m ñ u tiên (0,b), ta có:
p1 = 2 2
2
a
b
- 2b + 1
T ñó, ta có th t c v Ellipse như sau:
23. Chương I. Các y u t cơ s c a ñ h a
18
Procedure Ellipse(xc,yc,a,b:Integer;Color:Byte);
Var p,a2,b2:real;
x,y:integer;
(*-------------------*)
Procedure VeDiem;
Begin
PutPixel(xc+x,yc+y,Color);
PutPixel(xc-x,yc+y,Color);
PutPixel(xc-x,yc-y,Color);
PutPixel(xc+x,yc-y,Color);
End;
(*-------------------*)
Begin
a2:=a*a;
b2:=b*b;
{Nhanh 1}
x:=0; y:=b;
p:=2*b2/a2 - 2*b + 1;
While (b2/a2)*(x/y)<1 do
Begin
VeDiem;
If p<0 then p:=p + 2*(b2/a2)*(2*x+3)
else Begin
p:=p - 4*y + 2*(b2/a2)*(2*x+3);
y:=y-1;
End;
x:=x+1;
End;
{Nhanh 2}
y:=0; x:=a;
p:=2*(a2/b2) - 2*a + 1;
While (a2/b2)*(y/x)<=1 do
24. Chương I. Các y u t cơ s c a ñ h a
19
Begin
VeDiem;
If p<0 then p:=p + 2*(a2/b2)*(2*y+3)
else Begin
p:=p - 4*x + 2*(a2/b2)*(2*y+3);
x:=x-1;
End;
y:=y+1;
End;
End;
1.6.2. Thu t toán MidPoint
G i ý:
Phương trình Ellipse: 2
2
a
x
+ 2
2
b
y
= 1
Nhánh 1:
p1 = b2
- a2
b +
4
1
.a2
If pi < 0 Then pi+1 = pi + b2
+ 2b2
xi+1
else pi+1 = pi + b2
+ 2b2
xi+1 - 2a2
yi+1
Nhánh 2:
p1 = b2
(xi +
2
1
)2
+ a2
(yi - 1)2
- a2
b2
If pi > 0 Then pi+1 = pi + a2
- 2a2
yi+1
else pi+1 = pi + a2
+ 2b2
xi+1 - 2a2
yi+1
Procedure MidEllipse(xc,yc,a,b:Integer;Color:Byte);
Var p,a2,b2:real;
x,y:Integer;
(*-------------------*)
Procedure VeDiem;
Begin
PutPixel(xc+x,yc+y,Color);
PutPixel(xc-x,yc+y,Color);
PutPixel(xc-x,yc-y,Color);
25. Chương I. Các y u t cơ s c a ñ h a
20
PutPixel(xc+x,yc-y,Color);
End;
(*-------------------*)
Begin
a2:=a*a;
b2:=b*b;
{Nhanh 1}
x:=0; y:=b;
Vediem;
p:=b2 - a2*b + 0.25*a2;
While (b2/a2)*(x/y)<1 do
Begin
x:=x+1;
If p<0 Then p:=p + b2 + 2*b2*x
else begin
y:=y-1;
p:=p + b2 + 2*b2*x - 2*a2*y;
end;
Vediem;
End;
{Nhanh 2}
p:=b2*(x+0.5)*(x+0.5) + a2*(y-1)*(y-1)- a2*b2 ;
While y>0 do
Begin
y:=y-1;
If p>0 Then p:=p + a2 - 2*a2*y
else begin
x:=x+1;
p:=p + a2 + 2*b2*x - 2*a2*y;
end;
Vediem;
End;
26. Chương I. Các y u t cơ s c a ñ h a
21
End;
1.7. PHƯƠNG PHÁP V ð TH HÀM S
1.7.1. Bài toán: V ñ th c a hàm s y = f(x) trên ño n [Min,Max].
*Ý tư ng: Cho x ch y t ñ u ñ n cu i ñ l y các t a ñ (x,f(x)) sau ñó làm tròn
thành s nguyên r i n i các ñi m ñó l i v i nhau.
1.7.2. Gi i thu t:
• Bư c 1: Xác ñ nh ño n c n v [Min,Max].
• Bư c 2: - ð t g c t a ñ lên màn hình (x0,y0).
- Chia t l v trên màn hình theo h s k.
- Ch n bư c tăng dx c a m i ñi m trên ño n c n v .
• Bư c 3: Ch n ñi m ñ u c n v : x = Min, tính f(x)
ð i qua t a ñ màn hình và làm tròn:
x1:=x0 + Round(x.k);
y1:=y0 - Round(y.k);
Di chuy n ñ n (x1,y1): MOVETO(x1,y1);
• Bư c 4:
Tăng x lên v i s gia dx: x:=x + dx;
ð i qua t a ñ màn hình và làm tròn:
x2:=x0 + Round(x.k);
y2:=y0 - Round(y.k);
V ñ n (x2,y2): LINETO(x2,y2);
• Bư c 5: L p l i bư c 4 cho ñ n khi x > Max thì d ng.
Ví d : V ñ th hàm s f(x) = Sin(x)
Uses crt,Graph;
Var dau,cuoi:real;
Gd,Gm:Integer;
Function F(x:real):real;
Begin
F:=Sin(x);
End;
Procedure VeHinhSin(ChukyDau,ChuKyCuoi:real);
27. Chương I. Các y u t cơ s c a ñ h a
22
var x1,y1,x2,y2:integer;
a,x,k:real;
x0,y0:word;
Begin
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
K:=GetMaxX/30;
a:=Pi/180;
x:=ChuKyDau;
x1:=x0 + Round(x*k);
y1:=y0 - Round(F(x)*k);
Moveto(x1,y1);
While x<ChuKyCuoi do
Begin
x:=x+a;
x2:=x0 + Round(x*k);
y2:=y0 - Round(F(x)*k);
LineTo(x2,y2);
End;
End;
BEGIN
Gd:=0;
InitGraph(Gd,Gm,’C:BPBGI’);
Dau:=-4*Pi; cuoi:=4*Pi;
VeHinhSin(Dau,cuoi);
repeat until KeyPressed;
CloseGraph;
END.
BÀI T P
1. Cho hai ñi m A(20,10) và B(25,13). Hãy tính các giá tr Pi, xi, yi m i bư c khi v
ño n th ng AB theo thu t toán Bresenham/MidPoint và k t q a ñi n vào b ng sau:
i 1 2 3 4 5 6
28. Chương I. Các y u t cơ s c a ñ h a
23
Pi ? ? ? ? ? ?
xi ? ? ? ? ? ?
yi ? ? ? ? ? ?
2. Cài ñ t th t c v ño n th ng theo thu t toán Bresenham và MidPoint cho các
trư ng h p h s góc m>1, m<-1, -1<m<0.
3. Vi t th t c LineTo(x,y:Integer); ñ v ño n th ng t v trí hi n th i ñ n ñi m có
t a ñ (x,y).
4. Vi t th t c LineRel(dx,dy:Integer); ñ v ño n th ng t v trí hi n th i ñ n ñi m
m i cách ñi m hi n th i m t kho ng theo tr c x là dx và theo tr c y là dy.
5. Cài ñ t th t c v ñư ng tròn theo thu t toán MidPoint.
6. Vi t th t c Arc(x0,y0,g1,g2:Integer; R:Word); ñ v cung tròn có tâm (x0,y0)
bán kính R v i góc b t ñ u là g1 và góc k t thúc là g2.
7. Vi t th t c Sector(x0,y0,g1,g2:Integer; Rx,Ry:Word); ñ v cung Ellipse có tâm
(x0,y0) bán kính theo tr c X là Rx, bán kính theo tr c Y là Ry v i góc b t ñ u là g1
và góc k t thúc là g2.
8. Vi t th t c DrawPoly(P:Array; n:Byte; xc,yc,R:Word); ñ v m t ña giác ñ u
có n ñ nh lưu trong m ng P n i ti p trong ñư ng tròn tâm (xc,yc) bán kính R.
9. Vi t th t c Circle3P(A,B,C:ToaDo2D); ñ v ñư ng tròn ñi qua 3 ñi m A,B,C.
10. Vi t th t c Arc3P(A,B,C:ToaDo2D); ñ v cung tròn ñi qua 3 ñi m A,B,C.
11. V ñ th các hàm s sau:
y = ax2
+ bx + c, y = ax3
+ bx2
+ cx + d, y = ax4
+ bx3
+ cx2
+ dx + e
y =
dcx
bax
+
+
, y =
edx
cbxax
+
++2
.
12. V các ñư ng cong sau:
y2
= 2px 2
2
a
x
+ 2
2
b
y
= 1 2
2
a
x
- 2
2
b
y
= ±1
Bài t p l n: Vi t chương trình kh o sát và v ñ th các hàm s sơ c p bài t p s 11.
29. CHƯƠNG 2
TÔ MÀU
2.1. GI I THI U V CÁC H MÀU
Giác quan c a con ngư i c m nh n ñư c các v t th xung quanh thông qua các tia
sáng màu t t hơn r t nhi u so v i 2 màu tr ng ñen. Vì v y, vi c xây d ng nên các
chu n màu là m t trong nh ng lý thuy t cơ b n c a lý thuy t ñ h a.
Vi c nghiên c u v màu s c ngoài các y u t v m t v t lý như bư c sóng, cư ng
ñ , còn có 3 y u t khác liên quan ñ n c m nh n sinh lý c a m t ngư i dư i tác ñ ng
c a chùm sáng màu ñi ñ n t v t th là: Hue (s c màu), Saturation (ñ b o hòa),
Lightness (ñ sáng). M t trong nh ng h màu ñư c s d ng r ng rãi ñ u tiên do
A.H.Munsell ñưa ra vào năm 1976, bao g m 3 y u t : Hue, Lightness và Saturation.
Ba mô hình màu ñư c s d ng và phát tri n nhi u trong các ph n c ng là: RGB -
dùng v i các màn hình CRT (Cathode ray bube), YIQ – dùng trong các h th ng ti vi
màu băng t n r ng và CMY - s d ng trong m t s thi t b in màu.
Ngoài ra, còn có nhi u h màu khác như: HSV, HSL, YIQ, HVC, ...
2.1.1.H RGB (Red, Green, Blue)
M t c a chúng ta c m nh n ba màu rõ nh t là Red (ñ ), Green (l c), Blue (xanh).
Vì v y, ngư i ta ñã xây d ng mô hình màu RGB (Red,Green, Blue) là t p t t c các
màu ñư c xác ñ nh thông qua ba màu v a nêu. Chu n này ñ u tiên ñư c xây d ng cho
các h vô tuy n truy n hình và trong các máy vi tính. T t nhiên, không ph i là t t c
các màu ñ u có th bi u di n qua ba màu nói trên nhưng h u h t các màu ñ u có th
chuy n v ñư c.
H này ñư c xem như m t kh i ba chi u v i màu Red là tr c X, màu Green là tr c
Y và màu Blue là tr c Z. M i màu trong h này ñư c xác ñ nh theo ba thành ph n
RGB (Hình 2.1).
30. Chương II. Tô màu
26
Y
Z
X
Black
White
Blue Cyan
Yellow
Green
Red
Magenta
Hình 2.1. H màu RGB
Ví d :
Màu Red là (1, 0, 0)
Màu Blue là (0, 0, 1)
Red + Green = Yellow
Red + Green + Blue = White
2.1.2. H CMY (Cyan, Magenta, Yellow)
H này cũng ñư c xem như m t kh i ba chi u như h RGB. Nhưng h CMY trái
ngư c v i h RGB, ch ng h n:
White có thành ph n (0, 0, 0)
Cyan có thành ph n (1, 0, 0)
Green có thành ph n (1, 0, 1) ...
Sau ñây là công th c chuy n ñ i t h RGB → CMY :
−
=
B
G
R
Y
M
C
1
1
1
2.1.3. H YIQ
H màu này ñư c ng d ng trong truy n hình màu băng t n r ng t i M , do ñó nó
có m i quan h ch t ch v i màn hình raster. YIQ là s thay ñ i c a RGB cho kh
năng truy n phát và tính tương thích v i ti vi ñen tr ng th h trư c. Tín hi u truy n s
d ng trong h th ng NTSC (National Television System Committee).
Sau ñây là công th c bi n ñ i t h RGB thành h YIQ:
31. Chương II. Tô màu
27
−
−−=
B
G
R
Q
I
Y
*
311.0523.0212.0
321.0275.0596.0
114.0587.0299.0
Ma tr n ngh ch ñ o c a ma tr n bi n ñ i RGB thành h YIQ ñư c s d ng cho phép
bi n ñ i t h YIQ thành RGB.
2.1.4. H HSV (Hue, Saturation, Value)
Mô hình màu này còn ñư c g i là h HSB v i B là Brightness (ñ sáng) d a trên cơ
s n n t ng tr c giác v tông màu, s c ñ và s c thái m thu t (Hình 2.2).
Hue có giá tr t 00
→ 3600
S, V có giá tr t 0 → 1
Black
V
Cyan
0.0
Blue
1.0
Green
Red
H
White
S
Yellow
White
Hình 2.2. H màu HSV
Ví d :
Red ñư c bi u di n (00
, 1, 1)
Green ñư c bi u di n (1200
,1,1)
2.1.5. H HSL (Hue, Saturation, Lightness)
H này ñư c xác ñ nh b i t p h p hình chóp sáu c nh ñôi c a không gian hình tr
(hình 2.3).
H
S
1.0 L
0.0
0.5
White
Red
YellowGreen
Cyan
Blue
Black
White
Hình 2.3. H màu HSL
32. Chương II. Tô màu
28
2.2. CÁC THU T TOÁN TÔ MÀU
2.2.1. Bài toán
Cho ña giác S xác ñ nh b i n ñ nh : P1, P2,
..., Pn. Hãy tô màu mi n S.
* Phương pháp t ng quát :
- Tìm hình ch nh t W nh nh t ch a S
(hình 2.4).
- Duy t qua t t c các ñi m P(x, y) ∈ W.
N u P ∈ S thì tô màu ñi m P.
2.2.2. Thu t toán xác ñ nh P ∈∈∈∈ S
2.2.2.1. S là ña giác l i
- L y P ∈ W, n i P v i các ñ nh c a S thì ta ñư c n tam giác : Si= PPiPi+1, v i
Pn+1=P1.
- N u ∑=
n
1
i )dt(S
i
= dt(S) thì P ∈ S.
Ta có công th c tính di n tích c a S:
S= ∑=
++ −
n
i
iiii yxyx
1
11 |)(|
2
1
2.2.2.2. Trư ng h p t ng quát (Thu t toán Jordan)
L y P(x, y) ∈ W, k n a ñư ng th ng ∆P xu t phát t P và không ñi qua các ñ nh
c a ña giác S.
G i S(P) là s giao ñi m c a ∆P v i các biên c a S.
N u S(P) l thì P ∈ S.
* V n ñ còn l i là tìm S(P):
Bư c 1: K n a ñư ng th ng ∆P // 0y và hư ng v phía y>0.
Bư c 2: V i m i c nh Ci= PiPi+1 c a S:
+ N u x=xi thì xét 2 c nh có 1 ñ u là Pi:
N u y<yi thì
S
W
P2
P3
P4
P5
P1
Hình 2.4
33. Chương II. Tô màu
29
• N u c 2 ñ u kia cùng m t phía c a ∆P thì ta tính ∆P c t c 2 c nh.
• Ngư c l i : ∆P c t 1 c nh.
+ Ngư c l i:
• N u x>Max(xi,xi+1) ho c x<Min(xi,xi+1) thì ∆P không c t Ci
• Ngư c l i:
-N u y<= Min(yi, yi+1) thì ∆P c t Ci
-Ngư c l i :
Xét t a ñ giao ñi m (x0, y0) c a ∆P v i Ci
N u y >= y0 thì ∆P không c t Ci. Ngư c l i ∆P c t Ci.
Thu t toán này có th ñư c cài ñ t b ng ño n chương trình như sau:
Type ToaDo=record
x,y:integer;
End;
Mang=array[0..30] of ToaDo;
Function SOGIAODIEM(a:Mang; n:Byte):Integer;
var dem,i,j,s:Integer;
Begin
dem:=0;
for i:=1 to n do { Tim so giao diem }
begin
if i=n then j:=1 else j:=i+1;
if i=1 then s:=n else s:=i-1;
if x=a[i].x then
begin
if y<a[i].y then
if (x<=Min(a[s].x ,a[j].x))OR
(x>=Max(a[s].x,a[j].x)) then dem:=dem+2
else dem:=dem+1;
end
else
if (x>Min(a[i].x,a[j].x)) and
(x<Max(a[j].x,a[i].x)) then
if y<=Min(a[i].y,a[j].y) then dem:=dem+1
else if y <= (x-a[j].x)*(a[i].y-a[j].y)/
(a[i].x-a[j].x)+a[j].y then dem:=dem+1;
end;
SOGIAODIEM:=dem;
End;
34. Chương II. Tô màu
30
2.2.3. Thu t toán tô màu theo dòng quét (Scanline)
ð t x0 = Min(xi), i∈ [1,n].
Bư c 1: K Dy//0y ñi qua x0 (hình 2.5).
Bư c 2: Xác ñ nh các giao ñi m Mi-
(x,y) c a Dy v i các c nh Ci.
N u có c nh Ci = PiPi+1 song song và
trùng v i Dy thì xem như Dy c t Ci t i
2 ñi m Pi và Pi+1.
Bư c 3: S p x p l i các ñi m Mi theo
th t tăng d n ñ i v i yi (ñi m ñ u
tiên có th t là 1).
Bư c 4: Nh ng ñi m n m trên Dy gi a giao ñi m l và giao ñi m ch n liên ti p là
nh ng ñi m n m trong ña giác và nh ng ñi m này s ñư c tô.
Bư c 5: Tăng x0 lên m t Pixel. N u x0 ≤ Max(xi) thì quay l i bư c 1.
2.2.4. Thu t toán tô màu theo v t d u loang
L y P(x,y) ∈ S, tô màu P.
Xét các ñi m lân c n c a P (Hình 2.6).
N u các ñi m lân c n ñó v n còn thu c S và chưa
ñư c tô màu thì tô màu các ñi m lân c n ñó...
Thu t toán trên có th ñư c minh h a b ng th t c
ñ qui:
ProcedureTOLOANG(x,y:Integer; Color:Word);
Begin
If (P(x,y)∈S)and(P(x,y)chưa tô) Then
Begin
PutPixel(x,y,Color);
TOLOANG(x+1,y,Color);
TOLOANG(x-1,y,Color);
x0
xi
x
Dy
y
Hình 2.5
O
X
X
X
X
O
Hình 2.6
35. Chương II. Tô màu
31
TOLOANG(x,y+1,Color);
TOLOANG(x,y-1,Color);
End;
End;
BÀI T P
1. Vi t hàm DienTich(P:Array; n:Byte); ñ tính di n tích c a ña giác l i có n ñ nh
lưu trong m ng P.
2. Vi t hàm KiemTra(x,y:Integer; P:Array; n:Byte):Boolean; ñ ki m tra ñi m
(x,y) n m trong hay ngoài ña giác có n ñ nh ñư c lưu trong m ng P theo hai cách:
- Dùng công th c tính di n tích ña giác (ñ i v i ña giác l i).
- Dùng thu t toán Jordan (ñ i v i ña giác b t kỳ).
2. Vi t chương trình cài ñ t thu t toán tô màu m t ña giác theo thu t toán Scanline.
3. Vi t chương trình cài ñ t thu t toán tô màu m t ña giác theo v t d u loang theo hai
phương án:
a. ð qui.
b. Kh ñ qui.
4. Vi t th t c FillRec(x1,y1,x2,y2:Integer; color:Byte); ñ tô màu hình ch nh t xác
ñ nh b i 2 ñ nh (x1,y1) và (x2,y2).
5. Vi t th t c FillEllipse(x,y,Rx,Ry:Integer; color:Byte); ñ tô màu Ellipse có tâm
(x,y) và bán kính theo hai tr c là Rx và Ry.
6. Vi t th t c FillSector(x,y,Rx,Ry,g1,g2:Integer; color:Byte); ñ tô màu hình qu t
Ellipse có tâm (x,y), bán kính theo hai tr c là Rx và Ry, góc b t ñ u là g1 và góc k t
thúc là g2.
7. Vi t th t c Donut(x,y,Rmin,Rmax:Integer; color:Byte); ñ tô màu hình vành
khăn có tâm (x,y) và bán kính hai ñư ng tròn tương ng là Rmin và Rmax.
Bài t p l n: Xây d ng m t thư vi n ñ h a MYGRAPH tương t như thư vi n
GRAPH.TPU c a Turbo Pascal.
36. CHƯƠNG III
XÉN HÌNH
3.1. ð T V N ð
Cho m t mi n D ⊂ Rn
và F là m t hình trong Rn
(F ⊂ Rn
). Ta g i F ∩ D là hình có
ñư c t F b ng cách xén vào trong D và ký hi u là ClipD(F).
Bài toán ñ t ra là xác ñ nh ClipD(F).
3.2. XÉN ðO N TH NG VÀO VÙNG HÌNH CH NH T C A R2
3.2.1. C nh c a hình ch nh t song song v i các tr c t a ñ
Lúc này:
D =
≤≤
≤≤
∈
maxmin
maxmin
|),( 2
YyY
XxX
Ryx
và F là ño n th ng n i 2 ñi m (x1,y1), (x2,y2) nên phương trình c a F là:
x x x x t
y y y y t
= + −
= + −
1 2 1
1 2 1
( ).
( ).
t ∈ [0,1]
Do ñó, F có th ñư c vi t dư i d ng:
F = {(x,y) ∈ R2
| x = x1 + (x2 -x1).t; y = y1 + (y2 -y1).t; 0 ≤ t ≤ 1}
Khi ñó, giao ñi m c a F và D chính là
nghi m c a h b t phương trình (theo t):
Xmin x1+ (x2 - x1).t Xmax
Ymin 1+ (y2 - y1).t max
0 t 1
≤ ≤
≤ ≤
≤ ≤
y Y
G i N là t p nghi m c a h phương trình
trên.
N u N = ∅ thì ClipD(F) = ∅
N u N ≠ ∅ thì N = [t1, t2] (t1 ≤ t2)
G i P, Q là 2 giao ñi m xác ñ nh b i:
xMin xMax X
y
yMax
yMin
A
B
P
Q
Hình 3.1
37. Chương III. Xén hình
33
Px x x x t
Py y y y t
= + −
= + −
1 2 1 1
1 2 1 1
( ).
( ).
Qx x x x t
Qy y y y t
= + −
= + −
1 2 1 2
1 2 1 2
( ).
( ).
thì: ClipD(F) = PQ (Hình 3.1)
3.2.1.1. Thu t toán Cohen - Sutherland
• Chia m t ph ng ra làm 9 vùng, m i vùng ñánh m t mã nh phân 4 bit (hình 3.2).
Bit 1: Qui ñ nh vùng n m bên trái c a s
Bit 2: Qui ñ nh vùng n m bên ph i c a s
Bit 3: Qui ñ nh vùng n m bên dư i c a s
Bit 4: Qui ñ nh vùng n m bên trên c a s
• Xét ñi m P ∈ R2
:
Pleft =
<
laûiNgæåüc0
minPnãúu x X1
PRight =
>
laûiNgæåüc0
maxPnãúu x X1
PBelow =
<
laûiNgæåüc0
minPnãúu y Y1
PAbove =
>
laûiNgæåüc0
maxPnãúu y Y1
• Xét ño n th ng AB, ta có các trư ng h p sau:
i/ N u Mã(A) = Mã(B) = 0000 thì AB ∈ D ⇒ ClipD(F) = AB
ii/ N u Mã(A) AND Mã(B) ≠ 0000 thì ño n AB n m hoàn toàn bên ngoài hình
ch nh t ⇒ ClipD(F) = ∅∅∅∅
Chú ý: Phép toán AND là phép toán Logic gi a các bit.
iii/ N u (Mã(A) AND Mã(B) = 0000) và (Mã(A) ≠ 0000 ho c Mã(B) ≠ 0000) thì:
Gi s Mã(A) ≠ 0000 ⇔ A n m ngoài hình ch nh t.
♦ N u Aleft = 1 : thay A b i ñi m n m trên ño n AB và c t c nh trái (n i dài)
c a hình ch nh t.
100
0
000
0
101
0
001
0
011
0
010
0
010
1
000
1
100
1
Hình 3.2
38. Chương III. Xén hình
34
♦ N u Aright = 1: thay A b i ñi m n m trên ño n AB c t c nh ph i (n i dài) c a
hình ch nh t.
♦ N u ABelow = 1: thay A b i ñi m n m trên ño n AB và c t c nh dư i (n i
dài) c a hình ch nh t.
♦ N u AAbove = 1: thay A b i ñi m n m trên ño n AB và c t c nh trên (n i
dài) c a hình ch nh t.
Chú ý: Quá trình này ñư c l p l i: Sau m i l n l p, ta ph i tính l i mã c a A.
N u c n, ph i ñ i vai trò c a A và B ñ ñ m b o A luôn luôn n m bên ngoài hình ch
nh t. Quá trình s d ng khi x y ra m t trong 2 trư ng h p: i/ ho c ii/
3.2.1.2. Thu t toán chia nh phân
• Ý tư ng c a thu t toán này tương t như thu t toán tìm nghi m b ng phương pháp
chia nh phân.
• M nh ñ : Cho M: trung ñi m c a ño n AB, Mã(A) ≠ 0000, Mã(B) ≠ 0000, Mã(M)
≠ 0000 thì ta có:
[Mã(A) AND Mã(M)] ≠ 0000
ho c [Mã(M) AND Mã(B)] ≠ 0000.
Ý nghĩa hình h c c a m nh ñ : N u c ba ñi m A, B, M ñ u ngoài hình ch
nh t thì có ít nh t m t ño n hoàn toàn n m ngoài hình ch nh t.
• Ta phát th o thu t toán như sau:
i/ N u Mã(A) = 0000 và Mã(B) = 0000 thì ClipD(F) = AB
ii/ N u Mã(A) AND Mã(B) ≠ 0000 thì ClipD(F) = ∅∅∅∅
iii/ N u Mã(A) = 0000 và Mã(B) ≠ 0000 thì:
P:=A; Q:=B;
Trong khi |xP -xQ| + |yP - yQ| ≥ 2 thì:
♦ L y trung ñi m M c a PQ;
♦ N u Mã(M) ≠ 0000 thì Q:= M.
39. Chương III. Xén hình
35
Ngư c l i: P:= M.
⇒⇒⇒⇒ ClipD(F) = AP
iv/ N u Mã(A) ≠ 0000 và Mã(B) = 0000 thì: ð i vai trò c a A, B và áp d ng ii/
v/ N u Mã(A) ≠ 0000 ≠ Mã(B) và [Mã(A) AND Mã(B)]= 0000 thì:
P:=A; Q:=B;
L y M: trung ñi m PQ;
Trong khi Mã(M) ≠ 0000 và |xP - xQ| + |yP - yQ| ≥ 2 thì:
♦ N u Mã(M) AND Mã(Q) ≠ 0000 thì Q:=M. Ngư c l i P:=M.
♦ L y M: trung ñi m PQ.
N u Mã(M) ≠ 0000 thì ClipD(F) = ∅∅∅∅ . Ngư c l i, áp d ng ii/ ta có:
ClipD(MA) = MA1
ClipD(MB) = MB1
Suy ra: ClipD
(F) = A1
B1
3.2.1.3. Thu t toán Liang - Barsky
ð t ∆x = x2 - x1 ∆y = y2 - y1
p1 = - ∆x q1 = x1 - xMin
p2 = ∆x q2 = xMax - x1
p3 = - ∆y q3 = y1 - yMin
p4 = ∆y q4 = yMax - y1
thì h b t phương trình giao ñi m c a F và D có th vi t l i:
≤≤
=≤ 1..4k,Q.tP kk
10 t
Xét các trư ng h p sau:
i/ ∃k: Pk = 0 và Qk < 0: ( ðư ng th ng song song v i các biên và n m ngoài vùng
hình ch nh t )
40. Chương III. Xén hình
36
⇒ ClipD(F) = ∅∅∅∅
ii/ ∀k ∈ {1,2,3,4}: Pk ≠ 0 ho c Qk ≥ 0:
ð t K1 = {k | Pk > 0 }
K2 = {k | Pk < 0 }
u1 = Max({
k
k
P
Q
| k ∈ K2} ∪ {0})
u2 = Min({
k
k
P
Q
| k ∈ K1} ∪ {1})
N u u1 > u2 thì ClipD(F) = ∅∅∅∅
Ngư c l i: G i P, Q là 2 ñi m th a
∆+=
∆+=
1
1
1
1
uyyPy
uxxPx
.
.
và
∆+=
∆+=
2
2
1
1
uyyQy
uxxQx
.
.
thì ClipD(F) = PQ
3.2.2. Khi c nh c a vùng hình ch nh t t o v i tr c hoành m t góc αααα∈∈∈∈(0,ΠΠΠΠ/2)
Ta dùng phép quay tr c t a ñ ñ ñưa bài toán v trư ng h p các c nh c a hình
ch nh t song song v i các tr c t a ñ (hình 3.3).
G i R là ma tr n quay c a phép ñ i tr c, ta có:
X
Y
min
min
= R.
X
Y
min
min
X
Y
max
max
= R.
X
Y
max
max
v i R =
cos( ) sin( )
sin( ) cos( )
α α
α α−
α
xO
y
Hình 3.3
41. Chương III. Xén hình
37
3.3. XÉN ðO N TH NG VÀO HÌNH TRÒN
Gi s ta có ñư ng tròn tâm O(xc,yc) bán kính R và ño n th ng c n xén là AB v i
A(x1,y1), B(x2,y2) (Hình 3.4).
* Thu t toán:
• Tính d(O,AB)
• Xét các trư ng h p:
i/ N u d > R thì ClipD(F) = ∅∅∅∅
ii/ N u d = R thì ClipD(F) = A0 v i A0 là
chân ñư ng vuông góc h t O xu ng AB.
iii/ N u d < R thì xét các trư ng h p sau:
♦ (OA < R) AND (OB < R) thì ClipD(F) = AB
♦ N u m t ñi m n m trong và ñi m kia n m ngoài hình tròn, ch ng h n
OA<R và OB>R thì ClipD(F) = AI v i I là giao ñi m duy nh t gi a AB
và ñư ng tròn.
♦ (OA > R) AND (OB > R) thì ClipD(F) = IJ v i I, J là hai giao ñi m c a
AB v i ñư ng tròn.
Sau ñây là phương pháp tìm giao ñi m gi a ño n th ng và ñư ng tròn:
◊ Phương trình ñư ng tròn: (x - xc)2
+ (y - yc)2
= R2
(1)
◊ Phương trình ño n AB:
≤≤
−+=
−+=
10
).12(1
).12(1
λ
λ
λ
yyyy
xxxx
(2)
◊ Thay (2) vào (1) ta suy ra: λ =
b
bcaa −±− 2
Trong ñó:
a = ∆x.(x1 - xc) + ∆y.(y1 - yc)
b = (∆x)2
+ (∆y)2
c = (x1 - xc)2
+ (y1 - yc)2
- R2
A
B
Hình 3.4
42. Chương III. Xén hình
38
∆x = x2 - x1
∆y = y2 - y1
◊ D a vào ñi u ki n 0 ≤ λ ≤ 1 ñ ch n giao ñi m.
3.4. XÉN ðƯ NG TRÒN VÀO HÌNH CH NH T CÓ CÁC C NH SONG
SONG V I TR C T A ð
Lúc này:
D = {(x,y)| xMin ≤ x ≤ xMax ; yMin ≤ y ≤ yMax }
F = { (x,y)| (x - xC)2
+ (y - yC)2
= R2
}
*Trư c h t, ta ki m tra các trư ng h p ñ c bi t sau:
i/ N u xMin ≤ xC -R; xC +R ≤ xMax;
yMin ≤ yC -R; yC +R ≤ yMax;
thì ClipD(F) = F (Hình 3.5)
ii/ N u xC +R < xMin
ho c xC -R > xMax
ho c yC +R < yMin
ho c yC - R > yMax
thì ClipD(F) = ∅∅∅∅ (Hình 3.6)
*Xét trư ng h p còn l i: Tìm các giao ñi m c a F và D. S p x p các giao ñi m ñó
theo chi u ngư c kim ñ ng h .
• Các cung tròn ñư c t o b i 2 giao ñi m liên ti p s hoàn toàn n m trong D
ho c hoàn toàn n m bên ngoài D.
• ð xác ñ nh các cung này n m trong hay ngoài D, ta ch c n l y trung ñi m
M c a cung ñó. N u M ∈ D thì cung ñó n m trong D, ngư c l i thì nó n m
ngoài D.
Hình
3.5
Hình
3.6
43. Chương III. Xén hình
39
3.5. XÉN ðA GIÁC VÀO HÌNH CH NH T
Hình 3.7. Xén ña giác vào hình ch nh t
Thu t toán SutherLand - Hodgman
i/ N u t t c các ñ nh c a ña giác ñ u n m trong hình ch nh t thì hình c n xén
chính là ña giác và bài toán coi như ñã ñư c gi i quy t.
Hình 3.8. Các trư ng h p c n xét
ii/ Trư ng h p ngư c l i:
- Xu t phát t m t ñ nh n m ngoài hình ch nh t, ta ch y theo d c biên c a ña
giác. V i m i c nh c a ña giác, ta có các trư ng h p sau:
N u c hai ñ nh ñ u n m ngoài hình ch nh t thì:
N u Ma(Ai) and Ma(Ai+1) ≠ 0000 thì không lưu ñ nh
Ngư c l i thì lưu hai giao ñi m.
Ai ngoài, Ai+1 trong: lưu giao ñi m P và Ai+1.
C hai ñ nh ñ u n m trong hình ch nh t: lưu Ai và Ai+1.
Ai trong, Ai+1 ngoài: lưu Ai và giao ñi m P.
Ai
Ai+
Ai+
Ai
Ai
Ai+
Ai+
Ai
Ai
Ai+
44. Chương III. Xén hình
40
- Sau khi duy t qua t t c các c nh c a ña giác thì ta có ñư c m t dãy các ñ nh m i
phát sinh: B1, B2, ..., Bn
N u trong dãy các ñ nh m i này có hai ñ nh liên ti p không n m trên cùng m t
c nh c a hình ch nh t , gi s hai ñ nh ñó là Bi và Bi+1 thì ta ñi d c các c nh c a hình
ch nh t t Bi ñ n Bi+1 ñ tìm t t c các ñ nh c a hình ch nh t n m trong ña giác r i
b sung chúng vào gi a Bi và Bj.
T p ñ nh m i tìm ñư c chính là ña giác xén ñư c.
- N u t p ñ nh m i này là r ng: N u có m t ñ nh c a hình ch nh t n m trong ña
giác thì hình xén ñư c chính là toàn b hình ch nh t. Ngư c l i, hình xén ñư c là
r ng.
BÀI T P
1. Vi t hàm MA(P:ToaDo):Byte; ñ ñánh mã cho ñi m P.
2. Cài ñ t thu t toán xén m t ño n th ng vào m t hình ch nh t theo các thu t toán:
Liang-Barsky, Cohen-Sutherland, chia nh phân.
3. Cài ñ t thu t toán xén m t ño n th ng vào m t hình tròn.
4.Cài ñ t thu t toán xén m t ña giác vào m t vùng hình ch nh t.
45. CHƯƠNG IV
CÁC PHÉP BI N ð I
4.1. CÁC PHÉP BI N ð I TRONG M T PH NG
4.1.1. Cơ s toán h c
Phép bi n ñ i Affine 2D s bi n ñi m P(x,y) thành ñi m Q(x’,y’) theo h phương
trình sau:
x’ = Ax + Cy + trx
y’ = Bx + Dy + try
Dư i d ng ma tr n, h này có d ng:
(x’ y’) = (x y).
DC
BA
+ (trx try)
Hay vi t g n hơn: X’ = X.M + tr
v i X’=(x’,y’); X=(x,y); tr=(trx,try) - vector t nh ti n;
M =
DC
BA
- ma tr n bi n ñ i.
4.1.1.1. Phép ñ ng d ng
Ma tr n c a phép ñ ng d ng là:
M =
A
D
0
0
⇔
x Ax
y Dy
'
'
=
=
Cho phép ta phóng to hay thu nh hình theo m t hay hai chi u.
4.1.1.2. Phép ñ i x ng
ðây là trư ng h p ñ c bi t c a phép ñ ng d ng v i A và D ñ i nhau.
−
1 0
0 1
ñ i x ng qua Oy
46. Chương IV. Các phép bi n ñ i
.42
1
1
h
g
1 0
0 1−
ñ i x ng qua Ox
−
−
1 0
0 1
ñ i x ng qua g c t a ñ
4.1.1.3. Phép quay
Ma tr n t ng quát c a phép quay là R =
− )()(
)()(
αα
αα
CosSin
SinCos
Chú ý:
• Tâm c a phép quay ñư c xét ñây là g c t a ñ .
• ð nh th c c a ma tr n phép quay luôn luôn b ng 1.
4.1.1.4. Phép t nh ti n
Bi n ñ i (x,y) thành (x’,y’) theo công th c sau
x’ = x + M
y’ = y + N
ð thu n ti n bi u di n dư i d ng ma tr n, ta có th bi u di n các t a ñ dư i d ng
t a ñ thu n nh t (Homogen):
(x y 1).
1 0 0
0 1 0
1M N
= (x + M y + N 1)
4.1.1.5. Phép bi n d ng
Ma tr n t ng quát là: M =
Trong ñó:
g = 0: bi n d ng theo tr c x.
h = 0: bi n d ng theo tr c y.
4.1.1.6. H p c a các phép bi n ñ i
Có ma tr n bi n ñ i là tích c a các ma tr n c a các phép bi n ñ i.
47. Chương IV. Các phép bi n ñ i
.43
Ví d : Phép quay quanh m t ñi m b t kỳ trong m t ph ng có th th c hi n b i tích
c a các phép bi n ñ i sau:
° Phép t nh ti n tâm quay ñ n g c t a ñ .
° Phép quay v i góc ñã cho.
° Phép t nh ti n k t qu v tâm quay ban ñ u.
Như v y, ma tr n c a phép quay quanh m t ñi m b t kỳ ñư c th c hi n b i tích
c a ba phép bi n ñ i sau:
1 0 0
0 1 0
1− −
M N
.
Cos Sin
Sin Cos
( ) ( )
( ) ( )
α α
α α
0
0
0 0 1
−
.
1 0 0
0 1 0
1M N
4.2. Ví d minh h a
Vi t chương trình mô ph ng phép quay m t tam giác quanh g c t a ñ .
Uses crt,Graph;
Type ToaDo=Record
x,y:real;
End;
var k,Alpha,goc:real;
P,PP,PPP,P1,P2,P3:ToaDo;
x0,y0:word;
ch:char;
Procedure VeTruc;
Begin
Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);
Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);
End;
Procedure VeHinh(P1,P2,P3:ToaDo);
Begin
Line(x0+Round(P1.x*k),y0-Round(P1.y*k),
x0+Round(P2.x*k),y0- Round(P2.y*k));
Line(x0+Round(P2.x*k),y0-Round(P2.y*k),
48. Chương IV. Các phép bi n ñ i
.44
x0+Round(P3.x*k),y0- Round(P3.y*k));
Line(x0+Round(P3.x*k),y0-Round(P3.y*k),
x0+Round(P1.x*k),y0- Round(P1.y*k));
End;
Procedure QuayDiem(P:ToaDo;Alpha:real; var PMoi:ToaDo);
Begin
PMoi.x:=P.x*cos(Alpha)-P.y*sin(Alpha);
PMoi.y:=P.x*sin(Alpha)+P.y*cos(Alpha);
End;
Procedure QuayHinh(P1,P2,P3:ToaDo;Alpha:real;
var P1Moi,P2Moi,P3Moi:ToaDo);
Begin
QuayDiem(P1,Alpha,P1Moi);
QuayDiem(P2,Alpha,P2Moi);
QuayDiem(P3,Alpha,P3Moi);
End;
BEGIN
ThietLapDoHoa;
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
k:=GetMaxX/50;
Vetruc;
P.x:=5; P.y:=3; PP.x:=2; PP.y:=6; PPP.x:=6; PPP.y:=-4;
P1.x:=5; P1.y:=3; P2.x:=2; P2.y:=6; P3.x:=6; P3.y:=-4;
Alpha:=0; goc:=Pi/180;
SetWriteMode(XORPut);
VeHinh(P,PP,PPP);
Repeat
ch:=readkey;
if ord(ch)=0 then ch:=readkey;
case Upcase(ch) of
#75: Begin
49. Chương IV. Các phép bi n ñ i
.45
VeHinh(P1,P2,P3);
Alpha:=Alpha-goc;
QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
VeHinh(P1,P2,P3);
End;
#77: Begin
VeHinh(P1,P2,P3);
Alpha:=Alpha+goc;
QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
VeHinh(P1,P2,P3);
End;
End;
Until ch=#27;
CloseGraph;
END.
4.2. CÁC PHÉP BI N ð I TRONG KHÔNG GIAN
4.2.1. Các h tr c t a ñ
ð ñ nh v m t ñi m trong không gian, ta có th ch n nhi u h tr c t a ñ :
X
Y
Z
O
Y
Z
H tr c ti p H gián ti p
Hình 4.1
• H t a ñ tr c ti p : n u tay ph i c m tr c Z sao cho ngón cái hư ng theo
chi u dương c a tr c Z thì b n ngón còn l i s quay t tr c X sang tr c Y (Qui t c
bàn tay ph i).
50. Chương IV. Các phép bi n ñ i
.46
• H t a ñ gián ti p : ngư c l i (Qui t c bàn tay trái).
Thông thư ng, ta luôn luôn ñ nh v m t ñi m trong không gian qua h tr c ti p.
Trong h t a ñ tr c ti p, ta chia ra làm 2 lo i sau:
O
X
Y
Z
P(x,y,z)
X
O
Y
P(R,θ,φ)
Z
θ
φ
R
H t a ñ Descarter H c u
Hình 4.2
Ta có công th c chuy n ñ i t a ñ t h này sang h khác:
x = R.Cos(θθθθ).Cos(ΦΦΦΦ)
y = R.Sin(θθθθ).Cos(ΦΦΦΦ)
z = R.Sin(ΦΦΦΦ)
R2
= x2
+ y2
+ z2
ð thu n ti n cho vi c tính toán, t t c các ñi m trong không gian ñ u ñư c mô t
dư i d ng ma tr n 1x4, t c là (x,y,z,1). Vì v y, t t c các phép bi n ñ i trong không
gian ñ u ñư c bi u di n b i các ma tr n vuông 4x4 (Ma tr n Homogen).
4.2.2. Các công th c bi n ñ i
Phép bi n ñ i Affine 3D có d ng: X’=X.M + tr
v i X’=(x’,y’,z’); X=(x,y,z); M - ma tr n bi n ñ i; tr=(trx,try,trz) - vector
t nh ti n
4.2.2.1. Phép thay ñ i t l
M =
A
B
C
0 0 0
0 0 0
0 0 0
0 0 0 1
⇔
x A x
y B y
z C z
' .
' .
' .
=
=
=
51. Chương IV. Các phép bi n ñ i
.47
4.2.2.2. Phép ñ i x ng
Mz =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
−
ñ i x ng qua m t (XY)
My=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
−
ñ i x ng qua m t (XZ)
Mx =
−
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
ñ i x ng qua m t (YZ)
4.2.2.3. Phép t nh ti n
M =
1 0 0 0
0 1 0 0
0 0 1 0
1M N P
⇔
x x M
y y N
z z P
'
'
'
= +
= +
= +
4.2.2.4. Phép quay
Ta nh n th y r ng, n u phép quay quay quanh m t tr c nào ñó thì t a ñ c a v t
th t i tr c ñó s không thay ñ i. Do ñó, ta có ma tr n c a các phép quay như sau:
RZ =
−
1000
0100
00)()(
00)()(
θθ
θθ
CosSin
SinCos
RX =
−
1000
0)()(0
0)()(0
0001
θθ
θθ
CosSin
SinCos
52. Chương IV. Các phép bi n ñ i
.48
RY =
−
1000
0)(0)(
0010
0)(0)(
θθ
θθ
CosSin
SinCos
Chú ý:Tích c a 2 ma tr n nói chung không giao hoán nên k t qu c a 2 phép quay liên
ti p tùy thu c vào th t th c hi n tích s .
Ví d : RX.RY ≠ RY.RX
4.2.3. Ma tr n ngh ch ñ o
ð nh nghĩa: Hai ma tr n ñư c g i là ngh ch ñ o c a nhau n u tích s c a chúng là
ma tr n ñơn v .
Ma tr n ngh ch ñ o c a ma tr n M ký hi u là M-1
Ví d :
1 2 3
1 3 3
1 2 4
.
6 2 3
1 1 0
1 0 1
− −
−
−
=
1 0 0
0 1 0
0 0 1
Ngư i ta ch ng minh ñư c r ng: T t c các ma tr n c a các phép bi n ñ i ñã nêu
trên ñ u có ma tr n ngh ch ñ o.
• Ma tr n ngh ch ñ o c a phép t nh ti n có ñư c b ng cách thay M, N, P b ng -
M, -N, -P.
• Ma tr n ngh ch ñ o c a phép thay ñ i t l có ñư c b ng cách thay A, B, C b ng
1/A, 1/B, 1/C.
• Ma tr n ngh ch ñ o c a phép quay có ñư c b ng cách thay góc θθθθ b ng -θθθθ .
4.3. CÁC PHÉP CHI U C A V T TH TRONG KHÔNG GIAN LÊN M T PH NG
4.3.1. Phép chi u ph i c nh (Perspective)
Phép chi u này cho hình nh gi ng như khi nhìn v t th .
ð tìm hình chi u P’(y’,z’) c a P(x,y,z), ta n i P v i m t (tâm chi u). Giao ñi m
c a ñư ng này v i m t quan sát chính là P’ (hình 4.3).
Gi s P n m phía trư c m t, t c là P.x < E.
53. Chương IV. Các phép bi n ñ i
.49
Y
Z
X
(E,0,0)
Maét
y '
z '
P '
P(x,y,z)
Maët phaúng chieáu
Hình 4.3
Phương trình c a tia ñi qua m t và P là: r(t) = (E,0,0).(1-t) + (x,y,z).t (*)
Giao ñi m v i m t ph ng quan sát có thành ph n x’ = 0.
Do thành ph n x’ c a tia r là E.(1-t) + x.t = 0 nên t =
1
1− x E/
. Thay t vào (*) ta
tính ñư c:
y’ =
y
x E1− /
va z’ =
z
x E1− /
NH N XÉT
i/ Phép chi u ph i c nh không gi nguyên hình d ng c a v t th .
ii/ Ch có nh ng ñư ng th ng song song v i m t ph ng chi u thì m i song song
v i nhau.
iii/ Phép chi u ph i c nh ñư c qui ñ nh b i 5 bi n:
• Hư ng c a m t ph ng chi u so v i v t th .
• ð cao c a tâm chi u so v i v t th .
• Kho ng cách t tâm chi u ñ n v t th (R).
• Kho ng cách t m t ph ng chi u ñ n tâm chi u (D).
• ð d ch chuy n ngang c a tâm chi u so v i v t th .
Chú ý: V i t a ñ c u, ta ch c n 4 tham s : R, ΦΦΦΦ, θθθθ, D.
54. Chương IV. Các phép bi n ñ i
.50
4.3.2. Phép chi u song song (Parallel)
Phép chi u này có tâm chi u vô c c và y’=y, z’=z.(Hình 4.4)
Tính song song ñư c b o toàn.
Maët phaúng chieáu
Taâm chieáu (∝)
A
B
A'
B'
Hình 4.4
4.4. CÔNG TH C C A CÁC PHÉP CHI U LÊN MÀN HÌNH
Khi quan sát m t v t th trong không gian dư i m t góc ñ nào ñó, ta có 2 kh
năng ch n l a:
• ði m nhìn (màn hình) ñ ng yên và v t th di ñ ng.
• V t th ñ ng yên và ñi m nhìn s ñư c b trí thích h p.
Ta thư ng ch n gi i pháp th hai vì nó sát v i th c t hơn.
X
φ
O
θ
Z0
Y0
Z
Y
O'
X0
Maøn hình
YE XE
Hình 4.5
Khi quan sát m t v t th b t kỳ trong không gian, ta ph i tuân th các nguyên t c
sau (hình 4.5):
• V t th ph i ñư c chi u lên m t h tr c ti p (O,X,Y,Z).
55. Chương IV. Các phép bi n ñ i
.51
• Con m t ph i n m g c c a m t h gián ti p th hai (O’,X0,Y0,Z0)
• Màn hình là m t ph ng vuông góc v i ñư ng th ng OO’.
• Tr c Z0 c a h quan sát ch ñ n g c O.
N u dùng h t a ñ c u ñ ñ nh v m t c a ngư i quan sát thì ta d dàng thay ñ i
góc ng m b ng cách thay ñ i góc θθθθ và ΦΦΦΦ.
Bây gi , ta kh o sát phép bi n ñ i mà v t th (X,Y,Z) ph i ch u ñ cho nó trùng
v i h quan sát (X0,Y0,Z0) ñ cu i cùng t o ra h t a ñ màn hình (Xe,Ye).
Bư c 1: T nh ti n g c O thành O’ (hình 4.6).
X
θ
O
φ Y
Z
Z1
X1
Y1
O'
Hình 4.6
Ma tr n c a phép t nh ti n (L y ngh ch ñ o):
A=
1 0 0 0
0 1 0 0
0 0 1 0
1− − −
M N P
=
1 0 0 0
0 1 0 0
0 0 1 0
1− − −
R Cos Cos R Sin Cos R Sin. ( ). ( ) . ( ). ( ) . ( )θ φ θ φ φ
và h (X,Y,Z) bi n ñ i thành h (X1,Y1,Z1).
Bư c 2: Quay h (X1,Y1,Z1) m t góc -θθθθ‘ (θθθθ‘=900
- θθθθ) quanh tr c Z1 theo chi u kim
ñ ng h . Phép quay này làm cho tr c âm c a Y1 c t tr c Z (hình 4.7).
Ta g i Rz là ma tr n t ng quát c a phép quay quanh tr c Z. Vì ñây là phép quay h
tr c nên ph i dùng ma tr n ngh ch ñ o R-1
z.
56. Chương IV. Các phép bi n ñ i
.52
Rz =
Cos a Sin a
Sin a Cos a
( ) ( )
( ) ( )
0 0
0 0
0 0 1 0
0 0 0 1
−
R
-1
z =
Cos a Sin a
Sin a Cos a
( ) ( )
( ) ( )
−
0 0
0 0
0 0 1 0
0 0 0 1
ta thay góc a = -θθθθ‘ . Theo các phép toán lư ng giác:
Sin(-θθθθ') = -Sin(θθθθ') = -Sin(900
- θθθθ) = -Cos(θθθθ)
Cos(-θθθθ') = Cos(θθθθ') = Cos(900
-θθθθ) = Sin(θθθθ)
θ
X2
O'
φ
O
Y
Y2
Z2Z
X
θ'
Hình 4.7
Nên ma tr n c a phép quay tìm ñư c s có d ng:
B =
Sin Cos
Cos Sin
( ) ( )
( ) ( )
θ θ
θ θ
0 0
0 0
0 0 1 0
0 0 0 1
−
và h (X1,Y1,Z1) bi n ñ i thành h (X2,Y2,Z2).
Bư c 3: Quay h (X2,Y2,Z2) m t góc 900
+ ΦΦΦΦ quanh tr c X2. Phép bi n ñ i này s
làm cho tr c Z2 hư ng ñ n g c O (hình 4.8).
Ta có:
Rx =
−
1000
0)()(0
0)()(0
0001
aCosaSin
aSinaCos
57. Chương IV. Các phép bi n ñ i
.53
X3
Z3
θ
X
O
Z
O'
φ
θ'
Y
Y3
Hình 4.8
R-1
x =
1 0 0 0
0 0
0 0
0 0 0 1
Cos a Sin a
Sin a Cos a
( ) ( )
( ) ( )
−
Thay góc a = 900
+ ΦΦΦΦ , ta có: Cos(900
+ ΦΦΦΦ) = -Sin(ΦΦΦΦ) và Sin(900
+ ΦΦΦΦ) = Cos(ΦΦΦΦ)
nên ma tr n tìm ñư c s có d ng:
C =
1 0 0 0
0 0
0 0
0 0 0 1
− −
−
Sin Cos
Cos Sin
( ) ( )
( ) ( )
φ φ
φ φ
Lúc này, h (X2,Y2,Z2) bi n ñ i thành h (X3,Y2,Z3).
Bư c 4: Bi n ñ i h tr c ti p (X3,Y3,Z3) thành h gián ti p (hình 4.9).
Trong bư c này, ta ph i ñ i hư ng tr c X3 b ng cách ñ i d u các ph n t c a
c t X. Ta nh n ñư c ma tr n:
D =
−
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
và h (X3,Y3,Z3) bi n ñ i thành h (X0,Y0,Z0).
58. Chương IV. Các phép bi n ñ i
.54
O
X
θ
Z0 O'
φ
X0
θ'
Y0
Y
Z
Hình 4.9
TÓM L I
Các ñi m trong không gian s nh n trong h quan sát m t t a ñ có d ng:
(x0 ,y0 ,z0 ,1) = (x y z 1).A.B.C.D
G i T = A.B.C.D, ta tính ñư c:
T =
− − −
− −
−
sin( ) ( ). ( ) ( ). ( )
( ) ( ). ( ) ( ). ( )
( ) ( )
θ θ φ θ φ
θ θ φ θ φ
φ φ
Cos Sin Cos Cos
Cos Sin Sin Sin Cos
Cos Sin
R
0
0
0 0
0 0 1
Cu i cùng ta có:
(x0 ,y0 ,z0 ,1) = (x y z 1).T
hay:
x0 = -x.Sin(θθθθ) + y.Cos(θθθθ)
y0 = -x.Cos(θθθθ).Sin(ΦΦΦΦ) - y.Sin(θθθθ).Sin(ΦΦΦΦ) + z.Cos(ΦΦΦΦ)
z0 = -x.Cos(θθθθ).Cos(ΦΦΦΦ) - y.Sin(θθθθ).Cos(ΦΦΦΦ) - z.Sin(ΦΦΦΦ) + R
* Bây gi ta chi u nh c a h quan sát lên màn hình.
1. Phép chi u ph i c nh
Cho ñi m P(x,y,z) và hình chi u P’(x0,y0,z0) c a nó trên m t ph ng.
G i D là kho ng cánh t m t ph ng ñ n m t (g c t a ñ ). (Hình 4.10)
59. Chương IV. Các phép bi n ñ i
.55
O
X0
Z0
Y0
P(x0,y0,z0)
P'(xE,yE,zE)
Maøn hình
Z0
Y0
Maøn hình
O
O
P(x0,y0,z0)
P(x0,y0,z0)
D
yE
X0
xE
Hình 4.10
Xét các tam giác ñ ng d ng, ta có:
xE/D = x0/z0 và yE/D = y0/z0
⇒ xE
= D.x0
/z0
và yE
= D.y0
/z0
Chú ý: z0 bao hàm vi c phóng to hay thu nh v t th .
2. Phép chi u song song
T a ñ quan sát (x0,y0,z0) và t a ñ màn hình th a mãn công th c:
xE
= x0
và yE
= y0
60. Chương IV. Các phép bi n ñ i
.56
Maét
Maøn hìnhMaøn hình
Phoùng to Thu nhoû
Vaät theå
Hình 4.11
K T LU N
Có 4 giá tr nh hư ng ñ n phép chi u v t th 3D là: các góc θθθθ , ΦΦΦΦ , kho ng cách R
t O ñ n O’ và kho ng cách D t O’ ñ n m t ph ng quan sát.
C th :
• Tăng gi m θθθθ s quay v t th trong m t ph ng (XY).
• Tăng gi m ΦΦΦΦ s quay v t th lên xu ng.
• Tăng gi m R ñ quan sát v t t xa hay g n.
• Tăng gi m D ñ phóng to hay thu nh nh.
4.5. PH L C
T o UNIT DOHOA3D (DOHOA3D.PAS).
UNIT DOHOA3D;
INTERFACE
USES graph,crt;
{ Cac hang de quay hinh }
Const IncAng = 5; {Tang goc}
Type ToaDo3D=Record
x,y,z:real;
End;
ToaDo2D=Record
x,y:integer;
End;
61. Chương IV. Các phép bi n ñ i
.57
PhepChieu = (PhoiCanh,SongSong);
VAR R,d,theta,phi : real;
aux1,aux2,aux3,aux4 : real;
aux5,aux6,aux7,aux8 : real;
projection : PhepChieu;
xproj,yproj : real;
Obs,O : ToaDo3D;
PE,PC : ToaDo2D;
{ cac bien dung quay hinh }
ch : char;
PROCEDURE ThietLapDoHoa;
PROCEDURE KhoiTaoPhepChieu;
PROCEDURE Chieu(P :ToaDo3D);
PROCEDURE VeDen(P :ToaDo3D);
PROCEDURE DiDen(P :ToaDo3D);
PROCEDURE TrucToaDo;
PROCEDURE DieuKhienQuay; {dung de quay hinh}
IMPLEMENTATION
Procedure ThietLapDoHoa;
var gd,gm:integer;
Begin
Gd:=0;
InitGraph(gd,gm,'C:BPBGI');
End;
PROCEDURE KhoiTaoPhepChieu;
VAR th,ph :real;
BEGIN
th := pi*theta/180;
ph := pi*phi/180;
aux1 := sin(th);
aux2 := sin(ph);
aux3 := cos(th);
62. Chương IV. Các phép bi n ñ i
.58
aux4 := cos(ph);
aux5 := aux3*aux2;
aux6 := aux1*aux2;
aux7 := aux3*aux4;
aux8 := aux1*aux4;
PC.x := getmaxx div 2;
PC.y := getmaxy div 2;
END;
PROCEDURE Chieu(P :ToaDo3D);
BEGIN
Obs.x := -P.x*aux1 + P.y*aux3 ;
Obs.y := -P.x*aux5 - P.y*aux6 + P.z*aux4 ;
IF projection = PhoiCanh THEN
BEGIN
obs.z:=-P.x*aux7 -P.y*aux8 -P.z*aux2 + R;
Xproj := d*obs.x/obs.z;
Yproj := d*obs.y/obs.z;
END
ELSE BEGIN
Xproj := d*obs.x;
Yproj := d*obs.y;
END;
END;
PROCEDURE VeDen(P :ToaDo3D);
BEGIN
Chieu(P);
PE.x := PC.x + round(xproj);
PE.y := PC.y - round(yproj);
lineto (PE.x,PE.y);
END;
PROCEDURE Diden(P :ToaDo3D);
BEGIN
63. Chương IV. Các phép bi n ñ i
.59
Chieu(P);
PE.x := PC.x + round(xproj);
PE.y := PC.y - round(yproj);
moveto (PE.x,PE.y);
END;
PROCEDURE TrucToaDo; { Ve 3 truc }
var OO,XX,YY,ZZ:ToaDo3D;
Begin
OO.x:=0; OO.y:=0; OO.z:=0;
XX.x:=3; XX.y:=0; XX.z:=0;
YY.x:=0; YY.y:=3; YY.z:=0;
ZZ.x:=0; ZZ.y:=0; ZZ.z:=3;
DiDen(OO); VeDen(XX);
DiDen(OO); VeDen(YY);
DiDen(OO); VeDen(ZZ);
END;
PROCEDURE DieuKhienQuay; {Dieu khien Quay/Zoom hinh}
BEGIN
ch := readkey;
IF ch = #0 THEN ch := readkey;
cleardevice;
CASE UpCase(ch) OF
#72 : phi := phi + incang;
#80 : phi := phi - incang;
#75 : theta := theta + incang;
#77 : theta := theta - incang;
END; {of case ch}
END; {of Procedure}
END. {Of UNIT}
4.6. VÍ D MINH H A
Vi t chương trình mô t phép quay c a m t hình l p phương quanh các tr c (hình
4.12).
64. Chương IV. Các phép bi n ñ i
.60
Y
Z
X
P1
P8
P6 P7
P3
P2
P4
P5
Hình 4.12
Uses crt,graph,Dohoa3D;
var P1,P2,P3,P4,P5,P6,P7,P8:ToaDo3D;
Procedure KhoiTaoBien;
Begin
D:=70; R:=5;
Theta:=40; Phi:=20;
P1.x:=0; P1.y:=0; P1.z:=0;
P2.x:=0; P2.y:=1; P2.z:=0;
P3.x:=1; P3.y:=1; P3.z:=0;
P4.x:=1; P4.y:=0; P4.z:=0;
P5.x:=1; P5.y:=0; P5.z:=1;
P6.x:=0; P6.y:=0; P6.z:=1;
P7.x:=0; P7.y:=1; P7.z:=1;
P8.x:=1; P8.y:=1; P8.z:=1;
End;
Procedure VeLapPhuong;
begin
Diden(P1); VeDen(P2);
VeDen(P3); VeDen(P4);
VeDen(P1); VeDen(P6);
Veden(P7); VeDen(P8);
VeDen(P5); VeDen(P6);
DiDen(P3); VeDen(P8);
65. Chương IV. Các phép bi n ñ i
.61
DiDen(P2); VeDen(P7);
DiDen(P4); VeDen(P5);
end;
Procedure MinhHoa;
BEGIN
KhoiTaoBien;
KhoiTaoPhepChieu;
TrucToaDo;
VeLapPhuong;
Repeat
DieuKhienQuay;
KhoiTaoPhepChieu;
ClearDevice;
TrucToado;
VeLapPhuong;
until ch=#27;
END;
BEGIN { Chuong Trinh Chinh }
Projection:=SongSong{Phoicanh};
ThietLapDoHoa;
MinhHoa;
CloseGraph;
END.
BÀI T P
1. Cho 3 tam giác sau:
ABC v i A(1,1) B(3,1) C(1,4)
EFG v i E(4,1) F(6,1) G(4,4)
MNP v i M(10,1) N(10,3) P(7,1)
a. Tìm ma tr n bi n ñ i tam giác ABC thành tam giác EFG.
b. Tìm ma tr n bi n ñ i tam giác ABC thành tam giác MNP.
2. Cài ñ t thu t toán xén m t ño n th ng vào m t hình ch nh t có c nh không song
song v i tr c t a ñ .
66. Chương IV. Các phép bi n ñ i
.62
3. Vi t chương trình v m t Ellipse có các tr c không song song v i h tr c t a ñ .
4. D a vào bài t p 2, hãy mô ph ng quá trình quay c a m t Ellipse xung quanh tâm
c a nó.
5. Vi t chương trình mô ph ng quá trình quay, ñ i x ng, t nh ti n, phóng to, thu nh ,
bi n d ng c a m t hình b t kỳ trong m t ph ng.
6. Mô ph ng chuy n ñ ng c a trái ñ t xung quanh m t tr i ñ ng th i mô t chuy n
ñ ng c a m t trăng xung quanh trái ñ t.
M r ng trong không gian 3 chi u.
7. Vi t chương trình v ñ ng h ñang ho t ñ ng.
8. Vi t chương trình v các kh i ña di n ñ u trong không gian.
M r ng: ñi u khi n phóng to, thu nh , quay các kh i ña di n quanh các tr c...
67. CHƯƠNG V
BI U DI N CÁC ð I TƯ NG BA CHI U
5.1. MÔ HÌNH WIREFRAME
Mô hình WireFrame th hi n hình dáng c a ñ i tư ng 3D b ng 2 danh sách :
• Danh sách các ñ nh : lưu t a ñ c a các ñ nh.
• Danh sách các c nh : lưu các c p ñi m ñ u và cu i c a t ng c nh.
Các d nh và các c nh ñư c ñánh s th t cho thích h p.
Ví d : Bi u di n 1 căn nhà thô sơ (hình 5.1)
Danh sách các ñ nh
Vector x y z
1 0 0 0
2 0 1 0
3 0 1 1
4 0 0.5 1.5
5 0 0 1
6 1 0 0
7 1 1 0
8 1 1 1
9 1 0.5 1.5
10 1 0 1
Có nhi u cách ñ lưu gi mô hình
WireFrame. ñây, chúng ta dùng c u trúc record d a trên 2 m ng:
Const MaxDinh = 50; { S ñ nh t i ña}
MaxCanh = 100; {S c nh t i ña}
Type ToaDo3D = record
x, y, z:real;
end;
WireFrame = Record
X
Z
P2
P3
P6
P7
P1
P10
P5
P8
Y
P4
P9
Hình 5.1
68. Chương V. Bi u di n các ñ i tư ng ba chi u
64
Sodinh: 0..MaxDinh;
Dinh: array [1..MaxDinh] of ToaDo3D;
Socanh : 0..Maxcanh;
Canh :array[1..Maxcanh, 1..2] of 1..MaxDinh;
end;
Khi ñó, ta dùng m t bi n ñ mô t căn nhà :
Var House : WireFrame;
v i bi n house trên, ta có th gán giá tr như
sau:
With House Do
Begin
sodinh:=10;
socanh:=17;
dinh[1].x:=0;
dinh[1].y:=0;
dinh[1].z:=0;
...
canh[1, 1]:=1; {S ñ nh th nh t c a
c nh s 1}
canh[1, 2]:=2; {S ñ nh th hai c a
c nh s 1}
...
end;
5.2. V MÔ HÌNH WIREFRAME V I CÁC
PHÉP CHI U
ð v m t ñ i tư ng WireFrame, ta v t ng
c nh trong danh sách các c nh c a mô hình. V n ñ là làm th nào ñ v 1 ñư ng
th ng trong không gian 3 chi u vào m t ph ng?
ð làm ñi u này, ta ph i b b t ñi 1 chi u trong mô hình bi u di n, t c là ta ph i
dùng phép chi u t 3D → 2D .
Danh sách các c nh
C nh ð nh ñ u ð nh cu i
1 1 2
2 2 3
3 3 4
4 4 5
5 5 1
6 6 7
7 7 8
8 8 9
9 9 10
10 10 6
11 1 6
12 2 7
13 3 8
14 4 9
15 5 10
16 2 5
17 1 3
69. Chương V. Bi u di n các ñ i tư ng ba chi u
65
K thu t chung ñ v m t ñư ng th ng 3D là:
Chi u 2 ñi m ñ u mút thành các ñi m 2D.
V ñư ng th ng ñi qua 2 ñi m v a ñư c chi u.
Sau ñây là th t c xác ñ nh hình chi u c a m t ñi m qua phép chi u ph i c nh:
Procedure Chieu(P3D:ToaDo3D; E:Real; Var P2D:ToaDo2D);
Var t:Real;
Begin
If (P3D.x >=E) OR (E=0) Then
Writeln(‘ði m n m sau m t ho c m t n m trên m t ph ng
nhìn’);
Esle
Begin
t := 1/(1 - P3D.x/E);
P2D.y := t*P3D.y;
P2D.z := t*P3D.z;
End;
End;
5.3. V CÁC M T TOÁN H C
Ta s v các m t cong d a trên phương trình tham s c a các m t ñó.
Ví d :
(a) (b) (c)
Hình 5.2
• M t Ellipsoid: (hình 5.2.a)
x=Rx.cos(u).cos(v)
y=Ry.sin(u).cos(v)
70. Chương V. Bi u di n các ñ i tư ng ba chi u
66
z=Rz.sin(v)
Trong ñó: 0≤ u ≤ 2π -π/2 ≤ v ≤ π/2
• M t Hypeboloid: (hình 5.2.b)
x=u
y=v
z=u2
- v2
Trong ñó u,v ∈[-1,1]
• Hình xuy n: (hình 5.2.c)
x=(R + a.cos(v)).cos(u)
y=(R + a.cos(v)).sin(u)
z= a.sin(v)
Trong ñó: 0≤ u ≤ 2π -π/2 ≤ v ≤ π/2
• Hình tr tròn (Cylinder)
x = R.cos(u)
y = R.sin(u)
z = h
• Hình nón (Cone)
p(u,v) = (1-v).P0 + v.P1(u)
trong ñó:
P0: ñ nh nón
P1(u): ñư ng tròn
=
=
)sin(.
)cos(.
uRy
uRx
u,v ∈ [0,1]
• Ch o Parabol (Paraboloid)
x = a.v.cos(u)
y = b.v.sin(u) u∈[-π,π], v ≥ 0
z = v2
Phương pháp chính ñây cũng là v các ñư ng vi n theo u và v.
71. Chương V. Bi u di n các ñ i tư ng ba chi u
67
ð v m t ñư ng vi n u t i giá tr u’ khi v ch y t VMin ñ n VMax ta làm như
sau:
• T o m t t p h p các giá tr v[i] ∈ [VMin ,VMax], xác ñ nh v trí P[i] =
(X(u’,v[i]), Y(u’,v[i]), Z(u’,v[i])).
• Chi u t ng ñi m P[i] lên m t ph ng.
• V các ñư ng g p khúc d a trên các ñi m 2D P’[i].
Sau ñây là th t c v h ñư ng cong theo u:
ProcedureHoDuongCongU;
Var P: ToaDo3D;
u,v,du,dv:Real;
Begin
u:=UMin; du:=0.05; dv:=0.05;
While u<=UMax do
Begin
v:=Vmin;
P.x:=fx(u,v);
P.y:=fy(u,v);
P.z:=fz(u,v);
DiDen(P);{ ði ñ n ñi m xu t phát ban ñ u }
While v<=VMax do
Begin
v:=v+dv;
P.x:=fx(u,v);
P.y:=fy(u,v);
P.z:=fz(u,v);
VeDen(P);{ V ñ n ñi m m i }
End;
u:=u + du;
End;
End;
Tương t , ta có th v h ñư ng cong theo v.
72. Chương V. Bi u di n các ñ i tư ng ba chi u
68
TÓM L I: Mu n v m t m t cong, ta th c hi n các bư c sau
• Nh p các h s c a phương trình m t: a, b, c, d, Umin, Umax, Vmin, Vmax.
• Tính các hàm 2 bi n: X(u,v), Y(u,v), Z(u,v).
• Kh i t o phép chi u: Song song/Ph i c nh.
• V h ñư ng cong u.
V h ñư ng cong v.
BÀI T P
1. Hãy xây d ng m t c u trúc d li u ñ lưu tr mô hình WireFrame.
2. T o file text ñ lưu các ñ nh và c nh c a m t v t th trong không gian 3D theo mô
hình WireFrame v i c u trúc như sau:
Dòng ñ u tiên ch a hai s nguyên m, n dùng ñ lưu s ñ nh và s c nh c a mô
hình.
m dòng ti p theo, m i dòng lưu t a ñ x, y, z c a t ng ñ nh trong mô hình.
n dòng ti p theo, m i dòng lưu hai s nguyên là ñ nh ñ u và ñ nh cu i c a t ng
c nh trong mô hình.
3. Vi t th t c ñ ñ c các giá tr trong file text lưu vào mô hình WireFrame.
4. Vi t th t c ñ v v t th t mô hình WireFrame.
5. Vi t chương trình bi u di n các kh i ña di n sau: T di n ñ u, Kh i l p phương,
Bát di n ñ u, Th p nh di n ñ u, Nh th p di n ñ u.
6. Vi t chương trình ñ mô ph ng các m t toán h c: yên ng a, m t c u, hình xuy n...
73. CHƯƠNG VI
THI T K ðƯ NG VÀ M T CONG
BEZIER VÀ B-SPLINE
Khác v i nh ng phương pháp bi u di n m t và ñư ng b i các công th c toán h c
tư ng minh, ñây ta s bàn ñ n các công c cho phép ch ra các d ng ñư ng và m t
khác nhau d a trên các d li u.
ði u này có nghĩa là v i m t ñư ng cong cho trư c mà ta chưa xác ñ nh ñư c công
th c toán h c c a nó thì làm th nào ñ có th n m b t ñư c d ng c a ñư ng cong ñó
m t cách tương ñ i chính xác qua vi c s d ng m t t p nh các ñi m P0 , P1 ,... cùng
v i m t phương pháp n i suy nào ñó t t p ñi m này ñ t o ra ñư ng cong mong
mu n v i m t ñ chính xác cho phép.
Có nhi u cách ñ n m b t ñư c ñư ng cong cho trư c, ch ng h n:
• L y m t m u ñư ng cong ch ng vài ch c ñi m cách nhau tương ñ i ng n r i
tìm m t hàm toán h c và ch nh hàm này sao cho nó ñi qua các ñi m này và
kh p v i ñư ng cong ban ñ u. Khi ñó, ta có ñư c công th c c a ñư ng và dùng
nó ñ v l i ñư ng cong.
• Cách khác là dùng m t t p các ñi m ki m soát và dùng m t thu t toán ñ xây
d ng nên m t ñư ng cong c a riêng nó d a trên các ñi m này. Có th ñư ng
cong ban ñ u và ñư ng cong t o ra không kh p nhau l m, khi ñó ta có th di
chuy n m t vài ñi m ki m soát và lúc này thu t toán l i phát sinh m t ñư ng
cong m i d a trên t p ñi m ki m soát m i. Ti n trình này l p l i cho ñ n khi
ñư ng cong t o ra kh p v i ñư ng cong ban ñ u.
ñây, ta s ti p c n v n ñ theo phương pháp th hai, dùng ñ n các ñư ng cong
Bezier và B-Spline ñ t o các ñư ng và m t.
Gi s m t ñi m trong không gian ñư c bi u di n dư i d ng vector tham s p(t).
V i các ñư ng cong 2D, p(t) = (x(t), y(t)) và các ñư ng 3D, p(t) = (x(t), y(t), z(t)).
6.1. ðƯ NG CONG BEZIER VÀ M T BEZIER
6.1.1. Thu t toán Casteljau
74. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
70
ð xây d ng ñư ng cong p(t), ta d a trên m t dãy các ñi m cho trư c r i t o ra giá
tr p(t) ng v i m i giá tr t nào ñó. Vi c thay ñ i các ñi m này s làm thay ñ i d ng
c a ñư ng cong. Phương pháp này t o ra ñư ng cong d a trên m t dãy các bư c n i
suy tuy n tính hay n i suy kho ng gi a (In-Betweening).
Ví d : V i 3 ñi m P0 , P1 , P2 ta có th xây d ng m t Parabol n i suy t 3 ñi m này
b ng cách ch n m t giá tr t ∈ [0, 1] nào ñó r i chia ño n P0P1 theo t l t, ta ñư c
ñi m P0
1
trên P0P1 . Tương t , ta chia ti p P1P2 cũng theo t l t, ta ñư c P1
1
. N i P0
1
và P1
1
, l i l y ñi m trên P0
1
P1
1
chia theo t l t, ta ñư c P0
2
.
V i cách làm này, ta s l y nh ng giá tr t khác ∈ [0, 1] thì s ñư c t p ñi m P0
2
.
ðó chính là ñư ng cong p(t).
Ta bi u di n b ng phương trình:
P0
1
(t) = (1-t).P0 + t.P1 (1)
P1
1
(t) = (1-t).P1 + t.P2 (2)
P0
2
(t) = (1-t).P0
1
+ t.P1
1
(3)
Thay (1), (2) vào (3) ta ñư c:
P(t) = P0
2
(t) = (1-t)2
.P0 + 2t.(1-t).P1 + t2
.P2
ðây là m t ñư ng cong b c 2 theo t nên nó là m t Parabol.
T ng quát hóa ta có thu t toán Casteljau cho (L+1) ñi m:
Gi s ta có t p ñi m: P0, P1, P2, ..., PL
V i m i giá tr t cho trư c, ta t o ra ñi m Pi
r
(t) th h th r, t th h th (r - 1)
trư c ñó, ta có:
Pi
r
(t) = (1-t).Pi
r-1
(t) + t.Pi+1
r-1
(t) (3’)
r = 0,1,...,L và i = 0,...,L-r
Th h cu i cùng P0
L
(t) ñư c g i là ñư ng cong Bezier c a các ñi m P0,P1 ,P2,...,PL
Các ñi m Pi , i=0,1,...,L ñư c g i là các ñi m ki m soát hay các ñi m Bezier.
ða giác t o b i các ñi m ki m soát này g i là ña giác ki m soát hay ña giác Bezier.
6.1.2. D ng Bernstein c a các ñư ng cong Bezier
ðư ng cong Bezier d a trên (L+1) ñi m ki m soát P0 ,P1 , ...,PL ñư c cho b i công
th c:
P(t) =
k
L
=
∑
0
Pk.Bk
L
(t)
75. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
71
Trong ñó, P(t) là m t ñi m trong m t ph ng ho c trong không gian.
Bk
L
(t) ñư c g i là ña th c Bernstein, ñư c cho b i công th c:
Bk
L
(t) =
L
k L k
!
!( )!−
(1-t)L-k
.tk
v i L ≥ k
M i ña th c Bernstein có b c là L. Thông thư ng ta còn g i các Bk
L
(t) là các hàm
tr n (blending function).
Tương t , ñ i v i m t Bezier ta có phương trình sau:
P(u,v) =
i
M
=
∑
0 i
L
=
∑
0
Pi,k.Bi
M
(u).Bk
L
(v)
Trong trư ng h p này, kh i ña di n ki m soát s có (M+1).(L+1) ñ nh.
ðư ng cong Bezier b c 2 ðư ng cong Bezier b c 3
Hình 6.1
6.1.3. D ng bi u di n ma tr n c a ñư ng Bezier
ð thích h p cho vi c x lý trên máy tính, ta bi u di n hai m ng BL(t) và P như
sau:
BL
(t) = (B0
L
(t), B1
L
(t), ..., BL
L
(t))
P = (P0 ,P1 , ...,PL )
Do ñó: P(t) = BL
(t).P (tích vô hư ng)
hay P(t) = BL
(t).PT
(PT
là d ng chuy n v c a P)
Dư i d ng ña th c, có th bi u di n Bk
L
(t) như sau:
Bk
L
(t) = a0 + a1.t + a2.t2
+ ... + aL.tL
= (t0
,t1
,...,tL
).(a0 ,a1 ,...,aL)
Do ñó P(t) có th bi u di n l i như sau:
P(t) = PowL
(t).BezL
.PT
V i:
• PowL
(t) = (t0
,t1
,...,tL
)
P1
1
P1
P0
1
P1
P0
2
P2
76. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
72
• BezL
là ma tr n bi u di n m ng BL
(t) trong ñó m i hàng i c a ma tr n ng v i
các h s tương ng (a0 ,a1 ,...,aL) c a ña th c Bi
L
(t) và t i v trí (i,j) trong ma tr n BezL
có giá tr BezL
(i,j) = (-1)j-i
.Cn
i
.Ci
j
Ví d : Ma tr n Bez3
cho các ñư ng Bezier b c 3
Bez3
=
1 0 0 0
3 3 0 0
3 6 3 0
1 3 3 1
−
−
− −
6.1.4. T o và v các ñư ng Bezier
ð t o ra m t ñư ng cong Bezier t m t dãy các ñi m ki m soát ta s áp d ng
phương pháp l y m u hàm p(t) các giá tr cách ñ u nhau c a tham s t, ví d có th
l y ti = i/N, i=0,1,...,N. Khi ñó ta s ñư c các ñi m P(ti) t công th c Bezier.
N i các ñi m này b ng các ño n th ng ta s ñư c ñư ng cong Bezier g n ñúng. ð
tính P(ti) ta có th áp d ng ma tr n c a P(t) trên trong ñó ch có thành ph n PowL
(ti)
là thay ñ i, còn tích BezL
.PT
v i P = (P0 ,P1 , ...,PL ) là không thay ñ i.
Sau ñây là th t c minh h a vi c v ñư ng cong Bezier trong m t ph ng:
Type Mang = array[0..50] of PointType;
function tich(x,y:word):real;
var s:real;i:word;
begin
if y<=1 then tich:=1
else begin
s:=1;
for i:=x to y do s:=s*i;
tich:=s;
end;
end;
function CLK(l,k:word):real;
begin
CLk:=tich(k+1,l)/tich(1,l-k);
end;
function Xmu(x:real;mu:word):real;
77. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
73
var i:word;s:real;
begin
if mu=0 then s:=1
else begin
s:=1;
for i:=1 to mu do s:=s*x;
end;
Xmu:=s;
end;
function BKL(t:real;l,k:word):real;
begin
BKL:=CLK(l,k)*xmu(1-t,l-k)*xmu(t,k);
end;
procedure Pt(t:real;L:word;A:Mang;var diem:PointType);
var k:word;s,x,y:real;
begin
x:=0; y:=0;
for k:=0 to L do
begin
s:=BKL(t,l,k);
x:=x+A[k].x*s;
y:=y+A[k].y*s;
end;
diem.x:=round(x);
diem.y:=round(y);
end;
procedure Vebezier(A:Mang;L:integer);
var i,SoDiem:word; Diem:PointType;
dx,x:real;
begin
sodiem:=100;
dx:=1/sodiem;
78. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
74
x:=0;
if L>0 then
begin
for i:=1 to sodiem+1 do
begin
Pt(x,L,A,Diem);
if i=1 then moveto(round(diem.x),round(diem.y))
else lineto(round(diem.x),round(diem.y));
x:=x+dx;
end;
end
end;
6.1.5. Các tính ch t c a ñư ng cong Bezier
i/ N i suy ñư c các ñi m ñ u và cu i.
Ch ng minh:
Ta có: P(t) =
k
L
=
∑
0
Pk.Bk
L
(t)
Do ñó P(0) =
k
L
=
∑
0
Pk.Bk
L
(0)
trong ñó: Bk
L
(0) =
L
k L k
!
!( )!−
(1-0)L-k
.0k
∀k ≠ 0 và k ≠ L
=
L
k L k
!
!( )!−
.0 = 0
Vì v y, P(0) = P0.B0
L
(0) + PL.BL
L
(0)
= P0 + 0 = P0
Lý lu n tương t cho P(1). Ta có P(1) = PL.
ii/ Tính b t bi n Affine:
Khi bi n ñ i m t ñư ng cong Bezier, ta không c n bi n ñ i m i ñi m trên ñư ng
cong m t cách riêng r mà ch c n bi n ñ i các ñi m ki m soát c a ñư ng cong ñó r i
s d ng công th c Bernstein ñ tái t o l i ñư ng cong Bezier ñã ñư c bi n ñ i.
Ch ng minh:
Gi s ñi m P(t) bi n ñ i Affine thành P’(t)
79. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
75
P’(t) = P(t).N + tr =
k
L
=
∑
0
Pk.Bk
L
(t).N + tr
Trong ñó:
N: ma tr n bi n ñ i.
tr: vector t nh ti n.
Xét ñư ng cong
k
L
=
∑
0
(Pk.N + tr).Bk
L
(t) (*)
ñư c t o ra b ng cách bi n ñ i Affine các vector Pk. Ta s ch ng minh ñư ng cong
này chính là P’(t).
Khai tri n (*) ta có:
k
L
=
∑
0
Pk.N.Bk
L
(t) +
k
L
=
∑
0
tr.Bk
L
(t)
=
k
L
=
∑
0
Pk.N.Bk
L
(t) + tr.
k
L
=
∑
0
Bk
L
(t) (**)
Nhưng theo ña th c Bernstein thì
k
L
=
∑
0
Bk
L
(t) = (1-t+t)L
= 1 nên s h ng th hai c a
(**) s là tr.
Vì v y, P’(t) n m trên ñư ng cong Bezier t o ra b i các ñi m ki m soát Pk.
iii/ Tính ch t c a bao l i: ñư ng cong Bezier P(t) không bao gi ñi ra ngoài bao l i
c a nó.
ñây, bao l i c a các ñi m ki m soát là t p ñ nh nh nh t ch a t t c các ñi m
ki m soát ñó.
Ch ng minh:
Bao l i c a các ñi m ki m soát cũng chính là t p h p các t h p l i c a các
ñi m ki m soát.
Ta bi u di n t h p tuy n tính c a các ñi m Pk:
P(t) =
k
L
=
∑
0
ak.Pk , ak ≥ 0
Do P(t) là t h p l i c a các ñi m ki m soát ∀t ∈ [0,1] và
k
L
=
∑
0
Bk
L
(t) = 1
Nên ñư ng cong Bezier s n m trong bao l i c a các ñi m ki m soát.
iv/ ð chính xác tuy n tính:
ðư ng cong Bezier có th tr thành m t ñư ng th ng khi t t c các ñi m ki m
soát n m trên m t ñư ng th ng vì khi ñó bao l i c a chúng là m t ñư ng th ng
80. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
76
nên ñư ng Bezier b k p vào bên trong bao l i nên nó cũng tr thành ñư ng
th ng.
v/ B t kỳ m t ñư ng th ng hay m t ph ng nào cũng luôn luôn c t ñư ng cong
Bezier ít l n hơn so v i c t ña giác ki m soát.
vi/ ð o hàm c a các ñư ng Bezier:
Ta có: (P(t))’ = L.
k
L
=
−
∑
0
1
∆Pk.Bk
L-1
(t) , ∆Pk = Pk+1 - Pk
Do ñó, ñ o hàm c a ñư ng cong Bezier là m t ñư ng cong Bezier khác ñư c
t o ra t các vector ki m soát ∆Pk ( Ta ch c n l y các ñi m ki m soát g c theo
t ng c p ñ t o ra các ñi m ki m soát cho (P(t))’.
6.1.6. ðánh giá các ñư ng cong Bezier
B ng các ñi m ki m soát, ta có th t o ra các d ng ñư ng cong khác nhau b ng
cách hi u ch nh các ñi m ki m soát cho t i khi t o ra ñư c m t d ng ñư ng cong
mong mu n. Công vi c này l p ñi l p l i cho ñ n khi toàn b ñư ng cong th a yêu
c u.
Tuy nhiên, khi ta thay ñ i b t kỳ m t ñi m ki m soát nào thì toàn b ñư ng cong b
thay ñ i theo. Nhưng trong th c t , ta thư ng mong mu n ch thay ñ i m t ít v d ng
ñư ng cong g n khu v c ñang hi u ch nh các ñi m ki m soát.
Tính c c b y u c a ñư ng cong Bezier ñư c bi u hi n qua các ña th c Bk
L
(t) ñ u
khác 0 trên toàn kho ng [0,1]. M t khác ñư ng cong p(t) l i là m t t h p tuy n tính
c a các ñi m ki m soát ñư c gia tr ng b i các hàm Bk
L
(t) nên ta k t lu n r ng m i
ñi m ki m soát có nh hư ng ñ n ñư ng cong t t c các giá tr t ∈ [0,1]. Do ñó, hi u
ch nh b t kỳ m t ñi m ki m soát nào cũng s nh hư ng ñ n d ng c a toàn th ñư ng
cong.
ð gi i quy t bài toán này, ta s d ng m t t p h p các hàm tr n khác nhau. Các
hàm tr n này có giá mang (support: kho ng mà trên ñó hàm l y giá tr khác 0) ch là
m t ph n c a kho ng [0,1]. Ngoài giá mang này chúng có giá tr là 0.
Thư ng ta ch n các hàm tr n là các ña th c trên các giá mang ñó, các giá mang này
k nhau. Như v y, các hàm tr n chính là m t t p các ña th c ñư c ñ nh nghĩa trên
nh ng kho ng k nhau ñư c n i l i v i nhau ñ t o nên m t ñư ng cong liên t c. Các
81. Chương VI. Thi t k ñư ng cong và m t cong Bezier và B-Spline
77
ñư ng cong k t qu ñư c g i là ña th c riêng ph n hay t ng ph n (piecewise
polynomial).
Ví d : ta ñ nh nghĩa hàm g(t) g m 3 ña th c a(t), b(t), c(t) như sau:
g(t) =
[2,3]manggiaïcoït)-(3
2
1
=c(t)
[1,2]manggiaïcoï)
2
3
-(t-
4
3
=b(t)
[0,1]manggiaïcoït
2
1
=a(t)
2
2
2
Giá mang c a g(t) là [0,3]
Các giá tr c a t ng v i các ch n i c a các ño n g i là nút (knut), ch ng h n
t=0,1,2,3 là b n nút c a g(t). Hơn n a, t i các ch n i c a ñư ng cong g(t) là trơn,
không b g p khúc. Do ñó, ta g i ñó là hàm Spline.
V y, m t hàm Spline c p m là ña th c riêng ph n c p m có ñ o hàm c p m -1
liên t c m i nút.
D a trên tính ch t c a hàm Spline, ta có th dùng nó như các hàm tr n ñ t o ra
ñư ng cong p(t) d a trên các ñi m ki m soát P0,...,PL. Khi ñó:
P(t) =
k
L
=
∑
0
Pk.gk(t)
T ng quát hóa, ta xây d ng m t hàm p(t) v i L+1 ñi m ki m soát như sau:
V i m i ñi m ki m soát Pk , ta có m t hàm tr n tương ng Rk(t) và t p các nút g i
là vector nút T=(t0,t1,...,tn) v i ti ∈ R, ti ≤ ti+1 . Khi ñó:
P(t) =
k
L
=
∑
0
Pk.Rk(t)
6.2. ðƯ NG CONG SPLINE VÀ B-SPLINE
6.2.1. ð nh nghĩa
Theo trên ta có: P(t) =
k
L
=
∑
0
Pk.Rk(t) (*)
trong ñó Pk v i k=1..L là các ñi m ki m soát.
Rk(t) là các hàm tr n liên t c trong m i ño n con [ti , ti+1]và liên t c trên
m i nút. M i Rk(t) là m t ña th c riêng ph n.
Do ñó ñư ng cong p(t) là t ng c a các ña th c này, l y trên các ñi m ki m soát.