Tải bản đầy đủ (.pdf) (117 trang)

Cơ sở toán học trong đồ hoạ máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (306.12 KB, 117 trang )

Luận Án Tốt Nghiệp

Phần thuyết minh

LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn thầy giáo NGUYỄN TẤN THIỆN cùng tập thể các thầy
cô giáo khoa Công Nghệ Thông Tin, trường Đại Học Kỹ Thuật đã tận tình giúp đỡ chúng em
hoàn thành đồ án tốt nghiệp này.

Sinh viên thực hiện
Biện Công Minh - Nguyễn Xuân Sơn

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 1


Luận Án Tốt Nghiệp

Phần thuyết minh

LỜI NÓI ĐẦU

N

gày nay, song song với sự phát triển của công nghệ thông tin thì lãnh vực
đồ họa máy tính - một trong những lãnh vực lý thú của tin học - cũng
ngày một phát triển không ngừng. Như chúng ta đã biết, hình ảnh có một
ý nghóa rất lớn trong việc thông tin, nó giúp chúng ta cảm nhận thông tin nhanh


hơn, dễ dàng hơn, đặc biệt là trong những trường hợp bất đồng về ngôn ngữ.
Hình ảnh làm cho khả năng giao tiếp giữa con người và máy tính trở nên sinh
động và lý thú, từ đó nó giúp cho máy tính có thể mở rộng ứng dụng của mình
trong rất nhiểu lãnh vực như chúng ta thấy hiện nay.
Đồ Họa Trong Máy Tính
Đồ họa máy tính - một ngành khoa học tin học chuyên nghiên cứu về các
phương pháp và các kỹ thuật nhằm mô tả dữ liệu thông qua các hình ảnh - vì
vậy cũng ngày càng một thâm nhập nhiều vào các lãnh vực nghiên cứu và sản
xuất trong xã hội khi mà máy tính đã trở thành người cộng sự đắc lực của các
nhà nghiên cứu cũng như các nhà sản xuất. Đồ họa máy tính đã giúp cho các
ứng dụng dễ dàng thâm nhập và thuyết phục được người sử dụng nhờ những
giao diện thân thiện, dễ dùng của mình. Đồ họa máy tính thực sự giúp cho các
nhà khoa học và các nhà sản xuất kích thích khả năng sáng tạo và nâng cao
hiệu suất làm việc.
Ngày nay, đồ họa máy tính được sử dụng nhiều trong các 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í,…Đặc biệt với
những ưu điểm của mình, đồ họa máy tính cũng đã thâm nhập rất sâu vào các
ngành thiết kế và trang trí mỹ thuật. Việc thiết kế và trang trí mỹ thuật ngày
nay cũng trở nên dễ dàng hơn phần nào với sự trợ giúp của máy tính, người họa
só được máy tính tạo ra một cảm giác là y như đang làm việc ngoài đời thực
bằng cách cung cấp những "công cụ" như bàn vẽ, bản màu, một số thao tác như
cắt, dán, tẩy, xoá, thu, phóng…
Hệ Patterns
Hơn thế nữa, máy tính với khả năng lập trình và lưu trữ hình ảnh của mình đã
thực sự trở thành người cộng sự đắc lực cho các nhà tạo mẫu khi có thể tạo ra
hàng loạt mẫu mã mới với nhiều kiểu dáng đẹp nhờ các giải thuật hữu hiệu của
riêng mình và lưu trữ những mẫu vẽ có sẵn này sẵn sàng phục vụ khi cần thiết,
từ đó có thể nói máy tính nói chung và đồ họa trong máy tính nói riêng đã đóng
góp rất nhiều trong việc hỗ trợ cho các nhà thiết kế và tạo mẫu bằng các hệ
mẫu vẽ sẵn có của mình.


Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 2


Luận Án Tốt Nghiệp

Phần thuyết minh

Ngoài ra, trong hầu hết tất cả các phần mềm ứng dụng ngày nay, hệ các
patterns cũng đóng góp một phần rất lớn khi các nhà lập trình muốn thực hiện
những giao diện đồ họa. Chúng ta có thể thấy trong phần lớn các nhà máy sản
xuất trên thế giới hiện nay và đặc biệt là trong những năm gần đây ở Việt nam,
các hệ thống điểu khiển tự động các quy trình sản xuất trong nhà máy (hệ
automation sử dụng PLC) thì sự đóng góp của các mẫu vẽ cũng trở nên rất phổ
dụng. Chẳng hạn như khi muốn thể hiện các chi tiết, linh kiện hay các dây
chuyền có mặt trong nhà máy lên trên màn hình thì không có gì hữu hiệu hơn là
sử dụng các pattern đã được thiết kế sẵn và người lập trình chỉ việc đònh vò cho
các patterns mô tả các chi tiết này mà không nhất thiết phải ngồi vẽ lại từng chi
tiết một.
Bên cạnh đó, một số phần mềm đồ họa ngày nay luôn có kèm theo các
thư viện hình ảnh đã được thiết kế sẵn hỗ trợ rất nhiều cho các nhà tạo mẫu,
thiết kế và chúng ta có thể khẳng đònh là các thư viện này phần lớn là được tạo
ra từ những giải thuật và các chương trình đã được lập trình sẵn trên máy tính.
Kết luận
Tóm lại, nói đến đồ họa chắc có lẽ mỗi chúng ta đều biết đến sự phong phú và
đa dạng của lãnh vực này. Những chương trình đồ họa ngày nay đa dạng về chủ

đề, phong phú về số lượng và còn xuất sắc về chất lượng. Điều này cũng dễ
hiểu bởi các công ty phần mềm ngày nay có khả năng đầu tư lớn về tài chính.
Vì lẽ đó, trong phạm vi đồ án thực tập tốt nghiệp này, với những mục đích nêu
trên, chúng ta sẽ lần lượt nghiên cứu những cơ sở lý thuyết , hiện thực vào
chương trình và những giải thuật cơ bản nhằm có thể tạo ra hệ các mẫu vẽ
(pattern) đơn giản, ngắn gọn mà có thể hiện thực được những ý tưởng chủ đạo
của đồ họa trong máy tính hơn là có thể ứng dụng được thật sự trong cuộc sống.
Vì thời gian nghiên cứu rất hạn hẹp cho nên đồ án tốt nghiệp không thể
tránh được những sai sót. Chúng em xin chân thành cám ơn sự đóng góp của các
thầy cô giáo và các bạn sinh viên đồng nghiệp để có thể hoàn thiện đồ án một
cách xuất sắc hơn.
Một lần nữa, xin chân thành cám ơn thầy giáo Nguyễn Tấn Thiện, các
thầy cô giáo thuộc khoa Công Nghệ Thông Tin trường Đại Học Kỹ Thuật và các
bạn sinh viên đồng nghiệp đã giúp đỡ, đóng góp ý kiến để đồ án tốt nghiệp này
được hoàn thành.

Sinh viên thực hiện
Biện Công Minh - Nguyễn Xuân Sơn

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 3


Luận Án Tốt Nghiệp

Chương 1


Phần thuyết minh

TỔNG QUAN VỀ ĐỒ HỌA MÁY TÍNH

Đồ họa máy tính - một trong những ngành nghiên cứu của khoa học máy tính - ngày nay
đã là một trong những lãnh vực phát triển nhanh nhất và lý thú nhất. Đồ họa máy tính với
những tính năng ưu việt của mình, ngày càng trở thành một trong những yếu tố không thể
thiếu trong việc thiết kế các giao diện với người sử dụng, trong các quá trình xử lý các dữ
liệu khả kiến, trong lãnh vực thương mại quảng cáo trên truyền hình, trong ngành công
nghệ thiết kế trò chơi, hình ảnh động và nhiều, nhiều các ứng dụng khác.
Song song với sự phát triển của công nghệ, máy tính ngày nay đã trở thành người bạn
đồng hành không thể thiếu đối với những người công tác trong việc thiết kế và xử lý hình
ảnh do những công cụ hữu hiệu của mình, cho nên chúng ta có thể nói rằng, hầu như
không có một lãnh vực nào mà việc hiển thò đồ họa lại không phát huy được những ưu
điểm của mình và như thế cũng chẳng lấy gì làm ngạc nhiên khi mà chúng ta nhận thấy
việc ứng dụng đồ họa máy tính lại phát triển một cách rộng rãi đến như vậy.
Mặc dù trước đây các ứng dụng trong lãnh vực khoa học kỹ thuật phải dựa vào các
thiết bò đắc tiền và cồng kềnh nhưng với sự tiến bộ của ngành khoa học máy tính đã làm
cho đồ họa máy tính thực sự trở thành một công cụ có giá trò thực tiễn cao.
Ngày nay, chúng ta thấy đồ họa máy tính sử dụng trong nhiều lãnh vực khác nhau như
khoa học, kỹ thuật, y khoa, thương mại, cộng nghiệp, hội họa, giải trí, quảng cáo, giáo dục
và đào tạo, v..v.. và v..v..
Thiết Kế Với Sự Hỗ Trợ Của Máy Tính (Computer Aided Design)
Một trong các ứng dụng quan trọng nhất của đồ họa máy tính là hỗ trợ cho các quá trình
thiết kế, đặc biệt là trong lãnh vực kiến trúc và chế tạo, tuy nhiên như chúng ta đã biết,
hầu như toàn bộ các sản phẩm có mặt trong cuộc sống ngày hôm nay được sản xuất ra đều
có sự hỗ trợ đắc lực của máy tính, từ những quá trình đơn giản như tạo mẫu cho đến phức
tạp như xử lý hình ảnh trong các ứng dụng của y học, đồ họa máy tính đều đóng góp một
phần rất quan trọng. Để có một cái nhìn tổng quát nhất về sự ứng dụng của đồ họa máy
tính, chúng ta hãy xem xét đến CAD - phương pháp thiết kế với sự trợ giúp của máy tính

(Computer Aided Design) - đã được sử dụng rất rộng rãi trong việc thiết kế các tòa nhà
cao tầng, thiết kế xe máy, máy bay, tàu vũ trụ, máy tính, trong các sản phẩm ngành dệt và
nhiều sản phẩm của các ngành nghề khác.
Như vậy thì đồ họa máy tính hỗ trợ cho các quá trình thiết kế đó như thế nào? Trong
một số các ứng dụng về thiết kế, trước tiên đối tượng được hiển thò dưới dạng các đường
bao của một wireframe cho phép chúng ta thấy được hình dạng tổng quát cũng như các chi
tiết bên trong đối tượng. Ngoài ra, cách hiển thò bằng wireframe như thế này cũng cho
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 4


Luận Án Tốt Nghiệp

Phần thuyết minh

phép người thiết kế nhận dạng được nhanh chóng tương quan giữa các chi tiết nhằm có
được một sự lựa chọn đúng đắn cho hình dạng sẽ thiết kế.
Với sự giúp đỡ của CAD, người thiết kế sẽ có được một môi trường thiết kế nhiều cửa
sổ và điều này giúp cho họ có thể nhìn thấy các đối tượng được phóng to một cách dễ
dàng cũng như có thể thấy được vật thể với nhiều góc nhìn khác nhau.
Trong lãnh vực sản xuất phim hoạt họa, các ứng dụng CAD thường xuyên được sử
dụng. Đối với những hình ảnh động, chúng sẽ được hiển thò lên màn hình dưới dạng các
wireframe và điều này giúp ích rất nhiều cho quá trình kiểm tra sự tối ưu hóa của hệ
thống. Các vật thể khi được hiển thò dưới dạng bề mặt như vậy sẽ làm cho quá trình tính
toán từng chuyển động của vật thể sẽ nhanh hơn và điều này giúp cho người thiết kế có
thể tạo ra được các chuyển động nhòp nhàng uyển chuyển hơn.
Ngành kiến trúc sử dụng phương pháp biễu diễn hình ảnh tương tác để có thể thực

hiện việc thiết kế của mình ví dụ như khi muốn thể hiện các chi tiết trên nền nhà, các
kiến trúc sư sẽ biễu diễn trên nền thiết kế các chi tiết sẽ được hiển thò như là vò trí các
phòng, cửa ra vào, cửa sổ, cầu thang, v..v.. Trong lãnh vực thiết kế điện, người thiết kế
cũng có thể sử dụng phần mềm CAD để hiển thò sơ đồ mạch điện, sơ đồ bố trí các thiết bò
điện, cách đi dây, v..v và v..v.. Nói tóm lại, trong thực tế, có rất nhiều hệ thống và sản
phẩm được thiết kế đều có sự hỗ trợ rất đắc lực của phần mềm CAD.
Những Kỹ Xảo Máy Tính
Phương pháp đồ họa trong máy tính cũng được sử dụng rất rộng rãi trong các ứng dụng mỹ
thuật và quảng cáo thương mại. Các nhà họa só thường sử dụng các kỹ xảo khác nhau của
máy tính hay như cả việc sử dụng các phần mềm chuyên dụng như là Lumena paintbrush
hoặc các chương trình khác như PixelPaint, SuperPaint, các chương trình CAD, các chương
trình biễu diễn các ký hiệu toán học (Mathemetica), các gói chương trình sản xuất phim
hoạt hình để thiết kế hình dáng cũng như chuyển động của đối tượng.
Còn trong lãnh vực mỹ thuật, nhiều kỹ xảo khác nhau của máy tính được sử dụng để
tạo ra các hình ảnh, đặc biệt là các hình ảnh ba chiều. Còn trong lãnh vực quảng cáo
thương mại, đồ họa máy tính được sử dụng để tạo các logo hay các hình ảnh quảng cáo
khác, đồ họa máy tính còn cho phép kết hợp hiển thò hình ảnh và hiển thò chữ phục vụ rất
tốt cho các chương trình quảng cáo trên truyền hình.
Trong lãnh vực giải trí, các kỹ xảo sử dụng đồ họa trong máy tính cũng giúp ích rất
nhiều, đặc biệt hữu hiệu đối với các ngành làm phim. Có rất nhiều bộ phim trong những
năm gần đây đều ứng dụng các kỹ xảo trong đồ họa máy tính rất tốt nhằm làm tăng thêm
tính hấp dẫn cho các bộ phim.”Công viên kỷ Jura”, “Thiết Mộc Lan”, “Vua Sư Tử” …là
các bộ phim minh chứng rất rõ nét cho lợi ích của đồ họa trong máy tính.
Giáo Dục Và Đào Tạo

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 5



Luận Án Tốt Nghiệp

Phần thuyết minh

Trong những ngành như vật lý, sinh học, tài chánh, kinh tế thì đồ họa máy tính cũng được
sử dụng nhiều nhằm hỗ trợ cho việc giáo dục. Các mô hình trong hệ thống vật lý, sinh
học, mô hình phát triển dân số, mô hình các thiết bò máy móc là những ứng dụng giúp ích
rất nhiều cho các học sinh.
Chúng ta có thể đưa ra ở đây một số ứng dụng của đồ họa máy tính trong việc giáo
dục đào tạo như sau: Các hệ thống đặc biệt như việc mô phỏng các quá trình thực tế hay
những hình ảnh biễu diễn các cơ quan bên trong của con người rồi đến các hình ảnh thu từ
vệ tinh, dưới biển sâu, tất cả đều có thể ứng dụng đồ họa trong máy tính mới có thể hiển
thò những hình ảnh này lên màn hình giúp cho học sinh có một cái nhìn cụ thể và rõ ràng
hơn mà không cần phải có những hình ảnh thực tế hay không cần phải đầu tư nhiều để
trang bò những thiết bò thật.
Xử Lý Ảnh
Mặc dù các phương pháp được sử dụng trong đồ họa máy tính và xử lý ảnh gần như là
giống nhau nhưng cả hai lãnh vực này đều có những hoạt động khác nhau về tính chất.
Trong đồ họa máy tính, máy tính chỉ dùng để tạo ra hình ảnh, còn trong xử lý ảnh, ngược
lại thường ứng dụng các kỹ thuật khác nhau để sửa đổi hay phân tích một tấm hình cho
trước. Hai ứng dụng căn bản của xử lý ảnh là làm tăng chất lượng hiệu quả của một bức
ảnh và tạo ra tri giác máy đối với những thông tin khả kiến. Tuy nhiên, đồ họa máy tính
và xử lý ảnh thông thường hay được kết hợp lại trong cùng một ứng dụng, ví dụ như trong
các ứng dụng của y khoa, các kỹ thuật của đồ họa máy tính và xử lý ảnh thường được áp
dụng đồng thời để tạo nên những mô hình nhân tạo về con người nhằm phục vụ cho việc
nghiên cứu trong phẫu thuật. Và ngày nay, hai lãnh vực đồ họa máy tính và xử lý ảnh
cũng được kết hợp lại để hỗ trợ cho việc thiết kế các hệ phẫu thuật với sự trợ giúp của
máy tính.


Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 6


Luận Án Tốt Nghiệp

Phần thuyết minh

Chương 2

CƠ SỞ TOÁN HỌC CỦA CÁC HỆ TRỤC TỌA
ĐỘ & NHỮNG PHƯƠNG THỨC HIỆN THỰC
TRONG ĐỒ HỌA MÁY TÍNH

Một vấn đề vô cùng quan trọng trong nền tảng lý thuyết của đồ họa trong máy tính có lẽ
là vấn đề hệ trục tọa độ. Bởi một lẽ là tất cả các vấn đề như đònh vò, hiển thò, thực thi đồ
họa đều được đặt nền tảng trên hệ tọa độ đònh trước, cho nên trước khi tiếp tục nghiên cứu
các phần khác trong đồ họa máy tính, chúng ta sẽ bắt đầu bằng việc nghiên cứu cơ sở lý
thuyết của hệ trục tọa độ, hệ trục tọa độ trong mội trường windows và các phương thức
hiện thực chúng trong đồ họa máy tính.
Đặt Vấn Đề
Như chúng ta đã đề cập trong chương một, bản chất của đồ họa máy tính là làm thế nào
để có thể mô tả và thao tác các đối tượng của thế giới thực bằng máy tính. Để thực hiện
được điều này, một số vấn đề cần được giải quyết bao gồm:
- Các đối tượng được mô tả trong tọa độ thế giới thực, trong khi đó hệ toạ độ thiết bò
dùng để hiển thò lại dùng hệ tọa độ nguyên, ngoài ra cách đònh nghóa đối với mỗi

loại thiết bò khác nhau là khác nhau. Vậy cần phải có một phương pháp chuyển
đổi nào đó để có thể chuyển đổi dễ dàng các mô tả về tọa độ cực giữa các hệ tọa
độ nói trên.
- Do những giới hạn về mặt thiết bò nên để có thể hiển thò và thao tác các đối tượng
của thế giới thực, cần phải phân tích các đối tượng phức tạp thành các thành phần
đơn giản hơn mà máy tính có thể hiển thò. Vấn đề đặt ra ở đây là thành phần đơn
giản được đònh nghóa như thế nào để từ đó có thể xây dựng lại các đối tượng phức
tạp ban đầu.
Trong chương này, chúng ta sẽ lần lượt tìm hiểu các phương pháp để giải quyết vấn đề
trên. Cụ thể là tìm hiểu về các hệ tọa độ được dùng để mô tả các đối tượng và các cách
chuyển đổi giữa chúng; tìm hiểu về các thành phần đồ họa cơ sở; tìm hiểu về nguyên tắc
làm việc của các thiết bò dùng trong đồ họa trong việc mô tả và thao tác các đối tượng.
Vấn Đề Tọa Độ Để Biễu Diễn Các Đối Tượng
1. Hệ tọa độ thế giới thực và hệ tọa độ thiết bò
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 7


Luận Án Tốt Nghiệp

Phần thuyết minh

1.1 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 của 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 đònh như hình vẽ; Ox,
Oy lần lượt được gọi là trục hoành và trục tung; x được gọi là hoành độ và y đượ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 (foot, cm, mm, km, inch, …) nào và có thể lớn nhỏ tùy ý.
P(x,y)

y

O

x

Hình 1.1. Hệ tọa độ thế giới thực
1.2 Hệ tọa độ thiết bò (device coordinates)
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 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 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.
y

O

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

x


Trang 8


Luận Án Tốt Nghiệp

Phần thuyết minh

Hình 1.2. Hệ tọa độ thiết bò
Các tọa độ x, y của hệ tọa độ 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 khoảng [0, 640], y chạy trong
khoảng [0, 480]. 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.
Chúng ta cũng nên lưu ý, với các hệ tọa độ thiết bò hiện nay, đa số đều đònh nghóa
gốc tọa độ O là góc trên bên trái của màn hình thiết bò. Tuy nhiên để đơn giản
trong các thao tác tính toán, chúng ta vẫn coi như hệ tọa độ thiết bò được đònh
nghóa như hình 1.2
2. Hệ tọa độ thiết bò được chuẩn (normalized device coordinates - NDC) - Ánh
xạ vào tọa độ thiết bò.
Do cách đònh nghóa của các hệ tọa độ thiết bò khác nhau nên một hình ảnh hiển thò
được trên thiết bò này chưa chắc hiển thò chính xác trên thiết bò kia. Chính vì vậy,
cần xây dựng một hệ tọa độ thiết bò được chuẩn (hay hệ tọa độ được chuẩn) đại
diện chung cho tất cả các thiết bò để có thể mô tả các hình ảnh của thế giới thực
mà không phụ thuộc vào bất cứ thiết bò nào.
Trong hệ tọa độ chuẩn, các tọa độ x, y sẽ được gán cho các gía trò trong khoảng từ
[0, 1]. Như vậy vùng không gian của hệ tọa độ được chuẩn chính là hình vuông
đơn vò có góc trái dưới là (0,0) và góc phải trên là (1,1). Lúc này việc mô tả các
đối tượng thực được thực hiện theo quá trình sau:
- Chuyển các tọa độ thế giới thực thành các tọa độ thiết bò đã được chuẩn
hóa.

- Chuyển các tọa độ thiết bò được chuẩn hóa thành các tọa độ thiết bò tương
ứng với từng thiết bò cụ thể.
Điều này giúp cho hệ thống trở nên linh hoạt hơn, có khả năng thích nghi với các
thiết bò xuất khác nhau.

Màn hình
Ảnh đònh nghóa
theo các tọa độ
của thế giới thực

Theo các tọa
độ chuẩn hóa

Tọa độ thiết bò

Máy in
Các thiết bò
khác

y

Sinh viên thực hiện:

1

ymax

x

Biện Công Minh

0 - Nguyễn Xuân 1Sơn

0

x

max
Trang
9


Luận Án Tốt Nghiệp

Phần thuyết minh

Hình 1.3 - Các phép biến đổi tọa độ
y

Màn hình
thiết bò

1
(x2, y2)

y1

(x1, y1)
x1

1


x

Hình 1.4 - Cách sử dụng hệ tọa độ được chuẩn
3. Sự chuyển đổi giữa các hệ tọa độ
3.1. Chuyển đổi từ hệ tọa độ thực sang hệ tọa độ được chuẩn
Việc chuyển đổi từ hệ tọa độ thực sang hệ tọa độ được chuẩn tương đối đơn giản.
Ta chỉ cần xác đònh hình vuông không gian lớn nhất trong hệ tọa độ thực mà người
dùng dùng để đònh nghóa các đối tượng, gọi cạnh của hình vuông đó là c(c>0). Lúc
này một điểm P(x, y) thuộc thế giới thực sẽ được ánh xạ thành điểm Po(xo, yo)
trong hệ tọa độ được chuẩn hóa như sau:
xo = x/c
yo = y/c
Dễ dàng kiểm chứng được xo, yo thay đổi trong khoảng [0, 1]
3.2. Chuyển đổi từ hệ tọa độ được chuẩn sang hệ tọa độ thiết bò
Thông thường ta sẽ ánh xạ trực tiếp các điểm từ hình vuông đơn vò của NDC sang
hình vuông lớn nhất DS (device square) của "màn hình" thiết bò. Điều này có nghóa
là với mỗi điểm Po(xo, yo) trong NDC chúng ta sẽ ánh xạ nó thành điểm P1(x1, y1)

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 10


Luận Án Tốt Nghiệp

Phần thuyết minh


tương ứng trong hình vuông DS (ta coi DS nằm giữa màn hình thiết bò trong các tính
toán sau này).
Hình vuông lớn
NDC
1
yo

y1

Po

xo

1

P1

x1
Hệ tọa độ thiết bò

Hình 1.5. - Sự ánh xạ từ NDC sang một thiết bò cụ thể
Cách ánh xạ từ NDC sang DS phải là ánh xạ tuyến tính để đảm bảo tính cân xứng.
Ta có công thức chuyển đổi (1.1):
x1 = Axo + B
y1 = Cyo + D
(1.1)
trong đó A, B, C, D là các hằng số được xác đònh như sau:
A = ymax
B = (xmax - ymax) / 2
C = ymax

D = 0
trong trường hợp xmax >= ymax và với (0, 0), (xmax , ymax ) lần lượt là các tọa độ góc
trên bên trái và góc dưới bên phải của màn hình thiết bò.
Hầu hết các không gian hiển thò của các thiết bò có dạng hình chữ nhật chứ không
phải là hình vuông, do đó việc ánh xạ như trên sẽ gây lãng phí khi không sử dụng
hết không gian này và gây khó chòu cho người sử dụng.
Trong một hình chữ nhật, ta đònh nghóa R là tỉ số của chiều cao và chiều rộng của
nó:
R = height/width
Lúc đó, để có thể vẽ được bất kỳ điểm nào trên toàn bộ không gian hiển thò của
thiết bò, ta sẽ thay đổi công thức ánh xạ theo R như sau (giả sử R < 1):
Thu nhỏ không gian NDC từ hình vuông thành hình chữ nhật RNDC sao cho nó
có cùng tỉ số phương với hình chữ nhật của màn hình thiết bò RDev. Dễ thấy rằng
với gỉa thiết R < 1, hình chữ nhật RNDC lớn nhất sẽ thỏa mãn tính chất trên là sẽ có
chiều x thay đổi từ 0 đến 1 và chiều y thay đổi từ 0 đến R.
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 11


Luận Án Tốt Nghiệp

Phần thuyết minh

Lúc này:
Với xo = 0, ta có x1 = 0 và
x0 = 1, ta có x1 = xmax
Tương tự

Với yo = 0, ta có y1 = 0 và
y0 = R, ta có y1 = ymax
Do đó công thức ánh xạ lúc này sẽ là (1.2):
x1 = xmax xo (A = xmax , B = 0)
y1 = xmax yo (C = xmax , D = 0)
Với R = ymax / xmax

Hệ số R

NDC
1
R

1
RNDC

RDev

Hình 1.6. - Qúa trình mở rộng vùng vẽ trên màn hình
Cửa Sổ Và Miền Xuất
Cửa sổ (Windows) được đònh nghóa như là một vùng không gian hình chữ nhật trong đó
các phần tử hình học sẽ được vẽ ra. Như vậy những hình ảnh được thể hiện lên thiết bò sẽ
được gói gọn trong vùng cửa sổ này.
Miền xuất (Viewport) được đònh nghóa như là một vùng không gian hình chữ nhật trong hệ
tọa độ NDC thể hiện những thành phần sẽ được vẽ. Miền xuất sẽ phải thuộc vùng hệ tọa
độ NDC ánh xạ lên tọa độ thiết bò. Những phần tử hình học của windows sẽ tương xứng
vào miền xuất.
Như vậy việc thể hiện hình vẽ lên thiết bò thực chất là việc thể hiện hình vẽ lên miền xuất
đã được thiết lập của thiết bò đó.
Hiện Thực Vấn Đề Trong Môi Trường Windows

Môi trường Windows cho phép chúng ta quản lý độc lập các thiết bò. Đây là một trong
những tính năng rất quan trọng của Windows bởi lẽ chúng ta có thể xây dựng ứng dụng
trên nền các thiết bò thông qua tính năng này mà không cần quan tâm đến việc thể hiện
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 12


Luận Án Tốt Nghiệp

Phần thuyết minh

ứng dụng trên hệ tọa độ riêng của từng thiết bò. Mặt khác, lập trình viên cũng không cần
quan tâm đến hệ thống khi có sự thay đổi hay di chuyển thiết bò có thể làm sai lệch hiệu
qủa của chương trình như trong môi trường DOS.
Không gian tọa độ logic
Không gian tọa độ logic là vùng không gian mà môi trường windows thiết lập để người
lập trình thao tác, xử lý trên đó.
Windows cung cấp cho chúng ta hàm ánh xạ chế độ tọa độ logic vào tọa độ thiết bò
(SetMapMode(int nMapMode)).
Vì đơn vò khi xuất văn bản và đồ họa trong windows là đơn vò logic nên khi xuất thông tin
ra thiết bò cụ thể đơn vò logic được chuyển thành đơn vò vật lý (pixel). Quá trình chuyển từ
đơn vò logic ra đơn vò vật lý được xác đònh bằng chế độ hiển thò (mapping mode). Mặc
nhiên, một đơn vò logic sẽ bằng một pixel, nhưng khi thay đổi chế độ hiển thò ta có thể
thay đổi cả quan hệ giữa đơn vò logic và đơn vò vật lý.
Ngoài việc thay đổi chế độ biến đổi đơn vò do tọa độ, có thể cả việc xác lập tham số khác
cũng làm ảnh hưởng đến quá trình hiển thò thông tin: thứ nhất có thể là do chiều rộng và
chiều cao của cửa sổ theo đơn vò logic hiện thời; thứ hai là chúng ta có thể cho kích thước

của miền xuất.
Mapping Mode (Chế Độ Hiển Thò)
Mapping Mode đònh nghóa một quan hệ giữa một đơn vò trong không gian tọa độ logic vào
từng pixel của thiết bò. Windows cung cấp tám mapping mode được sử dụng trong các ứng
dụng của Windows như sau:
Mapping Mode
MM_ANISOTROPIC
MM_HIENGLISH
MM_HIMETRIC
MM_ISOTROPIC
MM_LOENGLISH
MM_LOMETRIC
MM_TEXT
MM_TWIPS

Ý Nghóa
Ánh xạ một đơn vò logic vào một đơn vò vật lý tùy ý. Tỷ lệ khác
nhau theo trục x và y
Ánh xạ một đơn vò logic bằng 1/1000 inch. Trục y hướng lên
Ánh xạ một đơn vò logic bằng 1/100 mm. Trục y hướng lên
Ánh xạ một đơn vò logic vào một đơn vò vật lý. Một đơn vò theo
trục x luôn luôn bằng một đơn vò theo trục y
Ánh xạ một đơn vò logic bằng 1/100 inch. Trục y hướng lên
Ánh xạ một đơn vò logic bằng 1/10 mm. Trục y hướng lên
Ánh xạ một đơn vò logic vào một pixel. Trục y hướng xuống
Ánh xạ một đơn vò logic vào 1/1440 inch (1/20 point; với 1 point
= 1/72 inch). Trục y hướng lên

Trong đó Windows cung cấp 6 mapping mode bắt buộc (ngoại trừ MM_ANISOTROPIC
và MM_ISOTROPIC). Những mapping mode này là bắt buộc bởi vì tỷ lệ chia là cố đònh,

do ứng dụng không thể thay đổi số đơn vò logic ánh xạ vào mỗi đơn vò thiết bò.

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 13


Luận Án Tốt Nghiệp

Phần thuyết minh

Cửa Sổ (Windows)
Cửa sổ là vùng người lập trình làm việc với các hình ảnh đồ họa hay văn bản.
Trong chế độ hiển thò không bắt buộc (MM_ANISOTROPIC) và MM_ISOTROPIC)
windows cho phép chúng ta ấn đònh kích thước cửa sổ theo đơn vò logic. Khi ấn đònh một
trong số chế độ này ta cần phải xác đònh kích thước cửa sổ bằng hàm (bởi vì các chế độ
này chỉ được sử dụng với chương trình mà đơn vò logic được đònh nghóa bởi người sử dụng,
còn kích thước vật lý của cửa sổ vẫn chưa được xác đònh cho đến thời điểm chúng ta ấn
đònh chúng một cách rõ ràng).
Hàm xác đònh kích thước cửa sổ trong chế độ hiển thò MM_ANISOTROPIC và
MM_ISOTROPIC là SetWindowExt(). Hàm SetWindowExt() đònh nghóa cách chuyển đổi
từ tọa độ logic sang tọa độ thiết bò.
Thực chất khi thay đổi kích thước logic của cửa sổ, ta không thay đổi kích thước vật lý của
nó trên màn hình mà ta chỉ xác đònh kích thước cửa sổ theo đơn vò logic do ta thiết lập (hay
xác đònh quan hệ giữa các đơn vò logic do cửa sổ sử dụng và đơn vò vật lý (pixel) do thiết
bò sử dụng).
Miền Xuất (Viewport)
Miền xuất là miền chương trình xuất thông tin ra thiết bò. Ta có thể thiết lập kích thước

bất kỳ cho miền xuất.
Đối với chế độ hiển thò MM_TEXT thì mặc nhiên kích thước miền xuất luôn luôn bằng
kích thước cửa sổ.
Đối với chế độ hiển thò MM_ANISOTROPIC và MM_ISOTROPIC ta chỉ đònh kích thước
miền xuất bằng hàm SetViewportExt(hdc, nXExtent, nYExtent).
Kích thước x và y của miền xuất đònh nghóa cách co giãn đơn vò hệ tọa độ logic sao cho
phù hợp với đơn vò hệ tọa độ vật lý. Mặc khác tham số này cũng đònh nghóa chiều của hai
hệ tọa độ.
Ví dụ: Giả sử x của cửa sổ là 4, x của miền xuất là 8 thì windows sẽ chuyển đổi 4 đơn vò
logic vào 8 đơn vò vật lý và chiều dương trục hoành của hệ trục tọa độ thiết bò sẽ là chiều
dương trục hoành của hệ tọa độ logic; nếu y của cửa sổ là 2 và y của miền xuất là -8 thì 2
đơn vò logic chuyển đổi thành 8 đơn vò vật lý và chiều dương trục tung của hệ tọa độ thiết
bò sẽ là chiều âm trục tung của hệ trục tọa độ logic.
Gốc Tọa Độ
Gốc tọa độ của cửa sổ: là gốc tọa độ của hệ tọa độ logic
Ta có thể thay đổi gốc tọa độ của cửa sổ bằng cách sử dụng hàm SetWindowOrg(). Bằng
cách thay đổi gốc tọa độ, ứng dụng có thể thay đổi cách chuyển từ hệ tọa độ logic vào hệ
tọa độ thiết bò. Ví dụ như để dòch một điểm về phiá phải, ta có thể cho hoành độ gốc
windows một giá trò âm và tương tự để dòch một điểm lên trên ta có thể cho tung độ của
gốc cửa sổ một giá trò âm.
Gốc tọa độ của miền xuất là gốc tọa độ của hệ tọa độ thiết bò. Mặc nhiên, gốc tọa độ của
miền xuất là điểm (0,0) của cửa sổ.
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 14


Luận Án Tốt Nghiệp


Phần thuyết minh

Ta có thể di chuyển gốc tọa độ của miền xuất nhờ hàm SetViewportOrg().
Tương tự như thay đổi gốc cửa sổ, thay đổi gốc miền xuất cũng làm thay đổi cách chuyển
đổi từ tọa độ logic vào tọa độ thiết bò.
Tất cả các điểm trong hệ tọa độ logic được chuyển đổi vào hệ tọa độ vật lý tương ứng với
phương thức chuyển đổi gốc.
Các Thành Phần Cơ Sở Của Đồ Họa
Các hình ảnh phức tạp hiển thò trên máy tính bao giờ cũng được tạo từ các đối tượng đồ
họa cơ sở gọi là các thành phần đồ họa nguyên thủy (output graphics primitives). Gọi là cơ
sở bởi vì chúng có thể được hỗ trợ trực tiếp từ phần cứng của thiết bò hay bên trong các hệ
đồ họa cơ sở dùng để phát triển các ứng dụng đồ họa (như GRAPH.TPU của TURBO
PASCAL). Mỗi đối tượng đều bao gồm một số thuộc tính để quy đònh tính chất hiển thò
của chúng. Ví dụ đối với đối tượng là đường thẳng ta có các thuộc tính: màu để vẽ (color),
bề rộng (width), kiểu của đường thẳng (line style) là dashed, dotted, hay solid. Sau đây là
các đối tượng đồ họa cơ sở cùng các thuộc tính (attributes) của chúng:
1. Điểm (Point), đoạn thẳng (Line), đường gấp khúc (Poly Line)
Điểm (point) là thành phần cơ sở được đònh nghóa trong mọi 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).
Hai điểm sẽ quyết đònh một đường thẳng (line). Ta có thể mô tả các đường thẳng bằng
các phương trình đường thẳng. Đường thẳng đi qua hai điểm S(x1, y1) và E(x2, y2) có
phương trình đường thẳng là
(x-x1)(y2-y1) = (y-y1)(x2-x1)
hay
(y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0
Nhưng thực tế máy tính không thể hiển thò toàn bộ một đường thẳng mà chỉ có thể
hiển thò một đoạn thẳng (line segment) nằm giữa điểm S(x1, y1) và E(x2, y2) mà thôi.
Hơn nữa, khi hiển thò một đoạn thẳng SE, do các thiết bò hiển thò thực chất đều là một
lưới nguyên nên các điểm trên SE đều phải được nguyên hóa. Có nhiều thuật toán

khác nhau để xấp xỉ các điểm về tọa độ nguyên nhưng trong đồ họa hiện nay người ta
thường sử dụng thuật toán Beresenham. Để đơn giản ta thường gọi đoạn thẳng là line.
Đường gấp khúc (Polyline) 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 giữa hai đoạn thẳng gọi là đỉnh (vertex). 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 một cặp tọa độ
(x1, y1)(x2, y2)…(xn, yn)
Về thực chất, polyline không phải là một đối tượng cơ sở vì nó có thể biễu diễn qua
tập các đối tượng cơ sở là line nhưng người ta vẫn xếp nó vào diện các đối tượng cơ

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 15


Luận Án Tốt Nghiệp

Phần thuyết minh

sở vì nó là một trong những đối tượng rất hay được sử dụng trong đồ họa và hầu hết
các GKS đều hỗ trợ cho đối tượng này.
Một đa giác (polygon) là một đường gấp khúc có điểm đầu và điểm cuối trùng nhau.
Các thuộc tính của polygon bao gồm: color - xác đònh màu để vẽ các đoạn thẳng; line
width - xác đònh độ rộng của nét vẽ; line type - xác đònh kiểu của đường thẳng đang
vẽ, có thể là solid, dashed, dotted, dot-dashed. Hầu hết các công cụ đồ họa đều đònh
nghóa tập các kiểu đường thẳng có thể dùng và cho phép người dùng đònh nghóa kiểu
đường thẳng của họ thông qua một mẫu (pattern) gồm các số 0, 1.
Đối với polyline, các đoạn thẳng trong cùng một polyline thì có cùng một thuộc tính.

2. Vùng tô (Fill Area)
Xác đònh vùng tô với một màu hay một mẫu tô nào đó. Vùng tô được xác đònh bằng đa
giác (polygon): (x1, y1)(x2, y2)…(xn, yn). Các thuộc tính: color - màu tô; pattern - mẫu tô.
Nó có thể là tô thuần (solid) hay tô theo các mẫu như dash, dotted, dash-dotted,…
3. Văn bản (Text)
Text là tập các ký tự giúp hiển thò nội dung các thông điệp theo một ngôn ngữ nào đó.
Các thuộc tính: color - xác đònh màu của các ký tự; font - xác đònh bộ ký tự dùng để
hiển thò, nó đònh nghóa kiểu, kích thước của ký tự hiển thò. Hình dạng của mỗi ký tự có
thể được xác đònh bởi một tập các polyline (trường hợp font vector) hay là một pixel
pattern (font bitmap). Có rất nhiều loại font khác nhau như font bitmap, font truetype,
font CHR,…; character size - xác đònh chiều cao (height) và chiều rộng (width) của ký
tự. Các ký tự đònh nghóa bằng polyline có thể dễ dàng thay đổi kích thước hơn là các
ký tự được đònh nghóa bằng pixel pattern; character spacing - xác đònh khoảng cách
giữa các ký tự; text justification - xác đònh sự canh chỉnh của văn bản thể hiện. Nó có
thể là canh trái (left text), canh phải (right text), canh giữa (center text), canh đều nhau
(justify text); text path - xác đònh cách hiển thò tuần tự của các ký tự. Nó có thể là phải
sang trái, từ trên xuống dưới, từ trái sang phải, từ dưới lên trên.. Ngoài ra text còn có
một thuộc tính nữa, đó là phương đường thẳng mà dòng text hiển thò trên đó.

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 16


Luận Án Tốt Nghiệp

Chương 3


Phần thuyết minh

CƠ SỞ TOÁN HỌC CỦA CÁC ĐỐI
TƯNG ĐỒ HỌA & VIỆC HIỆN THỰC
TRONG MÔI TRƯỜNG WINDOWS

Như chúng ta đã biết, hình ảnh có thể được mô tả bằng nhiều cách khác nhau. Giả sử
chúng ta có một màn hình rời rạc, lúc đó hình ảnh hoàn toàn có thể được biễu diễn bằng
một tập các điểm sáng trên màn hình này. Ở một góc độ khác, chúng ta có thể mô tả hình
ảnh bằng một tập hợp các đối tượng phức hợp ví dụ như là cây cối, đòa hình hay như là các
vật dụng trong nhà, các bức tường thì hình ảnh có thể được thể hiện bằng cách xác đònh vò
trí tương ứng trên hệ trục tọa độ của các vật thể. Hình dáng và màu sắc của một vật thể có
thể được mô tả bằng chuỗi các pixel hoặc tập hợp các cấu trúc hình học cơ bản ví dụ như
là đoạn thẳng và các đa giác.Và hình ảnh sau đó được hiển thò bằng cách hoặc chuyển tải
các chuỗi pixel vào vùng đệm khung dây hay bằng việc chuyển đổi các đặc tính của các
cấu trúc hình học cơ bản thành các mẫu pixel tương ứng. Đặc biệt, các gói phần mềm
chuyên dụng cho đồ họa ngày nay còn cung cấp cho chúng ta các chức năng mô tả hình
ảnh bằng các cấu trúc hình học cơ bản và xem như đó là cấu trúc cơ sở và đôi khi lại tập
hợp các cấu trúc cơ sở này lại thành các cấu trúc khác phức tạp hơn. Ứng với mỗi đối
tượng cơ sở như trên, chúng ta sẽ có một dữ liệu đầu vào tương ứng và những thông tin
liên quan khác chỉ rõ cách hiển thò các đối tượng này. Điểm và đoạn thẳng chính là thành
phần đơn giản nhất của hình ảnh. Bên cạnh đó, các đối tượng cơ sở để kiến tạo nên hình
ảnh nói trên còn bao gồm luôn cả các đường tròn và đôi khi còn là các hình nón, các mặt
phẳng bậc hai, các hình trụ, mặt trụ, các đa giác và kể cả các chuỗi ký tự. Chúng ta có thể
bắt đầu nghiên cứu những thủ tục tạo hình bằng việc nghiên cứu những thuật toán tạo hình
ảnh hai chiều và đặc biệt sẽ tập trung vào phương pháp tạo hình bằng việc chuyển đổi tia
quét trong những hệ thống có màn hình hiển thò rời rạc.
Điểm Và Đường Thẳng
Trong máy tính, điểm thường được hình thành bằng cách chuyển đổi các tọa độ tương ứng
của chúng - được cung cấp bởi các chương trình ứng dụng – vào một thao tác thích hợp

của thiết bò xuất trong trạng thái hoạt động. Ví dụ như ứng với màn hình CRT, chùm tia
điện tử sẽ đập vào màn phosphor làm phát sáng các điểm tương ứng. Việc các chùm tia
điện tử sẽ làm phát sáng các điểm trên màn hình như thế nào còn tùy thuộc vào các kỹ
thuật hiển thò. Trong các hệ quét ngẫu nhiên, điểm sẽ được lưu trữ trong danh sách hiển
thò và các giá trò tọa độ sẽ được chuyển đổi thành các sai lệch điện áp tại những điểm mà
chùm tia điện tử trên màn hình sẽ quét ngang trong một chu kỳ. Ngược lại, đối với các hệ
rời rạc đen trắng, một điểm sẽ được hình thành bằng cách cài đặt giá trò 1 cho vò trí tương
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 17


Luận Án Tốt Nghiệp

Phần thuyết minh

ứng của màn hình trong vùng đệm khung. Sau đó, chùm tia điện tử sẽ quét theo chiều
ngang và phát ra các electron va đập làm phát sáng bất kỳ vò trí trên màn hình mà giá trò
tương ứng trong vùng đệm khung là 1. Trong hệ RGB, vùng đệm khung sẽ được chuyển
tải đồng thời với mã màu nhằm có thể hiển thò các vò trí đúng với các màu tương ứng của
nó.
Đối với đường thẳng, trong máy tính, đường thẳng sẽ được vẽ nên thông qua vò trí các
điểm trung gian chạy dọc theo suốt chiều dài con đường nối hai điểm đầu cuối. Thiết bò
xuất sau đó sẽ tô màu những điểm này và hình thành nên đường thẳng. Nói một cách khác
đường thẳng sẽ được hình thành bởi một tập hợp các điểm liên tục nhau nối hai đầu của
đường thẳng đó. Trong những thiết bò tuần tự, ví dụ như các thiết bò quét ngẫu nhiên hay
các bút vẽ theo kiểu vector, đường thẳng được vẽ ra một cách liên tục hơn từ điểm đầu
cho đến điểm cuối nhờ sự sai lệch điện áp biến thiên theo chiều dọc và chiều ngang làm

cho sự thay đổi các giá trò theo trục x và trục y là những sự thay đổi tuyến tính.
Trong các thiết bò hiển thò sử dụng kỹ thuật số thì đoạn thẳng được vẽ bằng các điểm
rởi rạc nối liền hai điểm đầu và cuối. Vò trí các điểm rời rạc này thông thường được tính
toán thông qua phương trình biễu diễn đường thẳng tương ứng. Đối với màn hình hiển thò
rời rạc thì màu sắc của đường thẳng sẽ được tải vào vùng đệm khung tại các vò trí ứng với
từng pixel hình thành nên đường thẳng đó. Các thiết bò điều khiển video sẽ đọc các dữ
liệu từ vùng đệm khung này và sẽ vẽ nên các điểm sáng trên màn hình. Vò trí tương ứng
của các điểm sáng này sẽ được tham chiếu bằng các giá trò số tự nhiên và như thế các vò
trí này chỉ được tính toán một cách tương đối và thuộc đường thẳng nối liền hai điểm đầu
và cuối. Ví dụ như để tính toán cho vò trí (10.48, 20.59) thì hệ thống sẽ làm tròn các giá trò
nói trên và tính toán cho vò trí (10, 21). Việc làm tròn các giá trò tọa độ của từng điểm như
thế sẽ làm cho đường thẳng tạo ra không được liên tục mà có hình dáng bậc thang, điều
này sẽ được nhận thấy rất rõ trong các thiết bò hiển thò rời rạc có độ phân giải thấp và
chúng ta có thể khắc phục bằng cách nâng cao độ phân giải của các thiết bò hiển thò này.
Ở một mức độ khác, chúng ta cũng có thể tạo nên các đường thẳng liên tục hơn bằng cách
điều chỉnh độ sáng bức xạ của các điểm sáng.
Đối với các giải thuật hiển thò hình ảnh trong hệ thống hiển thò rời rạc ở cấp thiết bò,
vò trí của các đối tượng sẽ được chỉ ra trực tiếp bằng các tọa độ nguyên và như thế chúng
ta sẽ giả thiết rằng việc tham chiếu đến các vò trí của pixel là phụ thuộc và số hàng và số
cột của hệ thống quét.
Để có thể chuyển tải màu sắc vào vùng đệm khung tại vò trí tương ứng với cột x và
hàng y, chúng ta có thể sử dụng thủ tục
SetPixel(x, y)

Ảnh hưởng bậc thang khi đường thẳng được tạo bằng chuỗi các điểm
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 18



Luận Án Tốt Nghiệp

Phần thuyết minh

Đôi khi, chúng ta cũng muốn tham khảo đến cường độ sáng của một điểm cho trước
nằm trong vùng đệm khung, thủ tục có thể sử dụng lúc đó là
getPixel(x, y)
Giải Thuật Vẽ Đường Thẳng
Phương trình đường thẳng cơ bản là
y = m.x + b
(1)
trong đó m là hệ số góc của đường thẳng và b là độ dời theo trục y.
Giả sử như (x1, y1) và (x2, y2) là hai điểm thuộc
đường thẳng, lúc đó m và b sẽ được tính như sau:
y2
y2 - y1
m =
(2)
x2 - x1
y1
b = y1 - m.x1
x1

(3)

x2

Giải thuật vẽ đường thẳng sẽ được xây dựng dựa

trên phương trình đường thẳng cho trong biểu thức
(1) và được tính toán thông qua biểu thức (2) và (3)
Ứng với một sự thay đổi ∆x theo chiều trục x ta có thể tính được sự thay đổi theo trục
y tương ứng là ∆y
với
∆y = m.∆x
(4)
tương tự, ta có thể tính toán ∆x theo ∆y như sau:
∆y
∆x =
(5)
m
Các phương trình này sẽ là nền tảng để xác đònh sai lệch điện áp trong các thiết bò
tuần tự. Đối với đường thẳng có hệ số góc |m| < 1, ∆x có thể được xem là tương ứng với
sai lệch điện áp theo trục x và sự sai lệch điện áp theo trục y là ∆y có thể cũng dễ dàng
tính được theo ∆x bằng phương trình (4). Còn đối với đường thẳng có hệ số góc |m| > 1, ∆y
có thể được xem là tương ứng với độ sai lệch điện áp theo trục y và khi đó độ sai lệch
điện áp theo trục x có thể tương ứng được tính theo ∆y bằng phương trình (5). Còn đối với
đường thẳng có hệ số góc m = 1, sai lệch điện áp theo chiều dọc và chiều ngang là bằng
nhau (∆x = ∆y). Và như vậy ứng với mỗi trường hợp, một đường thẳng liên tục với hệ số
góc là m sẽ được vẽ ra giữa hai điểm cho trước.
Tuy nhiên trong hệ thống rời rạc, đường thẳng được tạo ra bằng các pixel, do đó
khoảng cách các bước theo chiều dọc và chiều ngang sẽ phụ thuộc vào việc chia cắt các
pixel này. Và như thế chúng ta phải tiến hành lấy mẫu tại các điểm rời rạc và xác đònh
điểm cận kề với các điểm đã tiến hành lấy mẫu này. Quá trình rời rạc hóa một đoạn thẳng
theo trục x được biễu diễn như hình vẽ sau:
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn


Trang 19


Luận Án Tốt Nghiệp

Phần thuyết minh

y2
y1

x1

x2

Giải Thuật DDA (Digital Differential Analyser)
Digital Differential Analyser (DDA) là giải thuật vẽ đường thẳng dựa trên cơ sở tính toán
hoặc ∆y hoặc ∆x thông qua việc sử dụng các phương trình (4) và (5). Chúng ta sẽ tiến
hành lấy mẫu đoạn thẳng theo độ dời đơn vò tương ứng với một trục tọa độ và xác đònh giá
trò nguyên tương ứng của vò trí nằm sát đường thẳng nhất theo trục còn lại.
Ở đây, chúng ta giả thiết là hệ số góc của đường thẳng là m với m dương, trường hợp
m <= 1, chúng ta sẽ lấy mẫu theo trục x với độ dời ∆x=1 và tính được các giá trò y kế tiếp
là:
(6)
yk+1 = yk + m
Chỉ số k ở đây sẽ bắt đầu bằng 1 cho điểm đầu tiên và tăng dần cho đến khi đạt đến
điểm kết thúc. Vì m có thể là một số thực bất kỳ nào đó nằm giữa 0 và 1, nên giá trò tương
ứng y phải được làm tròn thành giá trò gần nhất thuộc đường thẳng.
Đối với đường thẳng có hệ số góc lớn hơn 1, chúng ta sẽ đổi ngược hai tham số x và y.
Nghóa là chúng ta sẽ lấy mẫu theo y với độ dời đơn vò (∆y = 1) và tính toán các giá trò kế
tiếp của x như sau:

1
xk+1 = xk +
(7)
m
Phương trình (6) và (7) được xây dựng dựa trên cơ sở là các đường thẳng được vẽ từ
trái qua phải. Nếu quá trình vẽ diễn ra theo chiều ngược lại nghóa là điểm bắt đầu nằm
bên tay phải thì ta có độ dời ∆x = -1 và:
yk+1 = yk - m
(8)
hay khi hệ số góc lớn hơn 1, chúng ta có ∆y = -1 với
1
(9)
xk+1 = xk m
Các phương trình từ (6) đến (9) cũng có thể được sử dụng để tính toán vò trí của các
pixel thuộc đường thẳng khi hệ số góc mang giá trò âm. Nếu giá trò tuyệt đối của hệ số góc
là nhỏ hơn 1 và điểm bắt đầu nằm ở bên trái, ta đặt ∆x = 1 và tính toán giá trò của y theo
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 20


Luận Án Tốt Nghiệp

Phần thuyết minh

phương trình (6). Khi điểm bắt đầu nằm bên phải với hệ số góc không thay đổi, ta đặt ∆x
= -1 và sẽ tính giá trò của y theo phương trình (8), Tương tự, khi hệ số góc mang giá trò âm
và có giá trò tuyệt đối lớn hơn 1, ta sẽ cho ∆y = -1 và tính x theo phương trình (9) hay ∆y =

1 thì tính x theo phương trình (7).
Giải thuật vẽ đường thẳng này có thể tóm tắt bằng một thủ tục với thông số đầu vào
là hai điểm của đoạn thẳng. Sự sai lệch theo chiều ngang và chiều dọc tương ứng là dx và
dy. Giá trò lớn nhất giữa hai giá trò dx và dy sẽ được chọn làm bước lấy mẫu. Điểm bắt đầu
là (xo, yo), chúng ta sẽ đi tính toán sai lệch trong mỗi bước lấy mẫu để có thể xác đònh
điểm kế tiếp thuộc đường thẳng. Tiến hành lặp công việc như trên ứng với số lần lấy mẫu.
Nếu dx > dy và xa < xb thì ta sẽ tăng các giá trò x và y tương ứng lên 1 và m. Nếu độ dời
được xác đònh theo trục x nhưng xa > xb thì ta sẽ giảm giá trò của x và y tương ứng là -1 và
-m để xác đònh điểm kế tiếp. Ngược lại, nếu chúng ta xác đònh độ dời đơn vò là tăng (hay
giảm) theo trục y thì x sẽ tăng (hay giảm) một giá trò là 1/m.
#include "device.h"
#define ROUND(a) ((int) (a + 0.5))
void lineDDA (int xa, int ya, int xb, int yb)
{
int dx = xb - xa, dy = yb - ya, steps, k;
float xIncrement, yIncrement, x = xa, y = ya;
if (abs (dx) > abs (dy)) steps = abs (dx);
else steps = abs (dy);
xIncrement = dx / (float) steps;
yIncrement = dy / (float) steps;
setPixel (ROUND(x), ROUND(y));
for (k=0; k{
x += xIncrement;
y += yIncrement;
setPixel (ROUND(x), ROUND(y));
}
}
Giải thuật DDA là một trong những phương pháp tính vò trí các pixel nhanh hơn là sử
dụng trực tiếp phương trình (1). Nó loại trừ được phép nhân trong phương trình (1) bằng

cách sử dụng phương pháp rời rạc hóa, vì thế sự gia tăng thích hợp sẽ được áp dụng cho
trục tọa độ x cũng như y để có thể xác đònh vò trí của các pixel một cách phù hợp. Tuy
nhiên sự tích hợp của các sai số khi tiến hành rời rạc hóa các điểm thuộc đường thẳng sẽ
Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 21


Luận Án Tốt Nghiệp

Phần thuyết minh

làm cho các vò trí pixel kế tiếp sai lệch đi rất nhiều trong trường hợp tính toán với đường
thẳng tương đối dài. Hơn thế nữa, phép làm tròn số và các phép toán số học đối với các
điểm động trong thủ tục lineDDA vẫn còn làm hao tốn rất nhiều thời gian. Chúng ta có
thể nâng cao hiệu qủa của giải thuật DDA bằng cách tách rời việc gia tăng m và 1/m
thành các số tự nguyên và các phần thập phân và như thế các phép toán đơn giản chỉ còn
là các phép toán đối với số nguyên. Tuy nhiên điều này sẽ được đề cập đến sau, bây giờ
ta tiến hành xét đến một giải thuật khác cho phép ứng dụng việc vẽ cả trong đường thẳng
cũng như cung tròn.
Giải Thuật Bresenham
Một giải thuật chính xác và hiệu quả khác dùng để vẽ đường thẳng trong hệ thống rời rạc
là giải thuật Bresenham. Giải thuật này chỉ tính toán trên sự gia tăng của các số nguyên
và như thế nó còn có thể được sửa lại để vẽ đường tròn hay các đường cong khác. Hình vẽ
(3-5) và (3-6) minh họa một phần màn hình nơi đường thẳng được hiển thò

13


Đường thẳng
chó đònh

12

50

11

49

10

48
10

11

12

13

Hình 3-5.
Một phần màn hình hiển thò
thẳng
đoạn thẳng bắt đầu từ điểm
điểm
tại vò trí cột 10, hàng 11

Đường thẳng

chó đònh

50

51

52 53

Hình 3-6.
Phần màn hình hiển thò đoạn
với hệ số góc âm, bắt đầu từ
nằm trong cột 50, hàng 50

Trục tung chỉ vò trí các đường quét, trục hoành chỉ các cột pixel. Trong ví dụ này
chúng ta lấy mẫu đơn vò theo trục x. Và điều chúng ta cần xác đònh ở đây là một trong hai
điểm gần với đường thẳng thì điểm nào chính là điểm gần nhất trong mỗi lần lấy mẫu. Bắt
đầu bằng vò trí bên trái như trong hình 3-5, chúng ta cần xác đònh là điểm kế tiếp của
đường thẳng sẽ là điểm nằm tại vò trí (11, 11) hay vò trí (11, 12). Tương tự như vậy, hình 36 biễu diễn đoạn thẳng có hệ số góc âm và bắt đầu từ vò trí bên trái tại tọa độ (50, 50).
Trong trường hợp này, điểm kế tiếp của chúng ta sẽ chọn nằm trong tọa độ nào (51, 50)
hay (51, 49)? Những câu hỏi này sẽ được trả lời trong giải thuật vẽ đường thẳng của

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 22


Luận Án Tốt Nghiệp


Phần thuyết minh

Bresenham bằng việc kiểm tra dấu của tham số nguyên mà giá trò của nó sẽ tỷ lệ với
khoảng cách từ các điểm đến đoạn thẳng.
Để có thể minh họa giải thuật Bresenham một cách chính xác, chúng ta giả thiết là
đoạn thẳng được vẽ có hệ số góc là dương và nhỏ hơn 1. Các điểm lấy mẫu trên đường
thẳng sẽ được thực hiện theo trục x bằng phép lấy mẫu đơn vò. Điểm bắt đầu nằm phía
bên trái có tọa độ là (xo, yo) thuộc đường thẳng đã cho, chúng ta sẽ tiến hành trên từng cột
kế tiếp (vò trí x) và sẽ vẽ điểm có giá trò y là gần đường thẳng đã cho nhất. Hình 3-7 là
một minh họa cho bước thứ k trong quá trình nói trên. Giả sử chúng ta đã xác đònh được là
pixel tại tọa độ (xk, yk) là được hiển thò thì điều kế tiếp là chúng ta phải xác đònh pixel nào
sẽ được vẽ tại cột xk+1. Chúng ta sẽ chọn điểm có vò trí (xk+1, yk) và (xk+1, yk+1).
Tại vò trí lấy mẫu xk+1, chúng ta đặt khoảng cách từ các pixel đến đường thẳng toán
học tương ứng là d1 và d2 (hình vẽ 3-8). Toạ độ y của điểm nằm trên đường thẳng tại điểm
xk + 1 được tính theo công thức như sau:
y = m ( xk+1) + b
(10)
do đó:
d1 = y - yk
= m ( xk+1) + b - yk

d2 = (yk+1) - y
= yk+1 - m ( xk+1) - b
Sự sai biệt giữa hai khoảng cách lúc này sdẽ là:
d1 - d2 = 2m(xk+1) - 2yk + 2b - 1

(11)

Tham số quyết đònh pk tại bước thứ k trong giải thuật vẽ đường thẳng có thể tính toán
được bằng cách biến đổi phương trình 3-11 để nhằm làm cho quá trình tính toán chỉ thực

hiện trên các số nguyên. Chúng ta sẽ thực hiện điều này bằng cách thay thế m = ∆y / ∆x
với ∆y và ∆x là các khoảng cách theo chiều dọc và chiều ngang từ vò trí của điểm cuối
cùng đến đường thẳng, và đònh nghóa:
pk = ∆x(
d1 - d2 )
= 2∆y.xk - 2∆x.yk + c

(12)

Chúng ta nhận thấy rằng dấu của pk sẽ phụ thuộc vào dấu của (d1 - d2 ), vì ∆x>0 trong
ví dụ của chúng ta. Tham số c là một hằng không đổi và có giá trò là 2∆y + ∆x(2b -1) là
con số không phụ thuộc vào vò trí của các pixel và sẽ loại bỏ trong qua trình tính toán đệ
qui cho pk. Nếu pixel tại yk là gần hơn so với pixel tại yk+1 (nghóa là d1 < d2 ) thì giá trò pk
sẽ âm. Lúc đó ta sẽ vẽ pixel thấp hơn, còn ngượi lại, ta sẽ chọn để vẽ tại pixel có vò trí
cao hơn.
yk+3

Sinh viên thựcyhiệ
n:
k+2
yk+1
yk

yk+1

Biệ
Cô+nbg Minh - Nguyễn Xuân Sơn
y =nmx

y


d2
d1

yk

Trang 23


Luận Án Tốt Nghiệp

Phần thuyết minh

Hình 3-7.
Phần màn hình chỉ ra điểm
nằm trên cột xk và trên hàng yk
tại vò trí lấy
là điểm thuộc đoạn thẳng với
hệ số góc 0 < m < 1

Hình 3-8.
Khoảng cách giữa vò trí các điểm
và đường thẳng theo trục y
mẫu xk+1.

Tọa độ sẽ thay đổi dọc theo đường thẳng tại các bước lấy mẫu đơn vò hoặc theo hướng
x hoặc theo hướng y. Vì vậy, chúng ta có thể tính toán giá trò tham số quyết đònh ở bước
kế tiếp bằng cách tăng chỉ số tương ứng. Tại bước thứ k+1, theo phương trình (12) ta tính
được
pk+1 = 2∆y.xk+1 - 2∆x.yk+1 + c

Trừ cho phương trình (12) chúng ta được:
pk+1 - pk = 2∆y.(xk+1 - xk) - 2∆x.(yk+1 - yk )
Nhưng xk+1 = xk + 1 nên
pk+1 = pk + 2∆y - 2∆x.(yk+1 - yk )

(13)

với giá trò yk+1 - yk hoặc bằng 1 hoặc bằng 0 tùy thuộc vào tham số pk.
Sự tính toán tham số quyết đònh một cách đệ quy như đã nói trên sẽ được thực hiện tại
từng vò trí x nguyên bắt đầu từ tọa độ của điểm bên trái nằm trên đường thẳng. Tham số
đầu tiên po sẽ được tính thông qua phương trình (12) tại điểm bắt đầu (xo, yo) với m là
∆y/∆x:
po = 2∆y - ∆x

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

(14)

Trang 24


Luận Án Tốt Nghiệp

Phần thuyết minh

Chúng ta có thể tóm tắt giải thuật vẽ đường thẳng với hệ số góc dương và nhỏ hơn
một của Bresenham bằng các bước được liệt kê như sau:
1. Nhập vào giá trò tọa độ cũa hai điểm đầu và cuối của đường thẳng, lưu giá trò tọa

độ của điểm bắt đầu bên trái vào (xo, yo).
2. Chuyển (xo, yo) vào vùng đệm khung và đây là điểm đầu tiên của đường thẳng.
3. Tính các hằng số ∆x, ∆y, 2∆y, và 2∆y - 2∆x và tính giá trò đầu tiên cho tham số
quyết đònh là
po = 2∆y - ∆x
4. Tại mỗi vò trí xk dọc theo đường thẳng, bắt đầu với k = 0, thực hiện việc kiểm tra
như sau:
Nếu pk < 0 thì tọa độ của điểm được vẽ kế tiếp sẽ là (xk+1, yk) và
pk+1 = pk + 2∆y
Ngược lại, tọa độ của điểm được vẽ kế tiếp sẽ là (xk+1, yk+ 1) và
pk+1 = pk + 2∆y - 2∆x
5. Lặp lại bước 4 ∆x lần.
Việc thực hiện giải thuật Bresenham để vẽ đường thẳng có góc tọa độ nằm trong khoảng
0 < m < 1 được xác đònh bởi thủ tục dưới đây. Vò trí của các điểm đầu và cuối cần phải
được cung cấp cho thủ tục này, và các điểm được vẽ theo thứ tự từ trái sang phải. Việc gọi
hàm setPixel sẽ tải giá trò màu cho trước của điểm xác đònh (x, y) vào vùng đệm khung.
#include "device.h"
void lineBres (int xa, int ya, int xb, int yb)
{
int p = 2 * dy - dx;
int twoDy = 2 * dy; twoDyDx = 2 * (dy - dx);
int x, y, xEnd;
/* Cần xác đònh điểm nào là điểm bắt đầu và điểm nào là điểm cuối */
if ( xa > xb )
{
x = xb ;
y = yb ;
xEnd = xa ;
}
else

Sinh viên thực hiện:

Biện Công Minh - Nguyễn Xuân Sơn

Trang 25


×