họa máy tính là một trong những lĩnh vực hấp dẫn và phát triển rất mau
lẹ, nó làm thay đổi hoàn toàn việc tương tác giữ người và máy. Nhờ vào đồ họa
máy tính mà một loạt các ứng dụng máy tính ra đời, đồ họa giúp cho việc giao tiếp
với máy tính trở nên dễ dàng hơn, nó được ứng dụng trong nhiều lĩnh vực như
khoa học công nghệ, y học, kiến trúc, giải trí….
Trên cơ sở đó, môn kỹ thuật đồ họa đã được đưa vào giảng dạy ở chuyên
ngành công nghệ thông tin và các lĩnh vực liên quan khác trong các trường đại
học. Môn này là tiền đề cung cấp cho sinh viên các lý thuyết cơ sở nhằm kiến tạo
và xử lý thông tin dưới dạng hình ảnh giúp cho việc giao tiếp với máy tính dễ dàng
hơn trong các môn ngành khác như : xử lý ảnh, kỹ thuật CAD.
Giáo trình này được biên soạn dựa trên đề cương môn đồ họa máy tính thuộc
chương trình đào tạo công nghệ thông tin bậc đại học của bộ giáo dục và đào tạo,
nội dung giáo trình tập trung vào các vấn đề cơ bản của đồ họa hai chiều và ba
chiều. Giáo trình cung cấp một lượng kiến thức đầy đủ và chọn lọc bao gồm các
khái niệm cơ bản, các thuật toán cơ sở của đồ họa máy tính giúp người đọc có thể
tìm hiểu, xây dựng các chương trình ứng dụng đồ họa.
Giáo trình được chia làm ba chương, chương 1 giói thiệu về đồ hoạ máy tính,
chương hai trình bày các phép biến đổi cũng như các thuật toán liên quan đến đồ
họa hai chiều, chương ba trình bày các vấn đề liên quan đến đồ họa ba chiều như
các phép biến đổi ba chiều, phép chiếu, khử khuất ….
Các vấn đề trình bày trong giáo trình này được tham khảo trong các tài liệu
kinh điển về đồ họa máy tính (computer graphics), giáo trình đồ họa của đại học
khoa học tự nhiên và một số tài liệu đồ hoạ của các trường đại học quốc tế. Tuy
nhiên trong quá trình biên soạn không thể không tránh khỏi sai sót, tôi xin trân
trọng tiếp thu ý kiến của các bạn đọc cũng như các bạn đồng nghiệp.
Tác giả
Ths Trần Minh Nhật
1
quan về kỹ thuật đồ hoạ
1.1. Các khái niệm tổng quan của kỹ thuật đồ hoạ máy tính
1.1.1. Lịch sử phát triển
Thuật ngữ đồ họa máy tính ( Computer Graphics) được đề xuất bởi một 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ồn lái máy bay cho hãng Boeing của Mỹ. William Fetter
đã dựa trên các hình ảnh ba chiều của mô hình của người phi công trong buồng lái
máy bay để xây dựng nên một mô hình tối ưu cho buồng lái máy bay boeing. Đây
là phương pháp nghiên cứu rất mới vào thời điểm đó. Phương pháp này có những
tính năng vuợt trội hơn tất cả các phương pháp xây dựng mô hình buồng lái trước
đó. Phương pháp này cho phép các nhà thiết kế quan sát một cách trực quan vị trí
của phi công trong buồng lái. Wiliam Fetter đã đặt tên cho phương pháp của mình
là Computer Graphics.
Đầu những năm 1980, máy tính chỉ dùng trong các lĩnh vực chuyên môn hóa
với chế độ hiển thị văn bản. Sau đó máy tính cá nhân ra đời, ứng dụng đồ họa máy
tính nó được xây dựng với chế độ hiển thị đồ họa điểm ảnh, trong đó các bit 0, 1 là
đại diện cho một khối của dãy các điểm (pixel, viết tắt của picture element) trên
màn hình. Chế độ đồ họa có giao diện thuận tiện cho phép người dùng giao tiếp
với máy tính một cách đơn giản.
Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh
nhất của tin học. Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh
liệt, cuốn hút rất nhiều người ở nhiều lĩnh vực khác nhau như khoa học, nghệ
thuật, kinh doanh, quản lí, … Tính hấp dẫn và đa dạng của đồ họa máy tính có thể
được minh họa rất trực quan thông qua việc khảo sát các ứng dụng của nó.
1.1.2. Kỹ thuật đồ hoạ máy tính
Đồ họa máy tính là tất cả những gì liên quan đến việc sử dụng máy tính để
phát sinh ra hình ảnh. Các vấn đề liên quan tới công việc này bao gồm : tạo, lưu
trữ, thao tác trên các mô hình (các mô tả hình học của đối tượng) và các ảnh.
Computer Graphics (Kỹ thuật đồ hoạ máy tính) là một lĩnh vực Công nghệ
thông tin mà ở đó nghiên cứu để tạo ra các công cụ xây dựng, xử lý, lưu trữ các
mô hình và hình ảnh của đối tượng.
2
thuật đồ hoạ
1.2.1. Kỹ thuật đồ hoạ điểm (Sample based Graphics)
Với kỹ thuật này các mô hình, hình ảnh của đối tượng được cấu tạo bởi các
điểm ảnh (pixel). Ta có thể thay đổi các đối tượng bằng cách thay đổi thuộc tính(vị
trí, màu sắc, độ sáng..) hoặc có thể xóa các điểm của đối tượng.
1.2.2. Kỹ thuật đồ hoạ vector(Vector Graphics)
Có thể định nghĩa đồ hoạ vector: Đồ hoạ vector = geometrical model + rendering
Geometrical model : mô hình hình học của đối tượng.
Rendering :quá trình tô trát để hiển thị từng điểm của đối tượng.
Đồ hoạ điểm
– Hình ảnh và mô hình của các vật thể
được biểu diễn bởi tập hợp các điểm
của lưới (grid)
Đồ hoạ vector
– Không thay đổi thuộc tính của từng
điểm trực tiếp
– Thay đổi thuộc tính của các pixel =>
thay đổi từng phần và từng vùng của
hình ảnh.
– Xử lý với từng thành phần hình học cơ
sở của nó và thực hiện quá trình tô trát
và hiển thị lại.
– Copy được các pixel từ một hình ảnh
này sang hình ảnh khác.
– Quan sát hình ảnh và mô hình của
hình ảnh và sự vật ở nhiều góc độ khác
nhau bằng cách thay đổi điểm nhìn và
góc nhìn.
1.2.3. Phân loại của đồ hoạ máy tính
Phân loại theo các lĩnh vực của đồ hoạ máy tính: kiến tạo đồ họa và xử lý đồ
họa.
– Kiến tạo đồ họa: CAD/CAM System, đồ hoạ minh hoạ, đồ hoạ hoạt hình và
nghệ thuật.
o Các hệ CAD/CAM (Computer Aided Design/Computer Aided
Manufacture System): kỹ thuật đồ hoạ tập hợp các công cụ, các kỹ
thuật trợ giúp cho thiết kế các chi tiết và các hệ thống khác nhau: hệ
thống cơ, hệ thống điện, hệ thống điện tử….
3
minh hoạ (Presentation Graphics): gồm các công cụ giúp
hiển thị các số liệu thí nghiệm một cách trực quan, dựa trên các mẫu
đồ thị hoặc các thuật toán có sẵn.
o Đồ hoạ hoạt hình và nghệ thuật: bao gồm các công cụ giúp cho các
hoạ sĩ, các nhà thiết kế phim hoạt hình chuyên nghiệp làm các kỹ
xảo hoạt hình, vẽ tranh… Ví dụ: phần mềm 3D Studio, 3D
Animation, 3D Studio Max.
– Xử lý đồ họa: Xử lý ảnh, Kỹ thuật nhận dạng
o Kỹ thuật xử lý ảnh (Computer Imaging): sau quá trình xử lý ảnh cho
ta ảnh số của đối tượng. Trong quá trình xử lý ảnh sử dụng rất nhiều
các kỹ thuật phức tạp: kỹ thuật khôi phục ảnh, kỹ thuật làm nổi ảnh,
kỹ thuật xác định biên ảnh.
o Kỹ thuật nhận dạng (Pattern Recognition): từ những ảnh mẫu có sẵn
ta phân loại theo cấu trúc, hoặc theo các tiêu trí được xác định từ
trước 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 ta xây dựng
được các thuật giải phân tích và tổ hợp ảnh.
Phân loại theo hệ toạ độ:tọa độ 2 chiều(2D) và 3 chiều(3D)
– Kỹ thuật đồ hoạ hai chiều: là kỹ thuật đồ hoạ máy tính sử dụng hệ toạ độ
hai chiều (hệ toạ độ phẳng), sử dụng rất nhiều trong kỹ thuật xử lý bản đồ,
đồ thị.
– Kỹ thuật đồ hoạ ba chiều: là kỹ thuật đồ hoạ máy tính sử dụng hệ toạ độ ba
chiều, đòi hỏi rất nhiều tính toán và phức tạp hơn nhiều so với kỹ thuật đồ
hoạ hai chiều.
1.2.4. Các ứng dụng tiêu biểu của đồ hoạ máy tính
Ngày nay, đồ họa máy tính được sử dụng trong rất 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í, … Số lượng các chương
trình đồ họa ứng dụng thật khổng lồ và phát triển liên tục, sau đây là một số ứng
dụng tiêu biểu.
1.2.4.1 Hỗ trợ thiết kế (CAD – Computer-Aided Design)
Hỗ trợ thiết kế được xem như một ứng dụng chính của đồ họa tương tác
đối tượng không gian, trong đó đối tượng được xây dựng trực tiếp như là mô
hình thiết kế. Ngày nay CAD đã được sử dụng hầu hết trong việc thiết kế các
4
tô, máy bay, tàu thủy, tàu vũ trụ, máy tính, trang trí mẫu vải, và rất
nhiều sản phẩm khác.
Sử dụng các chương trình này, đầu tiên các đối tượng được hiển thị dưới
dạng các phác thảo của phần khung (wireframe outline), mà từ đó có thể thấy
được toàn bộ hình dạng và các thành phần bên trong của các đối tượng. Sử
dụng kĩ thuật này, người thiết kế sẽ dễ dàng nhận thấy ngay các thay đổi của
đối tượng khi tiến hành hiệu chỉnh các chi tiết hay thay đổi góc nhìn, ….
Một khi đã thiết kế xong phần khung của đối tượng, các mô hình chiếu
sáng, tô màu và tạo bóng bề mặt sẽ được kết hợp để tạo ra kết quả cuối cùng
rất gần với thế giới thực .
1.2.4.2 Giao diện người dùng và máy tính
Hầu hết các ứng dụng đều phải có giao diện giao tiếp với người dùng
dựa vào việc dùng hệ thống cửa sổ để quản lý các hoạt động. Giao diện đồ
họa thực sự là một cuộc cách mạng mang lại sự thuận tiện và thoải mái cho
người dùng ứng dụng. Các ứng dụng dựa trên hệ điều hành MS Windows là
một minh họa rất trực quan của giao diện đồ họa. Các chức năng của các ứng
dụng này được thiết kế cho người dùng làm việc thông qua các biểu tượng
mô tả chức năng đó. Ví dụ, chức năng lưu tập tin được hiểu thông qua biểu
tượng đĩa mềm, chức năng in ấn được hiểu thông qua biểu tượng máy in, …
Để chọn các chức năng, người dùng sử dụng chuột trỏ đến và nhấn vào các
biểu tượng tương ứng. Điểm thuận lợi chính khi dùng biểu tượng là kích
thước không gian mà nó chiếm ít hơn nhiều so với dùng văn bản để mô tả
cho cùng một chức năng, ngoài ra việc nắm bắt các chức năng qua các biểu
tượng sẽ dễ dàng hơn rất nhiều khi người dùng gặp trở ngại về mặt ngôn ngữ.
Các ứng dụng có giao diện đồ họa còn cho phép người dùng khả năng
làm việc dễ dàng với nhiều cửa sổ với nhiều dạng tài liệu khác nhau cùng
một lúc.
1.2.4.3 Biểu diễn thông tin
Đây là các ứng dụng sử dụng đồ họa máy tính để phát sinh các biểu đồ,
đồ thị minh họa mối quan hệ giữa nhiều đối tượng với nhau. Các ứng dụng
này thường được dùng để tóm lược các dữ liệu về tài chính, thống kê, kinh tế,
khoa học, toán học, … giúp cho việc nghiên cứu, quản lí, … một cách có
hiệu quả. Tất cảc đều được trình bày đẹp, ngắn gọn, dễ sử dụng. Trong
thương mại, đồ họa máy tính cũng tạo ra các hình ảnh gây ấn tượng và thu
hút sự chú ý.
5
giải trí, nghệ thuật
Đối với các nhà họa sĩ, tạo mẫu, các chương trình máy tính như Paint
Shop Pro, Adobe Photoshop, 3D Studio, … đã giúp họ rất đắc lực cho các
họa sĩ, các nhà tạo mẫu trong việc thiết kế các hình ảnh sống động, và rất
thực. Với các chương trình này, người họa sĩ được máy tính tạo cho cảm giác
y như đang làm việc ngoài đời thực bằng cách cung cấp các công cụ như
khung vẽ, giá vẽ, bảng pha màu, các hiệu ứng ba chiều, … làm cho họ cảm
thấy rất thoải mái và tiện lợi.
Ngoài ra đồ họa máy tính còn giúp tạo ra các chương trình trò chơi, giải
trí; hỗ trợ cho các kĩ xảo điện ảnh, cho các nhà làm phim. Có nhiều bộ phim
rất nổi tiếng nhờ vào kĩ xảo điện ảnh như : Công viên Khủng long kỉ Jura
(Jurassic Park), Titanic, Thế giới nước (Water World), …
1.2.4.5 Giáo dục và đào tạo
Thể hiện rỏ nhất thông qua các chương trình mô phỏng, các chương
trình này mô phỏng cấu trúc của các vật thể, tiến trình của các phản ứng hóa
học, hoạt động của các gói tin trên mạng máy tính, … được dùng rất nhiều
trong việc hỗ trợ giảng dạy.
Trong đào tạo, các ứng dụng mô phỏng được dùng để kiểm tra trình độ
người lái, huấn luyện phi công, điều khiển giao thông, xa hơn nữa là các
chương trình mô phỏng quá trình phóng phi thuyền, đây là bước chuẩn bị
quan trọng giúp tiết kiệm chi phí hơn so với các thí nghiệm bằng mô hình vật
lý thực.
6
Chương trình học về máy tính
1.2.4.6 Bản đồ học
Đồ họa máy tính được sử dụng để đưa ra sơ đồ vị trí địa lý và các hiện
tương tự nhiên một cách chính xác từ số liệu đo được. Ví dụ như bản đồ địa
lý, bản đồ thời tiết, bản đồ mật độ dân số, bản đồ khai thác cho việc khoan và
khai mỏ, biểu đồ hải dương học….
1.2.5. Các chuẩn giao diện của hệ đồ hoạ
Mục tiêu căn bản của phần mềm đồ hoạ được chuẩn là tính tương thích.
Khi các công cụ được thiết kế với hàm đồ hoạ chuẩn, phần mềm có thể được
di chuyển một cách dễ dàng từ hệ phần cứng này sang hệ phần cứng khác và
được dùng trong nhiều cài đặt và ứng dụng khác nhau.
GKS (Graphics Kernel System): chuẩn xác định các hàm đồ hoạ chuẩn,
được thiết kế như một tập hợp các công cụ đồ hoạ hai chiều và ba chiều.
GKS Functional Description, ANSI X3.124 – 1985.GKS – 3D
Functional Description, ISO Doc #8805:1988.
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.
CGM (Computer Graphics Metafile): xác định các chuẩn cho việc lưu
trữ và chuyển đổi hình ảnh.
7
Modeling Language): ngôn ngữ thực tại ảo, một
hướng phát triển trong công nghệ hiển thị được đề xuất bởi hãng Silicon
Graphics, sau đó đã được chuẩn hóa như một chuẩn công nghiệp.
PHIGS (Programmers Hierarchical Interactive Graphics Standard): xác
định các phương pháp chuẩn cho các mô hình thời gian thực và lập trình
hướng đối tượng.
PHIGS Functional Description, ANSI X3.144 – 1985.+ Functional
Description, 1988, 1992.
OPENGL thư viện đồ họa của hãng Silicon Graphics, được xây dựng
theo đúng chuẩn của một hệ đồ họa năm 1993.
DIRECTX thư viện đồ hoạ của hãng Microsoft, Direct X/Direct3D
1997.
1.3. Phần cứng đồ hoạ (Graphics hardware)
1.3.1. Các thành phần phần cứng của hệ đồ hoạ tương tác
Cũng như mọi lĩnh vực trong công nghệ thông tin, một hệ thống sử dụng kỹ
thuật đồ họa tương tác là một hệ thống xử lý thông tin bao gồm ba thành phần với
các thao tác tương ứng:
– Nhập dữ liệu: thông qua các thết bị nhập(chuột, bàn phím, máy quét, …).
– Xử lý và lưu dữ liệu.
– Hiển thị kết xuất kết quả: thông qua các thiết bị như màn hình, máy in, …
Ngoài những đặc thù chung đã liệt kê ở trên, hệ thống kỹ thuật đồ họa tương
tác còn có một đặc điểm rất đặc trưng của mình: trong hệ thống này, các thông tin
và các dữ liệu đặc trưng được hiển thị trên màn hình một cách trực quan và người
sử dụng có thể quan sát, theo dõi và thay đổi giá trị hoặc khuông dạng của chúng
một cách tương tác và ngay lập tức các thay đổi này được hệ thống ghi nhận và xử
lý. Kết quả của sự thay đổi sẽ được hệ thống xử lý ngay trên các mô hình, cấu trúc
hoặc hình ảnh của các đối tượng và hiển thị chúng ngay trên màn hình như người
sử dụng mong muốn.
8
Nhập dữ
liệu
Xử lý &
lưu trữ
Hiển thị
kết quả
USER
Sơ đồ tương tác
Như mô hình chung của hệ thống sử dụng kỹ thuật đồ họa tương tác, chúng
ta thấy người sử dụng có khả năng giao tiếp tương tác với hệ thống ở cả ba giai
đoạn trong quá trình xử lý thông tin.
Một hệ thống đồ họa tương tác đầu tiên được thiết kế và xây dựng bởi Ivan
Sutherland và mang tên Sketchpad. Hệ thống này được dùng để thiết kế mạch điện
và bao gồm những thành phần sau:
– Màn hình CRT
– Bút chì sáng và một bàn phím
– Máy tính chứa chương trình xử lý thông tin
Người dùng có thể vẽ mạch điện trực tiếp lên màn hình thông qua bút sáng,
chương trình sẽ phân tích và tính toán những thông số cần thiết của mạch điện do
người dùng vẽ nên.
1.3.2. Máy in
– Dot size: đường kính của một điểm in bé nhất mà máy in có thể in được. Ví
dụ 8 – 20/ 100inch, 5/1000inch.
– Addressability: khả năng địa chỉ hoá các điểm in có thể có trên một đơn vị
độ dài (dot per inch).
Dot size Point per inch
8 – 20/ 100inch 200, 600
5/1000inch 1500
– Số lượng màu có thể vẽ trên một điểm.
1.3.3. Màn hình CRT
Hình 1.3 – Cấu tạo của CRT
Màn hình là thiết bị hiển thị thông dụng nhất trong một hệ đồ họa. Các thao
tác của hầu hết màn hình đều dựa trên thiết kế của ống tia âm cực (CRT – cathode
ray tube).
9
họa thao tác cơ sở của một ống tia âm cực. Một chùm các tia
điện tử (tia âm cực) phát ra từ một súng điện tử, vượt qua các hệ thống hội tụ
(focusing) và dẫn hướng (deflection) sẽ hướng tới các vị trí xác định trên màn hình
được phủ một lớp phosphor. Tại mỗi vị trí tương tác với tia điện tử, hạt phosphor
sẽ phát ra một chấm sáng nhỏ. Vì ánh sáng phát ra bởi các hạt phosphor mờ dần
rất nhanh nên cần phải có một cách nào đó để duy trì ảnh trên màn hình. Một trong
các cách đó là lặp đi lặp lại nhiều lần việc vẽ lại ảnh thật nhanh bằng cách hướng
các tia điện tử trở lại vị trí cũ. Kiểu hiển thị này gọi là refresh CRT.
Có nhiều loại phosphor được dùng trong một CRT. Ngoài màu sắc ra, điểm
khác nhau chính giữa các loại phosphor là “độ bền” (persistent), đó là khoảng thời
gian phát sáng sau khi tia CRT không còn tác động. Lớp phosphor có độ bền thấp
cần tốc độ làm tươi cao hơn để giữ cho hình ảnh trên màn hình khỏi nhòe. Loại
này thường rất tốt cho hoạt hình, rất cần thay đổi hình ảnh liên tục. Lớp phosphor
có độ bền cao thường được dùng cho việc hiển thị các ảnh tĩnh, độ phức tạp cao.
Mặc dù một số loại phosphor có độ bền lớn hơn 1 giây, tuy nhiên các màn hình đồ
họa thường được xây dựng với độ bền dao động từ 10 đến 60 micro giây.
Số lượng tối đa các điểm có thể hiển thị trên một CRT được gọi là độ phân
giải (resolution). Một định nghĩa chính xác hơn của độ phân giải là số lượng các
điểm trên một centimet mà có thể được vẽ theo chiều ngang và chiều dọc, mặc dù
nó thường được xem như là tổng số điểm theo mỗi hướng.
Kích thước vật lí của màn hình đồ họa được tính từ độ dài của đường chéo
màn hình, thường dao động từ 12 đến 27 inch hoặc lớn hơn. Một màn hình CRT
có thể được kết hợp với nhiều loại máy khác nhau, do đó số lượng các điểm trên
màn hình có thể được vẽ thật sự còn tùy thuộc vào khả năng của hệ thống mà nó
kết hợp vào.
Một thuộc tính khác của màn hình nữa là tỉ số phương (aspect ratio). Tỉ số
phương là tỉ lệ của các điểm dọc và các điểm ngang cần để phát sinh các đoạn
thẳng có độ dài đơn vị theo cả hai hướng trên màn hình (trong một số trường hợp
người ta thường dùng tỉ số phương như là tỉ số của các điểm theo chiều ngang so
với các điểm theo chiều dọc). Với các màn hình có tỉ số phương khác 1, dễ dàng
nhận thấy là các hình vuông hiển thị trên nó sẽ có dạng hình chữ nhật, các hình
tròn sẽ có dạng hình ellipse. Thực ra khái niệm tỉ số phương xuất phát từ bản chất
khoảng cách (nếu tính cùng một đơn vị độ dài) giữa các điểm dọc không bằng
khoảng cách giữa các điểm ngang. Một tỉ số phương có giá trị ¾ có nghĩa là vẽ 3
điểm theo chiều dọc sẽ có cùng độ dài với việc vẽ 4 điểm theo chiều ngang.
Màn hình dạng điểm (raster – scan display):
10
điểm là dạng thường gặp nhất trong số các dạng màn hình sử
dụng CRT dựa trên công nghệ truyền hình.
Trong hệ thống này, chùm tia điện tử sẽ được quét ngang qua màn hình, mỗi
lần một dòng và quét tuần tự từ trên xuống dưới. Sự bật tắt của các điểm sáng trên
màn hình phụ thuộc vào cường độ của tia điện tử và đây chính là cơ sở của việc
tạo ra hình ảnh trên màn hình.
Mỗi điểm trên màn hình được gọi là một pixel hay là pel (viết tắt của picture
element). Các thông tin về hình ảnh hiển thị trên màn hình được lưu trữ trong một
vùng bộ nhớ gọi là vùng đệm làm tươi (refresh buffer) hay là vùng đệm khung
(frame buffer). Vùng bộ nhớ này lưu trữ tập các giá trị cường độ sáng của toàn bộ
các điểm trên màn hình và luôn luôn tồn tại một song ánh giữa mỗi điểm trên màn
hình và mỗi phần tử trong vùng này.
Hình 1.4 – Quá trình tạo hình ảnh của các tia quét
Để thay đổi các hình ảnh cần hiển thị, các giá trị tương ứng với vị trí và độ
sáng phải được đặt vào vùng đệm khung. Hình 1.8 minh họa các giá trị tương ứng
trong vùng đệm khung để hiển thị hình ảnh của chữ A trên màn hình.
Đối với màn hình đen trắng, vùng đệm khung còn được gọi là bitmap, với
các màn hình khác vùng đệm khung thường được gọi là pixmap.
11
các ảnh đen trắng, đơn giản chỉ cần lưu thông tin của mỗi pixel
bằng 1 bit (các giá trị 0, 1 sẽ tượng trưng cho việc tắt (tối), bật (sáng) pixel trên
màn hình). Trong trường hợp ảnh nhiều màu, người ta cần nhiều bit hơn, nếu
thông tin của mỗi pixel được lưu bằng b bit, thì ta có thể có 2b
giá trị màu phân
biệt cho pixel đó.
Hình 1.5 – Song ánh giữa vùng đệm khung và màn hình
Trong các màn hình màu, người ta định nghĩa tập các màu làm việc trong
một bảng tra (LookUp Table – LUT). Mỗi phần tử của LUT định nghĩa một bộ ba
giá trị R (Red), G (Green), B (Blue) mô tả một màu nào đó. Khi cần sử dụng một
màu, ta chỉ cần chỉ định số thứ tự (index) tương ứng của màu đó trong LUT. Bảng
LUT có thể được thay đổi bởi các ứng dụng và người lập trình có thể can thiệp
điều khiển. Với cách làm này chúng ta có thể tiết kiệm không gian lưu trữ cho mỗi
phần tử trong vùng đệm khung.
Số phần tử của LUT được xác định từ số lượng các bits/pixel. Nếu mỗi phần
tử của vùng đệm khung dùng b bits để lưu thông tin của một pixel, thì bảng LUT
có 2b
phần tử. Nếu b=8, LUT sẽ có 28
=256 phần tử, đó chính là số màu có thể
được hiển thị cùng một lúc trên màn hình.
Việc làm tươi trên màn hình dạng này được thực hiện ở tốc độ 60 đến 80
frame/giây. Đôi khi tốc độ làm tươi còn được biểu diễn bằng đơn vị Hertz (Hz – số
chu kì/ giây), trong đó một chu kì tương ứng với một frame. Sử dụng đơn vị này,
chúng ta có thể mô tả tốc độ làm tươi 60 frame/giây đơn giản là 60Hz. Khi đạt đến
cuối mỗi dòng quét, tia điện tử quay trở lại bên trái của màn hình để bắt đầu dòng
quét kế tiếp. Việc quay trở lại phía trái màn hình sau khi làm tươi mỗi dòng quét
được gọi là tia hồi ngang (horizontal retrace). Và tới cuối mỗi frame, tia điện tử
(tia hồi dọc – vertical retrace) quay trở lại góc trên bên trái của màn hình để chuẩn
bị bắt đầu frame kế tiếp.
12
Hoạt động của màn hình interlaced
Trong một số màn hình, mỗi frame được hiển thị thành hai giai đoạn sử dụng
kĩ thuật làm tươi đan xen nhau (interlaced refesh). Ở giai đoạn đầu tiên, tia quét sẽ
quét một số dòng từ trên xuống dưới, sau tia hồi dọc, các dòng còn lại sẽ được
quét. Việc đan xen các dòng quét này cho phép chúng ta thấy được toàn màn hình
hiển thị chỉ trong một nửa thời gian so với dùng để quét tất cả các dòng một lần từ
trên xuống dưới. Kĩ thuật này thường được dùng cho loại màn hình có tốc độ làm
tươi thấp.
1.3.4. Màn hình tinh thể lỏng (Liquid Crystal Display – LCD)
Dựa vào công nghệ truyền ánh sáng qua điện cực mà đặt giữa là cuộn dây
xoắn. Khi chưa có từ trường (chưa có dòng điện) ở cuộn dây thì ánh sáng truyền
thẳng, khi có từ trường thì ánh sáng truyền đổi chiều.
Hình 1.7 – Công nghệ truyền ánh sáng trong màn hình tinh thể lỏng
Tóm tắt
Sự ra đời của đồ họa máy tính thực sự là cuộc cách mạng trong giao tiếp giữa
người dùng và máy tính. Với lượng thông tin trực quan, đa dạng và phong phú
được chuyển tải qua hình ảnh, các ứng dụng đồ họa máy tính đã lôi cuốn nhiều
người nhờ tính thân thiện, dễ dùng, kích thích khả năng sáng tạo và tăng đáng kể
hiệu suất làm việc.
13
tính ngày nay được ứng dụng rất rộng rãi trong nhiều lĩnh vực
khoa học, kĩ thuật, nghệ thuật, kinh doanh, quản lí, … Các ứng dụng đồ họa rất đa
dạng, phong phú và phát triển liên tục không ngừng. Ngày nay, hầu như không có
chương trình ứng dụng nào mà không sử dụng kĩ thuật đồ họa để làm tăng tính hấp
dẫn của mình.
Một hệ đồ họa bao giờ cũng có hai thành phần chính đó là phần cứng và
phần mềm..
Thành phần phần cứng bao gồm các thiết bị hiển thị (hay là thiết bị xuất) và
các thiết bị nhập. Tiêu biểu nhất trong các thiết bị hiển thị là màn hình mà cơ chế
hoạt động dựa trên cấu tạo của ống tia âm cực CRT. Các thiết bị nhập dữ liệu
thường gặp bao gồm bàn phím, chuột.
Phần mềm đồ họa có thể chia làm hai loại đó là các công cụ lập trình như các
hàm thư viện của C, Pascal, GL, … và các ứng dụng phục vụ cho một mục đích
nào đó như AutoCAD, Photoshop, … Hướng tiếp cận của chúng ta trong tài liệu
này ở mức độ của người lập trình, nghĩa là chúng ta sẽ tìm hiểu các thuật toán,
các nguyên lí để xây dựng nên các ứng dụng đồ họa chứ không phải là học cách sử
dụng các phần mềm như AutoCAD, Photoshop, …
14
tạo và nguyên lí hoạt động của màn hình dạng điểm. Các khái niệm
như vùng đệm khung, độ phân giải, tỉ số phương, … của màn hình dạng
này.
2. Ý nghĩa và hoạt động của bảng tra LUT.
3. Ba màn hình có độ phân giải lần lượt là 640×480, 1024×768, 1280×1024.
Hãy cho biết kích thước của vùng đệm khung (tính bằng byte) nếu mỗi
pixel được mô tả bằng 8 bit, 12 bit, 24 bit.
4. Các hệ màu. Mối liên hệ giữa chúng.
5. Quy trình hiển thị đối tượng. Ý nghĩa của các hệ tọa độ.
6. Tập các hàm đồ họa của một công cụ lập trình. Liên hệ tới các thư viện đồ
họa của các ngôn ngữ đã học như C, Pascal, …
7. Tại sao cần phải chuẩn hóa các phần mềm ? Tìm hiểu các chuẩn GKS,
PHIGS.
15
giải thuật sinh thực thể cơ sở
GIỚI THIỆU
Bất kì một ảnh mô tả thế giới thực nào bao giờ cũng được cấu trúc từ tập các
đối tượng đơn giản hơn. Ví dụ một ảnh thể hiện bài trí của một căn phòng sẽ được
cấu trúc từ các đối tượng như cây cảnh, tủ kính, bàn ghế, tường, ánh sáng đèn, …
Với các ảnh đồ họa phát sinh bằng máy tính, hình dạng và màu sắc của mỗi đối
tượng có thể được mô tả riêng biệt bằng hai cách : hoặc là bằng dãy các pixel
tương ứng hoặc là bằng tập các đối tượng hình học cơ sở như đoạn thẳng hay vùng
tô đa giác, … Sau đó, các ảnh sẽ được hiển thị bằng cách nạp các pixel vào vùng
bộ nhớ màn hình.
Với các ảnh được mô tả bằng các đối tượng hình học cơ sở, cần phải có một
quá trình chuyển các đối tượng này về dạng ma trận các pixel trước. Quá trình này
còn được gọi là quá trình chuyển đổi bằng dòng quét (scan-converting). Bất kì
công cụ lập trình đồ họa nào cũng phải cung cấp các hàm để mô tả một ảnh dưới
dạng các đối tượng hình học cơ sở hay còn gọi là các đối tượng đồ họa cơ sở
(output primitives) và các hàm cho phép kết hợp tập các đối tượng cơ sở để tạo
thành đối tượng có cấu trúc phức tạp hơn.
Mỗi đối tượng đồ họa cơ sở được mô tả thông qua dữ liệu về tọa độ và các
thuộc tính của nó, đây chính là thông tin cho biết kiểu cách mà đối tượng được
hiển thị. Đối tượng đồ họa cơ sở đơn giản nhất là điểm và đoạn thẳng, ngoài ra còn
có đường tròn, và các đường conics, mặt bậc hai, các mặt và đường splines, các
vùng tô đa giác, chuỗi kí tự, … cũng được xem là các đối tượng đồ họa cơ sở để
giúp xây dựng các ảnh phức tạp. Chương này sẽ khảo sát các thuật toán hiển thị
các đối tượng đồ họa cơ sở cho các thiết bị hiển thị dạng điểm.
Xét về mặt bản chất, các thuật toán này thực hiện quá trình chuyển đổi các
đối tượng đồ họa cơ sở được mô tả trong hệ tọa độ thực về dãy các pixel có tọa độ
nguyên của thiết bị hiển thị. Có hai yêu cầu đặt ra cho các thuật toán này đó là :
Đối tượng được mô tả trong hệ tọa độ thực là đối tượng liên tục, còn đối tượng
trong hệ tọa độ thiết bị là đối tượng rời rạc, do đó bản chất của quá trình chuyển đổi
này chính là sự rời rạc hóa và nguyên hóa các đối tượng sao cho có thể xác định các
điểm nguyên xấp xỉ đối tượng một cách tốt nhất, thực nhất. Nghĩa là đối tượng hiển
thị bằng lưới nguyên trên thiết bị hiển thị phải có hình dạng tương tự như đối tượng
trong lưới tọa độ thực và “có vẻ” liên tục, liền nét. Sự liên tục trên lưới nguyên của
thiết bị hiển thị có được do mắt người không thể phân biệt được hai điểm quá gần
nhau.
16
tượng đồ họa cơ sở là thành phần chính cấu trúc các đối tượng
phức tạp nên các thuật toán hiển thị chúng cần phải được tối ưu hóa về mặt tốc độ,
đây chính là điểm mấu chốt cho việc ra đời các thuật toán khác nhau.
Hình 2.1 Quá trình chuyển đổi một đoạn thẳng về dãy các pixel tương ứng
2.1. Các đối tượng đồ họa cơ sở
2.1.1. Hệ đồ hoạ thế giới thực và hệ đồ hoạ thiết bị
Hệ tọa độ thế giới thực
Hệ tọa độ thế giới thực (hay hệ tọa độ thực) là hệ tọa độ được dùng mô tả các
đối tượng thế giới thực. Một trong các hệ tọa độ thực thường được dùng nhất đó là
hệ tọa độ Descartes. Với hệ tọa độ này, bất kì một điểm nào trong mặt phẳng cũng
được mô tả bằng một cặp tọa độ (x, y) trong đó x, y ∈ R. Gốc tọa độ là điểm O có
tọa độ (0, 0). Các trục tọa độ có chiều dương được quy ước như hình 2.3; Ox, Oy
lần lượt được gọi là trục hoành, trục tung; x là khoảng cách từ điểm đến trục
hoành hay còn được gọi là hoành độ, y là khoảng cách từ điểm đến trục tung hay
còn được gọi là tung độ.
Các tọa độ thế giới thực cho phép người dùng sử dụng bất kì một thứ nguyên
(dimension) quy ước như foot, cm, mm, km, inch, … nào và có thể lớn nhỏ tùy ý.
Hệ tọa độ thiết bị
Hệ tọa độ thiết bị là hệ tọa độ được dùng bởi một thiết bị xuất cụ thể nào đó
như máy in, màn hình, … Đặc điểm chung của các hệ tọa độ thiết bị đó là :
Các điểm trong hệ tọa độ thiết bị cũng được mô tả bởi một cặp tọa độ (x, y),
tuy nhiên điểm khác với hệ tọa độ thực là x, y ∈ N. Điều này cho thấy các điểm
trong hệ tọa độ thực được định nghĩa liên tục, còn các điểm trong các hệ tọa độ
thiết bị là rời rạc do tính chất của tập các số tự nhiên.
17
x, y của hệ tọa độ thiết bị không thể lớn tùy ý mà đều bị giới hạn
trong một khoảng nào đó. Một số thiết bị chỉ cho x chạy trong đoạn[0,639], y chạy
trong đoạn [0,479]. Khoảng giới hạn các tọa độ x, y là khác nhau đối với từng loại
thiết bị khác nhau.
Hệ tọa độ với các hướng của các trục tọa độ như trên còn được gọi là hệ tọa
độ theo quy ước bàn tay phải.
Ngoài ra do cách tổ chức bộ nhớ nên thông thường các hệ tọa độ thiết bị
thường dựa trên hệ tọa độ theo quy ước bàn tay trái.
Hình 2.3 – Hệ tọa độ theo quy ước bàn tay phải (a) và quy ước bàn tay trái (b)
2.1.2. Biểu diễn điểm và đoạn thẳng
2.1.2.1 Điểm
Điểm là thành phần cơ sở được định nghĩa trong một hệ tọa độ. Đối với hệ
tọa độ hai chiều mỗi điểm được xác định bởi cặp tọa độ (x, y).
Ngoài thông tin về tọa độ, điểm còn có thuộc tính là màu sắc.
2.1.2.2 Đoạn thẳng
Một đường thẳng có thể xác định nếu biết hai điểm thuộc nó. Phương trình
đường thẳng đi qua hai điểm (x1, y1) và (x2, y2) có dạng sau :
12
12
1
1
yy
xx
yy
xx
−
−
=
−
−
18
O x
y x
y
O
(a) (b)
O x
y
PWC
(x,y)
x
y
O x
y
ymax
xmax
PDC
(x,y)
(a) (b)
Hình 2.2 – Hệ tọa độ thực (a) và hệ tọa độ thiết bị (b)
tương đương : ( )( ) ( )( )121121 xxyyyyxx −−=−−
Khai triển ta có dạng : bmxy +=, trong đó :
11
1212 ,,
mxyb
xxDxyyDy
Dx
Dy
m
−=
−=−==
Đây còn được gọi là phương trình đoạn thắng của đường thẳng.
Nếu khai triển dưới dạng :
( ) ( ) 012211212 =+−−−− yxyxyxxxyy
và đặt ( ) 21121212 ,, yxyxCxxByyA −=−−=−= thì phương trình đường thẳng sẽ
có dạng 0=++ CByAx, dạng này được gọi là phương trình tổng quát của đường
thẳng.
Phương trình tham số của đường thẳng có dạng các tọa độ x, y được mô tả
qua một thành phần thứ ba là t. Dạng này rất thuận tiện khi khảo sát các đoạn
thẳng.
( )
( )
+−=
+−=
21
21
1
1
tyyty
txxtx
Nếu [ ]1,0∈t, ta có các điểm (x,y) thuộc về đoạn thẳng giới hạn bởi hai điểm
(x1, y1) và (x2, y2), nếu [ ]+∞−∞∈ ,t, ta sẽ có toàn bộ đường thẳng.
Một đoạn thẳng là một đường thẳng bị giới hạn bởi hai điểm đầu, cuối.
Hình 2.4 – Dạng tham số của phương trình đường thẳng
Đường gấp khúc là tập các đoạn thẳng nối với nhau một cách tuần tự. Các
đoạn thẳng này không nhất thiết phải tạo thành một hình khép kín và các đoạn có
thể cắt lẫn nhau. Điểm giao của hai đoạn thẳng được gọi là đỉnh. Các đường gấp
khúc được xác định qua danh sách các đỉnh, mỗi đỉnh được cho bởi các cặp tọa độ
( )ii yx, .
Một đa giác là một đường gấp khúc có điểm đầu và điểm cuối trùng nhau.
19
(x 1 ,y 1 )
(x 2
,y 2
)
t=0
t=1
t<0
t>1
(a) (b)
Đường gấp khúc (a) và đa giác (b)
Các thuộc tính của đoạn thẳng bao gồm :
Màu sắc
Độ rộng của nét vẽ.
Kiểu nét vẽ của đoạn thẳng : có thể là một trong các dạng như hình 2.6. Hầu
hết các công cụ đồ họa đều định nghĩa tập các kiểu nét vẽ đoạn thẳng có thể dùng
và cho phép người dùng định nghĩa kiểu đoạn thẳng của mình thông qua một mẫu
(pattern) gồm các số 0, 1.
Đối với đường gấp khúc, các đoạn thẳng trong cùng một đường gấp khúc thì
có cùng một thuộc tính.
Hình 2.6 – Một số kiểu nét vẽ của đoạn thẳng
2.1.2.3 Vùng tô
Một vùng tô bao gồm đường biên và vùng bên trong. Đường biên là một
đường khép kín ví dụ như đa giác.
Các thuộc tính của vùng tô bao gồm:
Thuộc tính của đường biên : chính là các thuộc tính như thuộc tính của đoạn
thẳng.
Thuộc tính của vùng bên trong : bao gồm màu tô và mẫu tô.
Hình 2.7 – Vùng tô với các dạng đường biên và mẫu tô khác nhau
2.2. Các giải thuật xây dựng thực thể cơ sở
2.2.1. Giải thuật vẽ đoạn thẳng thông thường
Giả sử tọa độ các điểm nguyên sau khi xấp xỉ đối tượng thực lần lượt là
( ) ,…0,, =iyx ii. Đây là các điểm nguyên sẽ được hiển thị trên màn hình.
Bài toán đặt ra là nếu biết được ( )ii yx, là tọa độ nguyên xác định ở bước thứ
i, điểm nguyên tiếp theo ( )11, ++ ii yx sẽ được xác định như thế nào.
20
để đối tượng hiển thị trên lưới nguyên được liền nét, các điểm
mà ( )11, ++ ii yx có thể chọn chỉ là một trong tám điểm được đánh số từ 1 đến 8 trong
hình 2.9 (điểm đen chính là( )ii yx, ).Hay nói cách khác : ( ) ( )1,1, 11 ±±=++ iiii yxyx .
Hình 2.8 – Các điểm ( )11, ++ ii yx có thể chọn ở bước (i+1)
Dáng điệu của đường sẽ cho ta gợi ý khi chọn một trong tám điểm trên. Cách
chọn các điểm như thế nào sẽ tùy thuộc vào từng thuật toán trên cơ sở xem xét tới
vấn đề tối ưu tốc độ.
Xét đoạn thẳng có hệ số góc 10 << m và 0>Dx .
Với các đoạn thẳng dạng này, nếu ( )ii yx, là điểm đã xác định được ở bước
thứ i (điểm màu đen) thì điểm cần chọn ( )11, ++ ii yx ở bước thứ (i+1) sẽ là một trong
hai trường hợp như hình vẽ sau :
Hình 2.9 – Các điểm ( )11, ++ ii yx chọn ở bước (i+1) cho trường hợp
đoạn thẳng có hệ số góc 0
DDA (Digital Differential Analizer)
Hình 2.10 – Minh họa thuật toán DDA
Với thuật toán DDA, việc quyết định chọn 1+iy là iy hay 1+iy, dựa vào
phương trình của đoạn thẳng bmxy +=. Nghĩa là, ta sẽ tính tọa độ của điểm
( )yx i ,1+ thuộc về đoạn thẳng thực. Tiếp đó, 1+iy sẽ là giá trị sau khi làm tròn giá
trị tung độ y.
Như vậy :
( )
( )yRoundy
bxmy
i
i
=
++=
+1
1
Nếu tính trực tiếp giá trị thực y ở mỗi bước từ phương trình bmxy += thì
phải cần một phép toán nhân và một phép toán cộng số thực. Để cải thiện tốc độ,
người ta tính giá trị thực của y ở mỗi bước theo cách sau để khử phép tính nhân
trên số thực :
Nhận xét rằng : ( ) bxmbmxy iisau ++=+= + 11
bmxy itröôùc +=
myy tröôùcsau +=⇒
Lưu đồ thuật toán DDA vẽ đoạn thẳng qua hai điểm (x1, y1) và (x2,y2)
22
(x i,y i)
(x i+1 ,y )
(x i+1 ,Round(y) )
họa thuật toán DDA
#define Round(a) int(a+0.5)
int Color = GREEN;
void LineDDA (int x1, int y1, int x2, int y2)
{
int x = x1;
float y = y1;
float m = float(y2-y1)/(x2-x1);
putpixel(x, Round(y), Color);
for(int i=x1; i
// LineDDA
Nhận xét
Việc sử dụng công thức myy tröôùcsau += để tính giá trị y tại mỗi bước đã giúp
cho thuật toán DDA nhanh hơn hẳn so với cách tính y từ phương trình bmxy +=
do khử được phép nhân trên số thực. Tuy nhiên, việc cộng dồn giá trị thực m vào y
có thể sẽ tích lũy sai số làm cho hàm làm tròn có kết quả sai dẫn tới việc xác định
vị trí của điểm vẽ ra bị chệch hướng so với đường thẳng thực. Điều này chỉ xảy ra
khi vẽ đoạn thẳng khá dài.
Tuy đã khử được phép nhân số thực nhưng thuật toán DDA vẫn còn bị hạn
chế về mặt tốc độ do vẫn còn phép toán cộng số thực và làm tròn. Có thể khắc
phục thao tác cộng số thực m và làm tròn trong thuật toán bằng cách nhận xét
Dx
Dy
m = với Dy, Dx là các số nguyên.
2.2.3. Giải thuật Bresenham
Thuật toán Bresenham đưa ra cách chọn 1+iy là iy hay 1+iy theo một hướng
khác sao cho có thể tối ưu hóa về mặt tốc độ so với thuật toán DDA. Vấn đề mấu
chốt ở đây là làm thế nào để hạn chế tối đa các phép toán trên số thực trong thuật
toán.
Hình 2.11 – Minh họa thuật toán Bresenham
Gọi P( )yx i ,1+ là điểm thuộc đoạn thẳng. Ta có: ( ) bxmy i ++= 1 .
Đặt ( ) yyd
yyd
i
i
−+=
−=
12
1
24
(x i+1 ,y )
P
S
x i x i+1
y i
y i
+1
y
d 1
d 2
các vị trí tương đối của y so với iy và 1+iy, việc chọn điểm
( )11, ++ ii yx là S hay P phụ thuộc vào việc so sánh d1 và d2 hay dấu của 21 dd − :
Nếu 021 <− dd, ta sẽ chọn điểm S, tức là ii yy =+1 .
Ngược lại, nếu 021 ≥− dd, ta sẽ chọn điểm P, tức là 11 +=+ ii yy .
Xét ( ) ( )12221 −−=−= ii yyDxddDxp
( )( )[ ]1212 −−++=⇒ iii ybxmDxp
Thay Dx
Dy
m = vào phương trình trên ta được : cDxyDyxp iii +−= 22, với
( )DxbDyc 122 −+= .
Nhận xét rằng do 0>Dx nên dấu của biểu thức 21 dd − cũng chính là dấu của
ip. Hay nói một cách khác, nếu tại bước thứ i ta xác định được dấu của ip thì xem
như ta xác định được điểm cần chọn ở bước (i+1). Vấn đề còn lại là làm thế nào để
tính được ip tại mỗi bước thật nhanh.
Ta có :
( ) ( )cDxyDyxcDxyDyxpp iiiiii +−−+−=− +++ 2222 111
( ) ( )iiiiii yyDxxxDypp −−−=−⇔ +++ 111 22
( ) 1do,22 111 +=−−=−⇔ +++ iiiiii xxyyDxDypp
Từ đây ta có thể suy ra cách tính 1+ip từ ip như sau :
Nếu 0
họa thuật toán Bresenham
void LineBres (int x1, int y1, int x2, int y2)
{
int Dx, Dy, p, Const1, Const2;
int x, y;
Dx = x2 – x1;
Dy = y2 – y1;
p = 2*Dy – Dx; // (Dy <<1) - Dx
Const1 = 2*Dy; // Dy <<1
26
Begin
p=2Dy-Dx;
Const1=2Dy;
Const2=2(Dy-Dx);
x=x1;
y=y1;
putpixel(x,y,c);
x
// (Dy-Dx) <<1
x = x1;
y = y1;
putpixel(x, y, Color);
for(i=x1; i
Minh họa thuật toán MidPoint
Ta có dạng tổng quát của phương trình đường thẳng :
0=++ CByAx
với ( ) 21121212 ,, yxyxCxxByyA −=−−=−=
Đặt ( ) CByAxyxF ++=,, ta có nhận xét :
( )
( )
( )
( )
>
=
<
thaúng.ñöôøngdöôùiphíanaèmyx,neáu,0
thaúngñöôøngveàthuoäcyx,neáu,0
th?ngðý?ngtrênphíanmyx,neáu,0
,yxF
Lúc này việc chọn các điểm S, P ở trên được đưa về việc xét dấu của
( )
++==
2
1
,12MidPoint2 iii yxFFp .
Nếu 0
thuật toán MidPoint cho kết quả tương tự như thuật toán
Bresenham.
2.2.5. Giải thuật sinh đường tròn dùng Bresenham (Scan Converting
Circles)
Phương trình đường tròn có tâm là gốc tọa độ, bán kính R là : 222
Ryx =+ .
Từ phương trình này ta có thể đưa về dạng 22
xRy −±=. Để vẽ các đường tròn
có tâm ( )CC yx, bất kì, đơn giản chỉ cần tịnh tiến các điểm sau khi vẽ xong đường
tròn có tâm là gốc tọa độ theo vector tịnh tiến ( )CC yx, .
Một số cách tiếp cận vẽ đường tròn
Do tính đối xứng nên để vẽ toàn bộ đường tròn, ta chỉ cần vẽ cung ¼ đường
tròn sau đó lấy đối xứng để xác định các điểm còn lại.
Một trong những cách đơn giản nhất là cho x chạy từ 0 đến R, sau đó tính y
từ công thức trên (chỉ lấy giá trị dương) rồi làm tròn để xác định giá trị nguyên
tương ứng. Cách làm này không hiệu quả do gặp phải các phép toán nhân và lấy
căn làm hạn chế tốc độ, ngoài ra đường tròn vẽ ra theo cách này có thể không liền
nét (trừ trường hợp R lớn) khi x gần R (do chỉ có một giá trị y duy nhất cho một
giá trị x). Chúng ta có thể khắc phục điều này bằng cách điều chỉnh đối tượng thay
đổi là x (rồi tính y theo x) hay y (rồi tính x theo y) tùy vào giá trị tuyệt đối của hệ
số góc đường tròn là lớn hơn hay nhỏ hơn 1, nhưng cách làm này đòi hỏi thêm các
phép tính toán và kiểm tra nên làm cho thuật toán phức tạp thêm. (Xem hình 2.14)
Một cách tiếp cận khác là vẽ các điểm ( ) ( )( ),sin,cos θθ RR với θ chạy từ 00
đến
900
. Cách này sẽ khắc phục hạn chế đường không liền nét của thuật toán trên, tuy
nhiên điểm hạn chế chính của thuật toán này đó là chọn bước nhảy cho θ như thế
nào cho phù hợp khi bán kính thay đổi.
Hình 2.13 – Đường tròn vẽ ra không liền nét theo cách vẽ trên
Phương trình đường tròn đi qua tâm có toạ độ (xc,yc) là:
(x – xc)2
+ (y – yc)2
= r2
Hình tròn là hình đối xứng tám cách
29
(0,17)
(17,0)
tròn đối xứng 8 phần
Để đơn giản ta xét tâm trùng gốc 0: x2
+ y2
= r2
Ta xét các điểm tạo ra từ góc phần tư thứ 2: từ 450
đến 900
, thực hiện theo
hướng x, y
Giả sử bắt đầu xi vậy xi+1 = xi +1
y2
= r2
– (xi +1)2
d1 = yi
2
– y2
= yi
2
– r2
+ (xi +1)2
d2 = y2
– (yi – 1)2
= r2
– (xi +1)2
– (yi – 1)2
pi = d1 – d2 = 2(xi +1 )2
+ yi
2
+ (yi – 1)2
-2r2
Xét: pi <0 (d1
pi = 2(xi +1 )2
+ 2yi
2
– 2yi +1 – 2r2
pi+1 = 2(xi +2 )2
+ 2yi+1
2
– 2yi+1 + 1 – 2r2
pi+1 = pi + 4xi +6 + 2yi+1
2
– 2yi
2
– 2yi+1 + 2yi
pi+1 = pi + 4xi +6 + 2(yi+1
2
– yi
2
)- 2(yi+1 – yi )
+ Nếu pi <0 hay yi+1 = yi
pi+1 = pi + 4xi +6
+ Nếu pi >=0 hay yi+1 = yi -1
pi+1 = pi + 4xi +6 – 4yi + 2 + 2
pi+1 = pi + 4(xi – yi ) + 10
+ Tính p1 : khi đó ứng với x1=0 và y1 =r
p1 = 2(x1 +1)2
+ y1
2
+ (y1 – 1)2
-2r2
30
r2
+ (r-1)2
– 2r2
= 3 – 2r
2.2.6. Giải thuật sinh đường tròn Midpoint
Do tính đối xứng của đường tròn (C) nên ta chỉ cần vẽ cung (C1/8
) là cung 1/8
đường tròn, sau đó lấy đối xứng. Cung (C1/8
) được mô tả như sau (cung của phần
tô xám trong hình vẽ) :
Hình 2.15 – Các vị trí đối xứng trên đường tròn (C) tương ứng với (x,y)
Như vậy nếu có (x, y) ∈ (C1/8
) thì các điểm : (y, x), (x,-y), (y,-x), (-x,-y), (-y,-
x), (-y,x), (-x,y) sẽ thuộc (C).
Chọn điểm bắt đầu để vẽ là điểm (0,R). Dựa vào hình vẽ, nếu ( )ii yx, là điểm
nguyên đã tìm được ở bước thứ i, thì điểm ( )11, ++ ii yx ở bước thứ (i+1) là sự lựa
chọn giữa S và P.
Như vậy : { }
−∈
+=
+
+
1,
1
1
1
iii
ii
yyy
xx
Tương tự như thuật toán MidPoint vẽ đoạn thẳng, việc quyết định chọn một
trong hai điểm S và P sẽ được thực hiện thông qua việc xét dấu của một hàm nào
đó tại điểm MidPoint là điểm nằm giữa chúng.
Hình 2.16 – Thuật toán MidPoint vẽ đường tròn
Đặt ( ) 222
, RyxyxF −+=, ta có :
31
2
R
(x,y)(-x,y)
(y,x)(-y,x)
(x,-y)(-x,-y)
(-y,-x) (y,-x)
S
P
MidPoint
y i
y i
-1
x i x i+1
Q(x i
+1 ,y )
)
( )
>
=
<
troøn.ñöôøngngoaøinaèmyx,neáu
troønñöôøngtreânnaèmyx,neáu
troønñöôøngtrongnaèmyx,neáu
,0
,0
,0
y,xF
Xét ( )
−+==
2
1
,1MidPoint iii yxFFp. Ta có :
Nếu 0
đồ thuật toán MidPoint vẽ đường tròn
Cài đặt minh họa thuật toán MidPoint vẽ đường tròn
// Ve 8 diem doi xung
void Put8Pixel(int x, int y)
{
putpixel(x, y, Color);
putpixel(y, x, Color);
putpixel(y, -x, Color);
putpixel(x, -y, Color);
putpixel(-x, -y, Color);
putpixel(-y, -x, Color);
33
Begin
p=5/4-R;
x=0;
y=R;
Put8Pixel(x,y,c);
x
y, Color);
} // Put8Pixel
void CircleMidPoint (int R)
{
int x, y;
x = 0;
y = R;
Put8Pixel(x, y);
p = 1 – R; // 5/4-R
while (x < y)
{
if (p < 0) p += 2*x + 3;
else
{
p += 2*(x -y) + 5;
y--;
}
x++;
Put8Pixel(x, y);
}
} // CircleMidPoint
2.2.7. Giải thuật sinh đường ellipse
Tính đối xứng được thực hiện trên 4 cách
F(x, y) = b2
x2
+ a2
y2
− a2
b2
= 0
34
tả giải thuật sinh đường ellipse
Vector vuông góc với tiếp tuyến gradient =1
Ta có tiếp tuyến với cung tròn (độ dốc) = -1= dy/dx = – fx/fy
Trong đó fx=2b2
x đạo hàm riêng phần của f(x,y) với x
Và fy=2a2
y đạo hàm riêng phần của f(x,y) với y
Giả sử ta chỉ xét trên góc phần tư thứ nhất: giả sử ta chia cung từ (0,b) đến
(a,0) tại Q, có độ dốc -1
Trên phần 1: x thay đổi thì y thay đổi theo
Trên phần 2: y thay đổi thì x thay đổi theo
+ Xét trên phần 1:
Bắt đầu từ (0,b), bước thứ i (xi,yi) chọn tiếp
A(xi+1, yi)
B(xi+1,yi-1)
Tham số quyết định:
Pi = f(xi+1,yi-1/2) = b2
(xi+1)2
+ a2
(yi-1/2)2
-a2
b2
Pi+1 = f(xi+1+1,yi+1-1/2) = b2(xi+1+1)2
+ a2
(yi+1-1/2)2
-a2
b2
Pi+1 – Pi = b2
((xi+1+1)2
– (xi+1)2
)+ a2
((yi+1-1/2)2
– (yi-1/2)2
)
Pi+1 = Pi + 2b2
xi+1+ b2
+ a2
((yi+1-1/2)2
– (yi-1/2)2
)
– Nếu Pi <0 chọn A
xi+1=xi+1
yi+1=yi
Pi+1 = Pi + 2b2
xi(xi+1) +b2
= Pi + 2b2
xi +3b2
Hay Pi+1 = Pi + b2
(2xi +3)
- Nếu Pi >=0 chọn B
xi+1=xi+1
yi+1=yi -1
35
+ 2b2
xi(xi+1) +b2
+ a2
((yi-1 -1/2)2
– (yi-1/2)2
)
= Pi + 2b2
xi +3b2
+a2
(-3yi +9/4 +yi -1/4)
= Pi + 2b2
xi +3b2
+a2
(-2yi +2)
Hay Pi+1 = Pi + b2(2xi +3) + a2
(-2yi +2)
– Tính P1 tại (0,b)
P1 = f(x1+1,y1-1/2) = b2
+ a2
(b-1/2)2
-a2
b2
P1 = b2
– a2
b +a2
/4
+ Xét trên phần 2:
Ta lấy toạ dộ của Pixel sau cùng trong phần 1 của đường cong để tính giá trị
ban đầu cho phần 2.
Giả sử pixel (xk,yk) vừa chuyển quét cuối cùng của phần 1 nhập vào bước j
cho phần 2 (xj,yj).
Pixel kế tiếp có thể là:
C(xj,yj-1)
D(xj+1, yj-1)
Tham số quyết định:
qj = f(xj+1/2,yj-1) = b2
(xj+1/2)2
+ a2
(yj-1)2
-a2
b2
qj+1 = f(xj+1+1/2,yj+1-1) = b2(xj+1+1/2)2
+ a2
(yj+1-1)2
-a2
b2
qj+1 – qj = b2
((xj+1+1/2)2
– (xj+1/2)2
)+ a2
((yj+1-1)2
– (yj-1)2
)
qj+1 = qj + b2
((xj+1+1/2)2
– (xj+1/2)2
)+ a2
– 2a2
yj+1
– Nếu qj <0 chọn D
yj+1=yj-1
xj+1=xj +1
qj+1 = qj + b2
((xj+3/2)2
- (xj+1/2)2
)+ a2
- 2a2
(yj -1)
qj+1 = qj + b2
(3xj +9/4- xj -1/4) +3a2
-2a2
yj
Hay qj+1 = qj + b2
(2xj +2) +a2
(-2yj +3)
- Nếu qj >=0 chọn C
yj+1=yj -1
xj+1= xj
qj+1 = qj + a2
– 2a2
(yj-1)
Hay qj+1 = qj + a2
(3 – 2yj )
– Tính q1:
36
-1) = b2
(xk+1/2)2
+ a2
(yk-1)2
-a2
b2
Câu hỏi: lúc lấy đối xứng 4 cách để tìm 1 Ellipse hoàn chỉnh từ các toạ độ
pixel được tạo ra với cung phần tư thứ 1. Có hiện tượng overstrike xảy ra hay
không?
Trả lời: hiện tượng overstrike xảy ra tại:
(0,b); (0,-b); (a,0); (-a,0)
Thuật toán
#include
#include
#define ROUND(a) ((long)(a+0.5))
void plot(int xc, int yc, int x, int y, int color){
putpixel(xc+x, yc+y, color);
putpixel(xc-x, yc+y, color);
putpixel(xc+x, yc-y, color);
putpixel(xc-x, yc-y, color);
}
void Mid_ellipse(int xc, int yc, int a, int b, int color){
long x, y, fx, fy, a2, b2, p;
x = 0;
y = b;
a2 = a * a; //a2
b2 = b * b; // b2
fx = 0;
fy = 2 * a2 * y; // 2a2y
plot(xc, yc, x,y, color);
p = ROUND(b2-(a2*b)+(0.25*a)); // p=b2 – a2b + a2/4
while (fx < fy){
x++;
fx += 2*b2; //2b2
if (p<0)
p += b2*(2*x +3); // p=p + b2 (2x +3)
else{
37
+ a2*(-2*y +2); // p = p + b2(2x +3) + a2 (-2y +2)
fy -= 2*a2; // 2a2
}
plot(xc, yc, x, y, color);
}
p=ROUND(b2*(x+0.5)*(x+0.5)+a2*(y-1)*(y-1)- a2*b2);
//b2(x+1/2)2+a2(y-1)2 – a2b2
while (y>0){
y–;
fy -= 2*a2; // 2a2
if (p>=0)
p+=a2*(3 – 2*y); p =p + a2(3-2y)
else{
x++;
fx += 2*b2; // 2b2
p += b2*(2*x+2) + a2*(-2*y +3); //p=p + b2(2x +2) +a2(-2y +3)
}
plot(xc, yc, x, y, color);
}
}
void main(){
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, “”);
Mid_Ellipse(getmaxx() / 2, getmaxy() / 2, 150, 80, 4);
getch();
closegraph();
}
2.2.8. Giải thuật sinh ký tự
Trong màn hình text, truy xuất các ký tự trên màn hình được hỗ trợ bởi phần
cứng. Các ký tự được lưu trữ trong bộ nhớ ROM, dưới dạng bitmap hay các ma
trận ảnh. Phần cứng sẽ đưa ký tự lên màn hình tại ví trí xác định, tính toán cuốn
trang và xuống dòng.
38
Vector: định nghĩa các ký tự theo những đường cong mềm bao ngoài của chúng,
tốn kém về mặt tính toán.
– phức tạp (tính toán phương trình)
– lưu trữ gọn nhẹ
– các phép biến đổi dựa vào công thức biến đổi
– Kích thước phụ thuộc vào môi trường (không có kích thước
– cố định)
Hình 2.18 Ký tự vector
+ Bitmap: định nghĩa mỗi ký tự với 1 font chữ cho trước là 1 ảnh bitmap hình chữ
nhật nhỏ.
– Đơn giản trong việc sinh ký tự (copypixel)
– Lưu trữ lớn
– Kích thước không đổi
Hình 2.18 Ký tự bitmap
2.2.9. Giải thuật sinh đa giác (Polygon)
a. Thuật giải vẽ đường bao đa giác
Việc biểu diễn đa giác thông qua:
– Tập các đoạn thẳng
– Tập các điểm thuộc đa giác
Các loại đa giác:
Hình 2.19 Các loại đa giác
39
là đa giác có đường thẳng nối bất ký 2 điểm bên trong nào của đa giác
đều nằm trọn trong đa giác. Đa giác không lồi là đa giác lõm.
b. Các thuật toán tô miền kín đa giác
Các vùng tô là một trong những đối tượng đồ họa cơ sở được hầu hết các
công cụ lập trình đồ họa hỗ trợ. Có hai dạng vùng tô thường gặp đó là : tô bằng
một màu thuần nhất (solid fill) hay tô theo một mẫu tô (fill-pattern) nào đó.
Một vùng tô thường được xác định bởi một đường khép kín nào đó gọi là
đường biên. Một trong những dạng đường biên đơn giản nhất đó là đa giác.
Để tô màu một vùng tô, người ta thường chia làm hai công đoạn : công đoạn
thứ nhất là xác định các điểm nào để tô và công đoạn còn lại đơn giản hơn đó là
quyết định tô các điểm đó bằng giá trị màu nào. Công đoạn thứ hai chỉ thực sự
phức tạp nếu ta tô theo một mẫu tô nào đó không phải là tô thuần một màu.
Có hai cách tiếp cận chính để tô màu một vùng tô đối với thiết bị hiển thị
dạng điểm đó là : tô theo dòng quét (scan-line fill) và tô dựa theo đường biên
(boundary fill).
Phương pháp tô theo dòng quét sẽ xác định các phần giao của các dòng quét
kế tiếp nhau với đường biên của vùng tô, sau đó sẽ tô màu các điểm thuộc về phần
giao này. Cách tiếp cận này thường được dùng để tô màu các đa giác, đường tròn,
ellipse, và một số đường cong đơn giản khác. Phương pháp tô dựa theo đường
biên sẽ bắt đầu từ một điểm ở bên trong vùng tô và từ đó loang dần ra cho tới khi
ta gặp các điểm biên. Cách tiếp cận này thường được dùng cho các vùng tô có
dạng đường biên phức tạp hơn.
40
kế và cài đặt hàm vẽ hình chữ nhật, đường gấp khúc, đa giác từ hàm
vẽ đoạn thẳng.
2. Trong phần trình bày thuật toán Bresenham để vẽ đường thẳng, hãy cho
biết với cách đặt d1, d2 như vậy, có khi nào d1, d2 lấy giá trị âm hay không ?
Nếu có hãy cho ví dụ minh họa.
3. Tại sao phải so sánh ip với giá trị 0 trong các thuật toán Bresenham,
MidPoint. Bản chất của việc so sánh này là gì?
4. Cài đặt các thuật toán DDA, Bresenham, MidPoint vẽ đoạn thẳng qua hai
điểm cho trước trong trường hợp tổng quát với hệ số góc m lấy giá trị bất
kì.
5. Người ta có thể cải thiện tốc độ cài đặt thuật toán vẽ đoạn thẳng bằng cách
chỉ cần vẽ một nửa đoạn thẳng, phần còn lại lấy đối xứng nửa đoạn thẳng
đã vẽ. Hãy cài đặt minh họa.
6. Cho biết các điểm nguyên vẽ phát sinh khi sử dụng các thuật toán DDA,
MidPoint cho các đoạn thẳng đi qua các điểm lần lượt là A1(5,10),
B1(15,17); A2(-2,3), B2(-12,7); A3(6,3), B3(9,13); A4(2,4), B4(-5,14);
A5(0,10), B5(15,10); A6(5,-1), B6(5,-11);
7. Trình bày thuật toán MidPoint vẽ cung tròn 1/8, bán kính R, tâm I(xC, yC)
và được giới hạn bởi :
8. Sử dụng ý tưởng của thuật toán Bresenham, xây dựng thuật toán vẽ đường
tròn có tâm là gốc tọa độ, bán kính R.
9. Giải thích tại sao chỉ chọn cung 1/8 để vẽ rồi lấy đối xứng mà không mở
rộng cho cung 1/16 hay 1/32.
10.Giải thích tại sao có thể thay công thức p0 = 5/4 – R bằng công thức p0 = 1-
R khi cài đặt thuật toán MidPoint vẽ đường tròn.
11.Trình bày thuật toán Bresenham vẽ đường tròn bán kính R, từ đó nhận xét
về cách tiếp cận của thuật toán MidPoint có gì lợi hơn so với thuật toán
Bresenham.
12.Xây dựng và cài đặt thuật toán vẽ ellipse có tâm là gốc tọa độ với bán kính
trục chính, bán kính trục phụ lần lượt là A, B.
41
≤≤
≤≤
2
2
0
2
2
Ry
RxR
toán vẽ đường tròn để xây dựng thủ tục vẽ một cung tròn
(arc) tâm (x,y) bán kính R, biết góc bắt đầu và kết thúc của cung lần lượt là
α, β..
14.Dựa vào thuật toán vẽ ellipse để xây dựng thủ tục vẽ một cung (pie slice)
tâm (x,y) và bán kính trục chính, trục phụ lần lượt là A, B, góc bắt đầu và
kết thúc của cung lần lượt là α, β.
15.Hãy tìm hiểu các cài đặt tối ưu hơn cho các thuật toán vẽ đoạn thẳng và vẽ
đường tròn, ellipse.
16.Xây dựng và cài đặt thuật toán vẽ các parabol
A
x
y
2
=, và Axy =2
với A là
số nguyên bất kì.
17.Xây dựng và cài đặt thuật toán vẽ các hyperbol 12
2
2
2
=−
B
y
A
x
, và
12
2
2
2
−=−
B
y
A
x
với A, B là các số nguyên bất kì.
18.Xây dựng và cài đặt thuật toán vẽ các đường cong sau :
a. )sin( θω += xAy, với A nguyên.
b. )cos( θω += xAy, với A nguyên.
c. 2
Axy =, với A nguyên.
d. Axy /3
=, với A nguyên.
e. 042422
=−+++ yxyx
f. 021618259 22
=−−+ xyx
g. 0100100 2
=−+ xxy
h. 07425 =−−+ yxxy
19.Các bước chính của các thuật toán vẽ đường dạng ( )xfy =. Minh họa cho
các trường hợp vẽ đường thẳng, đường tròn.
20.Bản chất của quá trình vẽ các đường đơn giản theo từng điểm là rời rạc hóa
và nguyên hóa. Hãy cho biết lí do tại sao, bước nào trong thuật toán tổng
quát thể hiện hai ý trên. Minh họa bằng các đường đã học.
21.Các thuật toán vẽ đường bao hàm rất lớn kĩ thuật tối ưu hóa chương trình.
Hãy minh họa qua các đối tượng đã học.
22.Ý nghĩa của danh sách kích hoạt AET trong thuật toán tô màu đa giác theo
dòng quét. Cấu trúc dữ liệu và nguyên tắc hoạt động của AET.
42
toán tô màu đa giác theo dòng quét bằng cách dùng xâu liên
kết thay vì dùng mảng như cài đặt minh họa.
24.Cài đặt thuật toán tô màu theo đường biên không dùng đệ quy.
25.Xây dựng và cài đặt thuật tô màu đường tròn, ellipse.
43
phép biến đổi đồ hoạ
3.1. Các phép biến đổi hình học hai chiều
Một trong những ưu điểm quan trọng của đồ họa là cho phép dễ dàng thao
tác lên các đối tượng đã được tạo ra. Một nhà quản lí có nhu cầu thu nhỏ các biểu
đồ trong một báo cáo, một kiến trúc sư muốn nhìn tòa nhà ở những góc nhìn khác
nhau, một nhà thiết kế muốn quan sát và chỉnh sửa các mẫu đối tượng trong quá
trình thiết kế, … Tất cả các thao tác này có thể được hỗ trợ một cách dễ dàng nhờ
vào các phép biến đổi hình học. Các phép biến đổi hình học sẽ làm thay đổi mô tả
về tọa độ của các đối tượng, từ đó làm cho đối tượng bị thay đổi về hướng, kích
thước và hình dạng. Các phép biến đổi hình học cơ sở bao gồm : tịnh tiến
(translation), quay (rotation) và biến đổi tỉ lệ (scaling). Ngoài ra một số phép biến
đổi khác cũng thường được áp dụng đó là phép đối xứng (reflection) và biến dạng
(shearing).
Có hai quan điểm về phép biến đổi hình học đó là : biến đổi đối tượng
(object transformation) và biến đổi hệ tọa độ (coordinate transformation). Biến đổi
đối tượng là thay đổi tọa độ của các điểm mô tả nó theo một quy tắc nào đó, còn
biến đổi hệ tọa độ là tạo ra một hệ tọa độ mới và tất cả các điểm mô tả đối tượng
sẽ được chuyển về hệ tọa độ mới. Hai cách này có những mối liên hệ chặt chẽ với
nhau và mỗi cách đều có những lợi thế riêng. Chúng ta sẽ bàn về phép biến đổi đối
tượng trước.
3.1.1. Phép biến đổi Affine (Affine Transformations)
Phép biến đổi Affine là phép biến đổi tuyến tính tọa độ điểm đặc trưng của đối
tượng thành tập tương ứng các điểm mới để tạo ra các hiệu ứng cho toàn đối
tượng.
Ví dụ: phép biến đổi tọa độ với chỉ 2 điểm đầu cuối của đoạn thẳng tạo thành 2
điểm mới mà khi nối chúng với nhau tạo thành đoạn thẳng mới. Các điểm nằm
trên đoạn thẳng sẽ có kết quả là điểm nằm trên đoạn thẳng mới với cùng phép biến
đổi thông qua phép nội suy.
3.1.2. Các phép biến đổi đối tượng
Một phép biến đổi hai chiều sẽ biến đổi điểm P trong mặt phẳng thành điểm
có tọa độ mới Q theo một quy luật nào đó. Về mặt bản chất, một phép biến đổi
điểm là một ánh xạ T được định nghĩa :
( ) ( )’,’,
: 22
yxQyxP
T
RR →
44
T là hàm số ( )yxT, theo hai biến ( )yx, :
( )
( )
=
=
yxgy
yxfx
,’
,’
Phép biến đổi affine là phép biến đổi với ( )yxf, và ( )yxg, là các hàm tuyến
tính. Phép biến đổi này có dạng :
0,,,,,,,
‘
‘
≠−∈
++=
++=
bcadRfedcba
fdybxy
ecyaxx
.
Ta chỉ khảo sát các phép biến đổi affine nên từ nay về sau ta dùng cụm từ “phép
biến đổi” thay cho “phép biến đổi affine”.
Phép tịnh tiến
Để tịnh tiến một điểm ( )yxP, từ vị trí này sang vị trí khác trong mặt phẳng, ta
cộng thêm các giá trị mô tả độ dời vào các tọa độ của P. Nếu gọi xtr và ytr lần lượt
là độ dời theo trục hoành và trục tung thì tọa độ của điểm mới ( )’,’ yxQ sẽ là :
+=
+=
y
x
tryy
trxx
‘
‘
,
( )yx trtr, còn được gọi là vector tịnh tiến hay vector độ dời.
Chúng ta có thể dịch chuyển toàn bộ một đối tượng bằng cách áp dụng quy
tắc trên cho mọi điểm thuộc đối tượng. Để tịnh tiến một đoạn thẳng, đơn giản chỉ
cần tịnh tiến hai điểm đầu và cuối của nó rồi sau đó vẽ lại đoạn thẳng nối hai điểm
mới. Với đa giác, ta tịnh tiến các đỉnh của nó sau đó vẽ lại đa giác với các đỉnh
mới. Một cách tương tự, để tịnh tiến các đối tượng như đường tròn, ellipse, ta tịnh
tiến tâm của chúng tới vị trí mới rồi vẽ lại.
Hình 3.1 – Phép tịnh tiến một điểm (a)
và đối tượng với vector tịnh tiến(-4,2) (b)
Phép biến đổi tỉ lệ
Phép biến đổi tỉ lệ làm thay đổi kích thước đối tượng. Để co hay giãn tọa độ
của một điểm ( )yxP, theo trục hoành và trục tung lần lượt là xs và ys, ta nhân xs và
ys lần lượt cho các tọa độ của P.
=
=
ysy
xsx
y
x
.’
.’
, xs và ys được gọi là các hệ số tỉ lệ.
45
P
x
y
Q
tr x
tr y
(a)
y
x
(2,3) (4,3)
(6,1) (8,1)
(b)
trị xs, ys nhỏ hơn 1, phép biến đổi sẽ thu nhỏ đối tượng, ngược
lại khi các giá trị này lớn hơn 1, phép biến đổi sẽ phóng lớn đối tượng. Khi xs, ys
bằng nhau, ta gọi đó là phép đồng dạng (uniform scaling), phép đồng dạng là phép
biến đổi bảo toàn tính cân xứng của đối tượng.
Tâm tỉ lệ là điểm không bị thay đổi qua phép biến đổi tỉ lệ. Phép biến đổi tỉ lệ
mô tả như trên còn gọi là phép biến đổi tỉ lệ quanh gốc tọa độ vì có tâm tỉ lệ là gốc
tọa độ. Nhận xét rằng khi phép biến đổi tỉ lệ thu nhỏ đối tượng, đối tượng sẽ được
dời về gần gốc tọa độ hơn, tương tự khi phóng lớn đối tượng, đối tượng sẽ được
dịch chuyển xa gốc tọa độ hơn.
Hình 3.2 – Phép biến đổi tỉ lệ với 5.2=xs và 5.0=ys
Phép quay
Phép quay làm thay đổi hướng của đối tượng. Một phép quay đòi hỏi phải có
tâm quay, góc quay. Góc quay dương thường được quy ước là chiều ngược chiều
kim đồng hồ. Ta có công thức biến đổi của phép quay điểm ( )yxP, quanh gốc tọa
độ một góc α :
+=
−=
yxy
yxx
.cos.sin’
.sin.cos’
αα
αα
Hình 3.3 – Phép quay một đối tượng quanh gốc tọa độ một góc 600
Biểu diễn ma trận của phép biến đổi
Trong nhiều ứng dụng đồ họa, người dùng thường xuyên có nhu cầu thực
hiện nhiều phép biến đổi hình học khác nhau trên một đối tượng để tạo ra các hiệu
quả như mong muốn. Ví dụ trong các ứng dụng thiết kế, chúng ta cần phải thực
hiện nhiều phép tịnh tiến, quay, tỉ lệ để có thể khớp từng phần của đối tượng vào
đúng vị trí của chúng, hay sau khi thực hiện các phép biến đổi nhưng không được
ưng ý, người dùng muốn trở lại hiện trạng trước khi biến đổi (undo), … Do đó cần
46
y
x
(2,3) (4,3)
(10,1.5)(5,1.5)
y
x
cách nào đó để có thể xử lí dãy các phép biến đổi trên được nhanh
chóng và hiệu quả.
Nếu ta biểu diễn tọa độ của điểm ( )yxP, và ( )’,’ yxQ dưới dạng các vector
dòng lần lượt là ( )yx và ( )” yx thì các phép biến đổi tịnh tiến, tỉ lệ, quay có thể
được biểu diễn dưới dạng ma trận như sau :
Phép tịnh tiến
( ) ( ) ( )yx trtryxyx +=”
hay TPQ += với ( )yx trtrT =
Phép biến đổi tỉ lệ
( ) ( )
=
y
x
s
s
yxyx
0
0
”
hay SPQ .= với
=
y
x
s
s
S
0
0
Phép quay quanh gốc tọa độ
( ) ( )
−
=
αα
αα
cossin
sincos
” yxyx
hay RPQ .= với
−
=
αα
αα
cossin
sincos
R
Với cách biểu diễn này, chúng ta sẽ gặp khó khăn khi muốn kết hợp các phép
biến đổi lại với nhau vì biểu diễn của phép tịnh tiến khác với dạng của các phép
biến đổi tỉ lệ và quay. Chính vì vậy mà cần phải có một cách nào đó để biểu diễn
ba phép biến đổi này về một dạng duy nhất để có thể dễ dàng xử lí sau này.
3.2. Toạ độ đồng nhất và các phép biến đổi
3.2.1. Toạ độ đồng nhất
Tọa độ thuần nhất của một điểm trên mặt phẳng được biểu diễn bằng bộ ba
số tỉ lệ ( )hyx hh ,, không đồng thời bằng 0 và liên hệ với các tọa độ ( )yx, của
điểm đó bởi công thức :
h
y
y
h
x
x hh
== ,
Nếu một điểm có tọa độ thuần nhất là ( )zyx ,, thì nó cũng có tọa độ thuần nhất
là ( )zhyhxh .,.,. trong đó h là số thực khác 0 bất kì. Tọa độ thuần nhất của một điểm
trong không gian ba chiều hay có số chiều lớn hơn cũng được xác định một cách
tương tự.
47
học, việc đưa tọa độ thuần nhất vào là do sự cần thiết phải bổ
sung cho mặt phẳng Euclid các điểm xa vô tận ( )0,, yx (điểm phi chính) có tọa độ
thứ ba bằng 0, điều này dẫn đến khái niệm mặt phẳng xạ ảnh trong hình học xạ
ảnh. Trong hệ tọa độ thuần nhất, các điểm xa vô tận không đóng một vai trò gì đặc
biệt so với các điểm khác của mặt phẳng. Với các phép biến đổi hình học đang
khảo sát, nếu một điểm được biểu diễn dưới dạng tọa độ thuần nhất, cả ba phép
biến đổi trên đều được biểu diễn dưới dạng tích các ma trận. Điều này giúp cho
việc khảo sát các tính chất và sự kết hợp của các phép biến đổi này được thuận
tiện do mỗi phép biến đổi được đại diện bởi một ma trận duy nhất.
Bộ ba các tọa độ thường biểu diễn các điểm trong không gian ba chiều,
nhưng ở đây ta sử dụng chúng để biểu diễn các điểm trong không gian hai chiều.
Mối liên hệ ở đây là : nếu chúng ta xét tất cả các bộ ba tọa độ thuần nhất biểu diễn
cho cùng một điểm, nghĩa là bộ ba số có dạng (h.x, h.y, h.z), với 0≠h, chúng ta sẽ
nhận được một đường thẳng trong không gian ba chiều. Để đơn giản hóa chúng ta
có thể chọn h=1, lúc này mỗi điểm ( )yxP, sẽ được biểu diễn dưới dạng tọa độ
thuần nhất là ( )1,, yx .
3.2.2. Phép biến đổi với toạ độ đồng nhất
Phép tịnh tiến
( ) ( )
=
1
010
001
.11”
yx trtr
yxyx
hay ( )yxT trtrMPQ ,.= với ( )
=
1
010
001
,
yx
yxT
trtr
trtrM
Phép biến đổi tỉ lệ
( ) ( )
=
100
00
00
.11” y
x
s
s
yxyx
hay ( )yxS ssMPQ ,.= với ( )
=
100
00
00
, y
x
yxS s
s
ssM
Phép quay quanh gốc tọa độ
( ) ( )
−=
100
0cossin
0sincos
.11” αα
αα
yxyx
48
.= với ( )
−=
100
0cossin
0sincos
αα
αα
αRM
3.3. Các phép biến đổi hình học ba chiều
Các đối tượng trong thế giới thực phần lớn là các đối tượng ba chiều, nên
việc thể hiện các đối tượng ba chiều trên máy tính là một công việc hết sức cần
thiết để đưa tin học gần gũi với thực tế hơn. Cũng giống như các cách biểu diễn
các đối tượng ba chiều trên mặt phẳng khác (như của máy ảnh, camera, … ), biểu
diễn bằng máy tính cũng phải tuân theo các quy luật về phối cảnh, sáng, tối, …
nhằm giúp người xem có thể tưởng tượng lại hình ảnh một cách gần đúng nhất.
Ngoài ra biểu diễn trên máy tính có ưu thế giúp ta có thể quan sát đối tượng ở
nhiều góc cạnh khác nhau, ở các khoảng cách khác nhau.
Chương này sẽ giới thiệu một số kĩ thuật biểu diễn các đối tượng ba chiều
trên máy tính, từ các đối tượng đơn giản như các hình khối, các đa diện, … đến các
đối tượng tương đối phức tạp như các mặt đã được tìm hiểu ở các chương trước.
Tổng quan về đồ họa ba chiều
Khi chúng ta mô hình hóa và hiển thị một cảnh ba chiều, ta cần phải xem xét
rất nhiều khía cạnh và vấn đề khác nhau chứ không đơn giản là thêm vào tọa độ
thứ ba cho các đối tượng. Bề mặt đối tượng có thể xây dựng bởi nhiều tổ hợp khác
nhau của các mặt phẳng và các mặt cong. Ngoài ra, đôi khi chúng ta cũng cần mô
tả một số thông tin về bên trong các đối tượng. Các công cụ hỗ trợ đồ họa
(graphics package) thường cung cấp một số hàm hiển thị các thành phần bên
trong, những đường nét tiêu biểu hoặc hiển thị một phần của đối tượng ba chiều
(solid object). Ngoài ra, các phép biến đổi hình học thường được sử dụng nhiều
hơn và đa dạng hơn trong đồ họa ba chiều so với trong đồ họa hai chiều. Phép biến
đổi hệ quan sát trong không gian ba chiều phức tạp hơn nhiều so với trong không
gian hai chiều do chúng ta phải chọn lựa nhiều tham số hơn khi mô tả một cảnh ba
chiều sẽ xuất hiện trên màn hình như thế nào.
Các mô tả về một cảnh ba chiều phải đi qua một quy trình xử lí gồm nhiều
công đoạn như phép biến đổi hệ tọa độ quan sát và phép chiếu chuyển cảnh từ hệ
tọa độ quan sát ba chiều xuống hệ tọa độ thiết bị hai chiều. Những phần nhìn thấy
được của cảnh, ứng với một hệ quan sát được chọn nào đó, phải được xác định và
cuối cùng, các thuật toán vẽ mặt sẽ được áp dụng nhằm tạo ra hình ảnh trung thực
(gần với thực tế) của cảnh.
Sơ lược về quy trình hiển thị
49
lí thông tin trong đồ họa ba chiều là một chuỗi các bước nối
tiếp nhau, kết quả của mỗi bước sẽ là đầu vào của bước tiếp theo.
Quy trình bắt đầu bằng việc xây dựng các mô hình đối tượng. Các mô hình
này thường được mô tả trong không gian ba chiều (x,y,z). Các mô hình thường thể
hiện vật thể (solid) hoặc bề mặt (boundaries) của đối tượng. Như vậy ta có hai
kiểu mô hình hóa. Trong solid modeling các đối tượng đồ họa cơ sở thường được
dùng để mô tả các đối tượng có thể tích (volume). Trong boundary
representations(B-reps), các đối tượng được định nghĩa bởi bề mặt của chúng.
Các mô hình thường được biểu diễn trong một hệ tọa độ cục bộ, mà ta gọi là
hệ tọa độ đối tượng. Trong hệ tọa độ này chỉ có bản thân đối tượng được định
nghĩa, vì vậy gốc tọa độ và đơn vị đo lường thường được chọn sao cho việc biểu
diễn đối tượng tiện lợi nhất.
Bước đầu tiên trong quy trình hiển thị là biến đổi đối tượng từ không gian đối
tượng (object-space) vào một không gian chung gọi là không gian thực (world
space). Trong không gian này các đối tượng, nguồn sáng, và người quan sát cùng
tồn tại. Bước này được gọi là giai đoạn biến đổi mô hình (modeling
transformation).
Bước tiếp theo là một bước tối ưu hóa. Trong giai đoạn loại bỏ đơn giản
(trivial rejection) ta cần loại trừ tất cả các đối tượng không thể nhìn thấy. Điều này
giúp chúng ta tránh được việc xử lí một số phần không cần thiết của cảnh (scene)
mà ta đang chuẩn bị hiển thị ở các bước sau.
Tiếp theo ta phải chiếu sáng (illumination) các đối tượng có thể nhìn thấy
được bằng cách gán cho chúng màu sắc dựa trên các đặc tính của các chất tạo nên
vật và các nguồn sáng tồn tại trong cảnh.
Sau khi chiếu sáng, ta phải thực hiện một phép biến đổi hệ tọa độ để đặt vị trí
quan sát (viewing position) về gốc tọa độ và mặt phẳng quan sát (viewing plane)
về một vị trí mong ước. Bước này gọi là bước đổi hệ quan sát. Sau bước này, các
đối tượng được chuyển từ không gian thực sang không gian quan sát (eye space).
Trong không gian quan sát, ta phải thực hiện việc xén các đối tượng trong
cảnh để cảnh nằm gọn trong một phần không gian chóp cụt mà ta gọi là viewing
frustum. Bước này sẽ loại bỏ hoàn toàn các đối tượng (các mảnh đối tượng) không
nhìn thấy được trong ảnh.
Bước tiếp theo ta sẽ chiếu các đối tượng xuống mặt phẳng hai chiều. Bước
Projection thực hiện phép biến đổi từ không gian quan sát sang không gian màn
hình (screen-space).
50
rạc hóa (rasterization) ta sẽ chuyển đối tượng thành các pixel.
Cuối cùng, toàn cảnh sẽ được hiển thị lên màn hình.
MÔ HÌNH KHUNG NỐI KẾT (WIREFRAME MODEL)
Khái niệm
Một phương pháp thông dụng và đơn giản để mô hình hóa đối tượng là mô
hình khung nối kết.
Một mô hình khung nối kết gồm có một tập các đỉnh và tập các cạnh nối
giữa các đỉnh đó. Khi thể hiện bằng mô hình này, các đối tượng ba chiều có vẻ
rỗng và không giống thực tế lắm. Để hoàn thiện hơn, người ta dùng các kĩ thuật
tạo bóng và loại bỏ các đường và mặt khuất. (Chúng ta sẽ đề cập vấn đề này ở các
chương sau). Tuy nhiên vẽ bằng mô hình này thường nhanh nên người ta thường
dùng nó trong việc xem phác thảo (preview) các đối tượng, đặc biệt là trong các hệ
CAD.
Biểu diễn các vật thể ba chiều bằng mô hình khung nối kết
Với mô hình khung nối kết, hình dạng của đối tượng ba chiều được biểu diễn
bằng hai danh sách (list) : danh sách các đỉnh (vertices) và danh sách các cạnh
(edges) nối các đỉnh đó. Danh sách các đỉnh cho biết thông tin hình học đó là vị
trí các đỉnh, còn danh sách các cạnh xác định thông tin về sự kết nối, nó cho biết
cặp các đỉnh tạo ra cạnh. Chúng ta hãy quan sát một vật thể ba chiều được biểu
diễn bằng mô hình khung nối kết như sau :
Bảng danh sách các cạnh và đỉnh biểu diễn vật thể
Vertex List Edge List
Vertex x y z Edge Vertex1 Vertex2
1 0 0 0 back
side
1 1 2
2 0 1 0 2 2 3
3 0 1 1 3 3 4
4 0 0.5 1.5 4 4 5
5 0 0 1 5 5 1
6 1 0 0 front
side
6 6 7
7 1 1 0 7 7 8
8 1 1 1 8 8 9
9 1 0.5 1.5 9 9 10
10 1 0 1 10 10 6
11 1 6
51
3 8
14 4 9
15 5 10
16 2 5
17 1 3
Có nhiều cách để đặc tả mô hình khung nối kết trên máy tính như dùng xâu,
mảng, … và mỗi cách đều có các ưu điểm riêng trong từng ứng dụng cụ thể. Ở
đây ta minh họa các biểu diễn mô hình khung nối kết bằng cấu trúc dữ liệu mảng
như sau :
#define MAXVERTS50 //số đỉnh tối đa có thể biểu diễn
#define MAXEDGES 100 //số cạnh tối đa
typedef struct {
float x, y, z;
} POINT3D;
typedef struct {
int NumVerts; //Số đỉnh trong mô hình
int NumEdges; //Số cạnh trong mô hình
POINT3D Vert[MaxVerts];
int Edge[MaxEdges][2];
}WIREFRAME;
52
thể ba chiều được biểu diễn bằng mô hình khung nối kết
Ngoài ra, đôi khi trong mô hình wireframe người ta còn mô tả các mặt
(phẳng) của đối tượng. Mỗi mặt được định nghĩa bởi một đa giác bao. Ví dụ, đối
tượng trong hình 3.1 có 7 mặt.
3.3.1.Biểu diễn điểm trong không gian 3 chiều
Một số khái niệm liên quan
Phép biến đổi affine
Phép biến đổi affine là phép biến đổi tuyến tính, khả nghịch. Phép biến đổi
này bảo toàn tính song song của các đường thẳng cũng như bảo toàn tính tỉ lệ về
khoảng cách của các đoạn thẳng. Tuy nhiên, phép biến đổi này không bảo toàn
góc nghiêng và chiều dài các đoạn thẳng. Các phép biến đổi này cũng bảo toàn tỉ
lệ về khoảng cách (xem thêm chương 3)
Các hệ trục tọa độ theo quy ước bàn tay phải và bàn tay trái
Hình 3.5 – Các hệ tọa độ theo quy ước bàn tay phải (a)
và quy ước bàn tay trái (b)
Hệ tọa độ Descartes ba chiều có thể định nghĩa theo quy ước bàn tay trái
hoặc bàn tay phải (xem hình 3.2).
53
z
1
1
x y
1
1
2
3
45
6
7
8
9
10
y
xz
(a)
zyx =∧
x
y
z
zxy =∧
(b)
độ theo quy ước bàn tay phải là hệ tọa độ với các trục x, y, z thỏa điều
kiện: Nếu để bàn tay phải sao cho ngón cái hướng cùng chiều với trục z, khi nắm
tay lại, chiều các ngón tay chuyển động theo hướng từ trục x đến trục y.
Hệ tọa độ theo quy ước bàn tay trái là hệ tọa độ với các trục x, y, z thỏa điều
kiện: Nếu để bàn tay trái sao cho ngón cái hướng cùng chiều với trục z, khi nắm
tay lại, chiều các ngón tay chuyển động theo hướng từ trục x đến trục y.
Hệ tọa độ thuần nhất
Trong hệ tọa độ thuần nhất, mỗi điểm (x,y,z) trong không gian Descartes
được biểu diễn bởi một bộ bốn tọa độ trong không gian 4 chiều thu gọn
( )hhzhyhx ,,,. Để tiện lợi, người ta thường chọn h=1. Như vậy, một điểm (x, y, z)
trong hệ tọa độ Descartes sẽ biến thành điểm (x, y, z, 1) trong hệ tọa độ thuần
nhất; còn điểm (x, y, z, w) trong hệ tọa độ thuần nhất (với w ≠ 0) sẽ tương ứng với
điểm (x/w, y/w, z/w) trong hệ tọa độ Descartes (xem hình 3.3).
Hình 3.6 – Các điểm trong hệ tọa độ thuần nhất và Descartes
Dạng ma trận của phép biến đổi affine trong hệ tọa độ thuần nhất
Hình 3.7 – Daïng toång quaùt cuûa pheùp bieán ñoåi affine ba chieàu
Phép biến đổi affine ba chiều biến điểm P thành điểm Q có dạng : MPQ .= ,
trong đó ( )1,,, zyx QQQQ =
, ( )1,,, zyx PPPP =
và M là ma trận biến đổi 4×4 trong hệ
tọa độ thuần nhất ( )zyx trtrtrtr ,,=
là vector tịnh tiến.
54
x
w
w=1
homogeneous
(x,y,z,w)
projected
homogeneous
(x/w,y/w,z/w,1)
Descartes
(x/w,y/w,z/w)
( ) ( )
=
1
0
0
0
.11”’
zyx trtrtr
ihg
fed
cba
zyxzyx
tæ leä, quay, bieán daïng tònh tieán
tiến
Vector tịnh tiến tr trong phép biến đổi ba chiều có một tác động rất trực
quan: mỗi điểm được dịch đi một khoảng là trx, try, trz theo ba trục. Ma trận M
cho phép tịnh tiến có dạng như sau:
=
1
0100
0010
0001
zyx
zyx
trtrtr
),tr,trtr(tr (3.1)
3.3.3. Phép tỉ lệ
Phép biến đổi tỉ lệ trong ba chiều là một sự mở rộng của phép biến đổi tỉ lệ
trong hai chiều :
=
1000
000
000
000
z
y
x
zyx
s
s
s
),s,sS(s (3.2)
Trong đó các hằng số zyx sss ,, là các hệ số tỉ lệ tương ứng theo các trục x, y, z.
Hình 3.8 – Phép biến đổi tỉ lệ
Như hình 3.6, đối tượng được phóng to gấp đôi, đồng thời với tác động của
phép biến đổi làm cho đối tượng bị đẩy ra xa gốc tọa độ hơn.
Khi các hệ số tỉ lệ zyx sss ,, bằng nhau, ta có phép biến đổi đồng dạng.
Trong phép biến đổi ( )zyx sssS ,,, gốc tọa độ O sẽ có ảnh là chính nó. Ta gọi
gốc tọa độ là điểm bất động (fixed point) của S, hay còn gọi O là tâm của phép
biến đổi.
Tổng quát hơn, ta có thể mô tả một phép biến đổi tỉ lệ theo một tâm ( )fff zyx ,,
bất kì bằng một dãy ba phép biến đổi sau:
Tịnh tiến điểm bất động ( )fff zyx ,, về gốc tọa độ.
Thực hiện phép biến đổi tỉ lệ theo công thức (6.2).
Tịnh tiến ngược điểm bất động từ gốc tọa độ trở về vị trí ban đầu.
55
y
z
x
hợp ba bước biến đổi trên ta có được ma trận biến đổi của phép
biến đổi tỉ lệ theo tâm ( )fff zyx ,, với hệ số tỉ lệ zyx sss ,, là:
( ) ( ) ( )
=
1111
000
000
000
fzfyfx
z
y
x
zyxf
z-sy-sx-s
s
s
s
),s,s(sS (3.3)
3.3.4. Phép biến dạng
Biến dạng theo bất kì trục tọa độ nào cũng bị ảnh hưởng bởi tọa độ ứng với
hai trục còn lại. Ma trận của phép biến dạng như sau:
=
1000
01
01
01
yzxz
zyxy
zxyx
hh
hh
hh
Sh (3.4)
Ta có mối quan hệ Qx với P : zxzyxyxx PhPhPQ ++= .
Ở đây có thể hiểu hxy là lượng mà tọa độ y của P tác động lên tọa độ x của Q.
Hình 3.9 – Phép biến dạng theo trục x : hxy= hxz = 1, các hệ số khác bằng 0
Tương tự như trong trường hợp phép biến đổi tỉ lệ, phép biến dạng Sh (6.4)
cũng có điểm bất động là gốc tọa độ O. Ta cũng có thể xây dựng phép biến dạng
với tâm biến dạng tại một điểm ( )fff zyx ,, bất kì.
Ma trận biến đổi của phép biến dạng với tâm tại ( )fff zyx ,, là:
−−−
=
1
01
01
01
zyfzxfyzfyxfxzfxyf
yzxz
zyxy
zxyx
hyh-xhzh-xhzh-y
hh
hh
hh
Sh (
3.3.5. Phép lấy đối xứng
Đối xứng trục ox.
56
y
z
x
y
z
x
mặt xoy.
−
=
1000
0100
0010
0001
Mox
Đối xứng trục gốc tọa độ.
−
−
−
=
1000
0100
0010
0001
Mox
3.3.6. Phép quay 3 chiều
Phép quay quanh một trục tọa độ
Khác với phép quay trong hai chiều quanh một điểm bất kì, trong ba chiều ta
có phép quay quanh một trục tọa độ. Ở đây ta sử dụng hệ tọa độ theo quy ước bàn
tay phải và quy định chiều quay dương là ngược chiều kim đồng hồ.
Ta có các ma trận biểu diễn các phép quay quanh trục x, y, z một góc θ lần
lượt là R(z, θ), R(y,θ), R(x, θ):
Quay quanh trục z :
( )
=
1000
0100
00cossin
00sincos
θθ-
θθ
z, θR (3.6)
57
y
z
x
Phép quay quanh trục z
Quay quanh trục y :
Hình 3.11 – Phép quay quanh trục y
( )
=
1000
0cos0sin
0010
0sin0cos
θθ
θ-θ
y, θR (3.7)
Quay quanh trục x :
( )
=
1000
0cossin-0
0sincos0
0001
x,R
θθ
θθ
θ (3.8)
58
x
z
y
z
y
x
Phép quay quanh trục x
Nhận xét rằng các giá trị nằm trên dòng và cột tương ứng với trục x trong ma
trận R(x,θ) sẽ có giá trị là 0 ngoại trừ giá trị nằm trên đường chéo chính là 1. Điều
này đảm bảo cho tọa độ x của các điểm là không bị thay đổi qua phép biến đổi.
Nhận xét này cũng tương tự cho trường hợp các ma trận còn lại.
Ghi chú:
Các định nghĩa về chiều quay được dùng chung cho cả hệ tọa độ theo quy
ước bàn tay phải và bàn tay trái. Cụ thể chiều dương được định nghĩa như sau:
Quay quanh trục x: từ trục dương y đến trục dương z.
Quay quanh trục y: từ trục dương z đến trục dương x.
Quay quanh trục z: từ trục dương x đến trục dương y.
59
xác định chiều quay dương
Phép quay quanh một trục bất kì
Phép quay này được biểu diễn qua sự kết hợp của các hàm. Hai ví dụ sau sẽ
cho thấy rỏ điều này.
Phép quay quanh một trục
Giả sử trục quay đi qua hai điểm P0P1 nào đó với phương được biểu diễn bởi
vector đơn vị k. Quay điểm (x, y, z) quanh trục k theo một góc θ sẽ biến thành
điểm (x’, y’, z’) (xem hình 3.12).
60
y
x
z
(a)
y
z
x
(b)
y
x
z
(c)
Read more : Truyền hình kỹ thuật số DVB-T2