1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

117 548 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 117
Dung lượng 306,12 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chuyên ngành: Kỹ thuật Công nghệ Công nghệ thông tin Tin học chuyên ngành Sơ lược: Lời nói đầu Chương 1. Tổng quan về đồ họa máy tính Chương 2. Sơ 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 Chương 3. 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 Chương 4. Các giải thuật tô màu Chương 5. Hệ patterns Chương 6. Ngôn ngữ Visual C++

Trang 1

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 emhoà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

Trang 2

LỜI NÓI ĐẦU

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ũngngà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 nhanhhơ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ìnhtrong 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ácphươ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ảnxuấ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ácnhà 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ữnggiao 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ácnhà 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 caohiệ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ácnhau như công nghiệp, thương mại, quản lý, giáo dục, giải trí,…Đặc biệt vớinhữ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ácngành thiết kế và trang trí mỹ thuật Việc thiết kế và trang trí mỹ thuật ngàynay 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ựcbằ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 rahà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ủariê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 đã đónggó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ệ

N

Trang 3

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ácpatterns 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ệnnhững giao diện đồ họa Chúng ta có thể thấy trong phần lớn các nhà máy sảnxuấ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âychuyề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ị chocá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 chitiế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ácthư 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êutrê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àochươ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ủ đạocủ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ácthầy cô giáo và các bạn sinh viên đồng nghiệp để có thể hoàn thiện đồ án mộtcá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ácthầy cô giáo thuộc khoa Công Nghệ Thông Tin trường Đại Học Kỹ Thuật và cácbạ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

Trang 4

Chương 1 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ớinhữ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ôngnghệ 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ấyviệ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ácthiế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àmcho đồ 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ụcvà đà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ìnhthiế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 đềucó 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ứctạ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ộtphầ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áytí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? Trongmộ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 đườngbao 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 chitiế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

Trang 5

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ửasổ 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ácwireframe 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ínhtoá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ựchiệ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áckiế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ácphò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ảnphẩ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ủamáy tính hay như cả việc sử dụng các phần mềm chuyên dụng như là Lumena paintbrushhoặc các chương trình khác như PixelPaint, SuperPaint, các chương trình CAD, các chươngtrì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 phimhoạ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áothươ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áokhá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ấttố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ấtnhiề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ữngnă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êmtí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

Trang 6

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 đượcsử 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ý, sinhhọ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 íchrấ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áodụ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ế haynhữ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ểnthị 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ànghơ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ượclạ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 chotrướ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ínhvà 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ư trongcá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 ápdụ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ệcnghiê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ý ảnhcũ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ủamáy tính

Trang 7

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ứucá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ứchiệ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ỗiloạ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ượngcủ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 đơngiản được định nghĩa như thế nào để từ đó có thể xây dựng lại các đối tượng phứctạ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áchchuyể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ắclà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ị

Trang 8

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 đốitượ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ẳngcũ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 đượcgọ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 ý

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), tuynhiê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 tronghệ 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

P(x,y) y

x O

y

x O

Trang 9

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ộtkhoảng nào đó Một số thiết bị chỉ cho x chạy trong khoảng [0, 640], y chạy trongkhoả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ạithiế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ĩagố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ảntrong các thao tác tính toán, chúng ta vẫn coi như hệ tọa độ thiết bị được địnhnghĩ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) đạidiệ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ựcmà 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ẩnhó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ácthiết bị xuất khác nhau

Ả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àn hình Máy in

Các thiết bị khác y

Trang 10

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

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ườidù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úcnà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/cDễ 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 sanghì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ĩalà 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)

Trang 11

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ínhtoán sau này).

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):

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ôngphả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ụnghế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ủanó:

R = height/widthLúc đó, để có thể vẽ được bất kỳ điểm nào trên toàn bộ không gian hiển thị củathiế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ằngvớ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

Hệ tọa độ thiết bị

NDC

Trang 12

Lúc này:

Với xo = 0, ta có x1 = 0 và

x0 = 1, ta có x1 = xmaxTươ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ì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ứngvà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 trongnhữ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ụngtrê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

R Dev

Hệ số R

R NDC

NDC 1

R

1

Trang 13

ứ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ầnquan 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ệuqủ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ườilậ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ặcnhiê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áccũ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ướccủ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àotừng pixel của thiết bị Windows cung cấp tám mapping mode được sử dụng trong các ứngdụng của Windows như sau:

MM_ANISOTROPIC Á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à yMM_HIENGLISH Ánh xạ một đơn vị logic bằng 1/1000 inch Trục y hướng lênMM_HIMETRIC Ánh xạ một đơn vị logic bằng 1/100 mm Trục y hướng lênMM_ISOTROPIC Á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 yMM_LOENGLISH Ánh xạ một đơn vị logic bằng 1/100 inch Trục y hướng lênMM_LOMETRIC Ánh xạ một đơn vị logic bằng 1/10 mm Trục y hướng lên

MM_TWIPS Á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_ANISOTROPICvà 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ị

Trang 14

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ộttrong 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 đổitừ 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ủanó 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 (hayxá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ướcbấ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ằngkích thước cửa sổ

Đối với chế độ hiển thị MM_ANISOTROPIC và MM_ISOTROPIC ta chỉ định kích thướcmiề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 chophù 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 haihệ 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ềudươ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ằngcá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ốcwindows 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ủagố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ủamiền xuất là điểm (0,0) của cửa sổ

Trang 15

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ớiphươ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 TURBOPASCAL) 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ằngcá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ộtlướ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ánkhác nhau để xấp xỉ các điểm về tọa độ nguyên nhưng trong đồ họa hiện nay người tathườ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 quatậ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ơ

Trang 16

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ếtcá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; linewidth - xác định độ rộng của nét vẽ; line type - xác định kiểu của đường thẳng đangvẽ, có thể là solid, dashed, dotted, dot-dashed Hầu hết các công cụ đồ họa đều địnhnghĩ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 đagiá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 pixelpattern (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ácký tự được định nghĩa bằng pixel pattern; character spacing - xác định khoảng cáchgiữ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ảisang 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 đó

Trang 17

Chương 3 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ằngmộ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ácvậ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ảicá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áccấ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ềmchuyê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ậphợ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 đốitượ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 tinliê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ànhphầ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ặtphẳ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 tiaqué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 ứngcủ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ợpcủ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ểnthị 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

Trang 18

ứng của màn hình trong vùng đệm khung Sau đó, chùm tia điện tử sẽ quét theo chiềungang 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ểntả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ủanó.

Đố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 haycá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 đầucho đế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àmcho 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ểmrở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ínhtoá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ớitừ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 ứngcủ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 đầuvà 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ềunà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

Trang 19

Đô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ướcnằ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à

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:

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ácpixel 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ẳngtheo trục x được biễu diễn như hình vẽ sau:

x 2

x 1

y 1

y 2

Trang 20

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ánhoặ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ếnhà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ếplà:

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

mPhươ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ằmbên tay phải thì ta có độ dời ∆x = -1 và:

x 2

x 1

y 1

y 2

Trang 21

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ị âmvà 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 =

#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));

Trang 22

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 đườngthẳ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/mthà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ònlà 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ẳngcũ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ạclà 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ênvà 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ị

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àychú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 3-

6 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

50 49 48

53 52 51 50

Đường thẳng chĩ định

Đường thẳng

chĩ định

Trang 23

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

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ớikhoả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 đườngthẳ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íabê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ộtkế 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àosẽ đượ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ánhọ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:

do đó:

d1 = y - yk = m ( xk+1) + b - ykvà

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à:

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ựchiệ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 / ∆xvớ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ốicùng đến đường thẳng, và định nghĩa:

pk = ∆x( d1 - d2 )

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ị pksẽ â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

y k+3

y

y k+1

Trang 24

Hình 3-7 Hình 3-8.

Phần màn hình chỉ ra điểm Khoảng cách giữa vị trí các điểmnằm trên cột xk và trên hàng yk và đường thẳng theo trục ytại vị trí lấy

hệ số góc 0 < m < 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ướckế 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 + cTrừ 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ạitừ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:

Trang 25

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ơnmộ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à

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ọihà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

else

Trang 26

x = xa ;

y = ya ;xEnd = xb ;}

y++;

p += twoDyDx;

}setOixel(x, y);

}

}

Giải thuật Bresenham sẽ được tổng quát hóa đối với đường thẳng với hệ số góc tùy ý bằngcách xem mặt phẳng tọa độ là có tính chất đối xứng Đối với hệ số góc là dương và lớnhơn 1, chúng ta sẽ thay thế vai trò của trục x và trục y cho nhau Có nghĩa là chúng ta sẽtiến hành lấy mẫu theo trục y bằng các mẫu đơn vị và tính toán các giá trị kế tiếp của xgần đường thẳng nhất Cũng như thế, chúng ta có thể sửa lại chương trình để vẽ đườngthẳng với điểm bắt đầu bất kỳ Nếu điểm khởi đẩu của đường thẳng với hệ số góc dươngbắt đầu từ bên phải, cả hai giá trị x và đểu được giảm dần như là chúng ta đang lấy mẫutheo chiều từ phải sang trái Để có thể đảm bảo là các pixel được vẽ là chính xác bất chấpđiểm bắt đầu là như thế nào, chúng ta cần phải chọn thống nhất là điểm ở trên (hay dưới)trong trường hợp khoảng cách từ hai pixel đến đường thẳng là bằng nhau (d1 = d2 ) Đốivới hệ số góc âm, thủ tục vẽ hình cũng tương tự chỉ khác là một trong hai hệ trục là pháttriển theo chiều giảm dần và cái còn lại theo chiều tăng dần Cuối cùng, chúng ta cũngnên để ý đến trường hợp đặc biệt là ∆y = 0 và ∆x cũng = 0 hay trường hợp đường thẳng vẽlà đường chéo |∆x| = |∆y| thì có thể tải thẳng các giá trị vào vùng đệm khung mà khôngcần một giải thuật nào cả

Đường Gấp Khúc (Polyline)

Việc vẽ đường gấp khúc thực chất là việc vẽ những đường thẳng liên tiếp qua dãy điểmcho trước Do đó dựa trên cơ sở giải thuật vẽ đường thẳng ta dễ dàng thiết lập giải thuậtvẽ đường gấp khúc

Trang 27

Tuy nhiên việc hiện thực cơ sở lý thuyết này trong môi trường windows mang lại sựdễ dàng trong thao tác thực hiện chỉ với một hàm PolyLine() được xây dựng thành thưviện sẵn có trong hầu hết các gói phần mềm đồ họa trên cơ sở lý thuyết.

Đường Tròn (Circle)

Vì đường tròn là một đối tượng thường xuyên được sử dụng để vẽ hình ảnh nên giải thuậtđể vẽ đường tròn hay cung tròn luôn luôn đi kèm với các gói phần mềm đồ họa Tổngquát hơn, chúng ta có thể đưa ra một thủ tục có thể áp dụng để vẽ đường tròn hay vẽellipse

Đặc điểm của đường tròn

Đường tròn được định nghĩa là một tập hợp các điểm có cùng khoảng cách r so với điểmtâm (xc, yc) (hình vẽ 3-12) Mối quan hệ giữa các khoảng cách này được biễu diễn bằng lýthuyết Pythagorean trong hệ trục Descartes như sau:

(x - xc)2 + (y - yc)2 = r2 (24)

Chúng ta có thể sử dụng phương trình này đểtính vị trí của một điểm trên đường tròn bằngviệc tính giá trị tọa độ của các điểm lấy mẫuđơn vị dọc theo trục x từ vị trí x – r đến vị trí x+ r và giá trị tương ứng y của các điểm đượctính theo công thức sau:

y = yc ± r2 - (xc – x)2 (25)

để tạo

Đường tròn với tâm là (xo, yo) và bán kính r nên đường tròn Vấn đề ở đây là chúng

ta sẽ phải giải

quyết các công việc tính toán rất lớn ở mỗi lầnlấy

mẫu

Hơn thế nữa, khoảng cách giữa các điểm được vẽ ra sẽ không đồng đều với nhau.Chúng ta có thể điều chỉnh khoảng cách này bằng cách thay đổi x và y cho nhau (nghĩa làchúng ta sẽ lấu mẫu theo y và tính toán các giá trị của x) bất kể khi nào giá trị tuyệt đối củađộ dốc đường tròn là lớn hơn 1 Nhưng việc làm như vậy sẽ làm tăng thêm lượng tính toán vàxử lý của giải thuật

Một cách khác có thể loại trừ được khoảng cách không đồng đều như đã đề cập ở trênlà tính toán các điểm vẽ thuộc đường tròn bằng phương thức dùng tọa độ cực theo r và θ.Biểu thức của phương trình tham số đường tròn trong hệ tọa độ cực là:

x c

y c

r

Trang 28

x = xc + rcosθ

Việc hiển thị đường tròn bằng phương trình tham số nêu trên với góc quay không đổicho từng bước tính toán sẽ làm cho khoảng cách giữa các điểm thuộc đường tròn đồng đềuhơn Việc chọn góc quay θ như thế nào là tùy thuộc vào thiết bị hiển thị sử dụng và các ứngdụng Nếu chúng ta chọn góc quay θ quá lớn thì sẽ làm cho đường tròn được vẽ nên khôngmịn đều mà thực tế chúng ta sẽ thu được hình ảnh xấp xỉ gần đúng tạo ra bởi các đoạn thẳngnối liền nhau Để có thể đạt được một đường tròn liên tục trong hệ thống rời rạc, chúng ta cóthể lấy giá trị của bước nhảy trong việc tính toán là 1/r Các điểm được vẽ ra ở đây gần nhưlà liên tục

Việc tính toán khi tiến hành vẽ đường tròn có thể được giảm thiểu do tính chất đốixứng của nó Hình dạng của mỗi đường tròn là tương tự nhau trong từng cung phần tư Chúng

ta có thể tạo ra phần đường tròn nằm trong cung phần tư thứ hai của mặt phẳng xy một cáchdễ dàng nếu lưu ý rằng phần này sẽ là phần đối xứng của phần đường tròn trong cung phần

tư thứ nhất qua trục tọa độ y Và tương tự như vậy, phần đường tròn trong cung phần tư thứ bavà thứ tư cũng có thể được tạo ra dễ dàng bằng phép đối xứng của hai phần nói trên qua trụctọa độ x Và hơn thế nữa, chúng ta cũng có thể nhận thấy là đường tròn cũng có tính chất đốixứng trong các cung một phần tám với nhau Phần đường tròn nằm trong một cung một phầntám nào đó thuộc một cung một phần tư bất kỳ sẽ đối xứng với cung một phần tám còn lãitrong cung phần tư nói trên qua đường thẳng nghiêng 45o chia cắt hai cung phần tám nói trên.Các tính chất đối xứng này được minh họa trong hình vẽ 3-14 và chúng ta có thể thấy, mộtđiểm có tọa độ (x, y) bất kỳ sẽ được ánh xạ đến bảy khác thuộc đường tròn qua phép đốixứng Lợi dụng tính chất này, chúng ta có thể vẽ được toàn bộ các điểm thuộc đường tròn màchỉ cần tính toán các điểm thuộc đoạn x = 0 đến x = y

Việc xác định các điểm thuộc đường tròn theo cácphương trình (24) hay (26) vẫn đòi hỏi có khoảng thờigian phải hợp lý Tuy nhiên phương trình Descartescủa đường tròn (phương trình 24) đòi hỏi công việctính toán là rất lớn bởi vì nó chứa các phép toán nhânvà khai căn, trong khi đó thì phương trình tham số chỉchứa phép toán nhân và các phép toán lượng giác Cómột giải thuật có thể vẽ đường tròn một cách hiệu quảhơn dựa trên việc tính toán sai biệt giữa các tham sốquyết định như là giải thuật Bresenham là giải thuậtchỉ tính toán trên cơ sở các phép tính đơn giản trên sốnguyên

đổi lại để Tính đối xứng của đường tròn ứng dụng vào việc vẽ đường tròn bằng

(x, y) (x, -y) (y, -x) (-y, -x)

x

y

45 o

(y, x) (-y, x)

(-x, y)

(-x, -y)

Trang 29

cách kiểm tra các tham Tính toán một điểm có tọa độ số và lựa chọn điểm gầnđường tròn nhất ứng với mỗi bước

(x, y) thuộc đường tròn sẽ cho phép tính Tuy nhiên, đường tròn được tạo ra từ phương trình(24) là

chúng ta xác định bảy điểm còn lại không tuyến tính vì kết quả khai căn chỉ mang tính

chất ước lượng chứ không thể chính xác hoàn toàn Giải thuậtxác định

đường tròn của Bresenham sẽ bỏ qua phép khai căn và chỉ so sánh giá trị bình phươngkhoảng cách từ pixel đến đường tròn

Phương pháp so sánh khoảng cách trực tiếp là kiểm tra trung điểm giữa hai pixel đểxem xét điểm giữa này là nằm bên trong hay bên ngoài đường bao hình tròn Phương phápnày rất đơn giản và được áp dụng cho việc vẽ các hình nón, mặt nón vẽ các đường tròn cóbán kính là số nguyên Phương thức xác định theo tâm điểm như trên sẽ tạo ra được các pixelgiống như giải thuật vẽ đường tròn của Bresenham Và cũng như vậy, sai số trong việc định

vị các pixel dọc theo các mặt nón là có giới hạn khi sử dụng phương pháp tâm điểm nói trên

Giải Thuật Tạo Đường Tròn Theo Phương Pháp Tâm Điểm

Cũng như giải thuật vẽ đường thẳng trong hệ thống rời rạc, chúng ta cũng sẽ tiến hành lấymẫu theo khoảng cách đơn vị và xác định vị trí pixel gần đường tròn nhất trong mỗi bướcnhảy Với bán kính hình tròn là r và tâm của màn hình là (xc, yc), đầu tiên chúng ta tính vị trícác pixel xung quanh đường tròn có tâm là tọa độ gốc (0, 0) Sau đó, ứng với mỗi vị trí đãtính (x, y), chúng ta sẽ dịch chuyển nó đến vị trí tương ứng trên màn hình bằng cách cộngthêm xc vào x và yc vào y Dọc theo phần đường tròn từ x = 0 đến x = y trong cung phần tưthứ nhất, thì độ dốc của đường tròn sẽ biến thiên từ 0 đến –1 Vì vậy chúng ta có thể tiếnhành tính toán theo chiều dương của trục x cho hết cung phần tám này và sử dụng tham sốquyết định để xem điểm nào trong hai điểm có thể có của y là gần với đường tròn nhất trongmỗi bước tính toán Vị trí của các điểm tương ứng trong bảy cung phần tám còn lại có thể xácđịnh thông qua phép tính đối xứng

Để có thể áp dụng phương pháp tâm điểm, chúng ta định nghĩa hàm của đường trònnhư sau:

và một điểm bất kỳ có tọa độ (x, y) nào thuộc đường tròn có bán kính là r sẽ thỏa mãn

phương trình fcircle(x, y) = 0 Một điểm, nếu như điểm nằm ở phiá trong đường tròn thì hàmđường tròn có giá trị âm, ngược lại, nếu điểm nằm phiá bên ngoài đường tròn thì hàm có giátrị dương Tóm lại, vị trí tương ứng của một điểm (x, y) bất kỳ có thể được xác định bằngcách kiểm tra hàm đương tròn

< 0 nếu (x, y) nằm bên trong đường tròn

fcircle(x, y) = 0 nếu (x, y) thuộc đường tròn (28)

> 0 nếu (x, y) nằm bên ngoài đường tròn

Trang 30

Việc kiểm tra hàm đường tròn trong biểu thức (28) sẽ cho biết các trung điểm nào giữacác pixel là gần đường tròn trong các bước thực hiện tính toán Vì thế, hàm đường trònchính là tham số quyết định trong giải thuật tâm điểm và chúng ta cũng có thể tính toánmột cách tăng dần như chúng ta đã làm trong giải thuật vẽ đường thẳng.

Hình vẽ 3-15 chỉ ra điểm giữa của hai pixelứng viên gần đường tròn tại vị trí lấy mẫu

xk+1 Giả sử chúng ta chỉ vẽ điểm tại tọa độ(xk, yk), kế tiếp

chúng cần xác định hoặc pixel có tọa độ(xk+1, yk) hay điểm có tọa độ (xk+1, yk – 1)là gần đường tròn hơn Tham số quyết địnhcủa chúng ta ở đây là hàm đường tròn (27)sẽ được xác định tại vị trí trung điểm giữahai pixels:

pk+1 = fcircle(xk+1 + 1, yk+1 – 1/2) = [(xk + 1) + 1]2 + (yk+1 – 1/2)2 – r2hay

pk+1 = pk + 2(xk + 1) + (y2

k+1 – y2

k) - (yk+1 – yk) + 1 (30)với

yk+1 là hoặc yk hoặc yk-1 tùy thuộc vào dấu của pk.Sự gia tăng để có pk+1 hoặc là 2xk+1+1 (nếu pk âm) hoặc là 2xk+1+1-2yk+1 Giá trị của2xk+1 và 2yk+1 cũng có thể được gia tăng theo cách như sau:

2xk+1 = 2xk +22yk+1 = 2yk - 2

x 2 + y 2 – r 2 = 0 Điểm giữa

x k x k + 1 x k + 2

y k - 1

y k

Trang 31

Tại vị trí bắt đầu ( 0, r ), giá trị tương ứng của hai biểu thức nói trên là 0 và 2r Mỗigiá trị kế tiếp sẽ có được bằng cách cộng thêm 2 vào giá trị trước đó của 2x và trừ đi 2khỏi giá trị trước đó của 2y.

Tham số quyết định khởi đầu sẽ là giá của hàm đường thẳng tại điểm bắt đầu (xo, yo)

= (0, r):

p0 = fcircle(1, r – 1/2) = 1 + (r - 1/2)2 - r2hay

p0 = 5/4 - r

Nếu bán kính của đường tròn đã cho là số nguyên, chúng đã có thể làm tròn p0 thành:

p0 = 1 - r (với r nguyên)bởi vì tất cả các giá trị gia tăng đều là số nguyên

Cũng như giải thuật Bresenham cho đường thẳng, phương pháp tâm điểm cũng tínhtoán các vị trí pixel dọc theo các đường tròn bằng các phép cộng hay trừ theo các sốnguyên với giả thiết là các thông số của đường tròn là được biễu diễn trên tọa độ mànhình nguyên Chúng ta có thể tóm tắt các bước của giải thuật tâm điểm như sau:

1 Nhập vào giá trị bán kính và tọa độ tâm điểm (xc, yc) của đường tròn và xác địnhđiểm khởi đầu thuộc đường tròn có tâm ở gốc là

4 Xác định các điểm đối xứng ở bảy cung phần tám còn lại

5 Di chuyển các vị trí đã tính (x, y) vào đường tròn tâm (xc, yc) bằng cách cộng thêmgiá trị tương ứng vào x, y:

x = x + xc y = y + yc

Trang 32

6 Lặp lại các bước từ 3 đến 5 cho đến khi x ≥ y.

Thủ tục sau sẽ hiển thị đường tròn một cách rời rạc bằng giải thuật tâm điểm Đầu vàocủa thủ tục là tọa độ tâm điểm của đường tròn và bán kính của nó Độ sáng của các điểmtrên đường tròn được tải vào danh sách vùng đệm khung và sẽ được gọi lúc cần thiết bằngthủ tục con setPixel

void circlePlotPoints (int, int, int, int);

/* Vẽ tập đầu tiên của các điểm */

circlePlotPoints (xCenter, yCenter, x, y);

y ;

p += 2 * (x - y) + 1;

}circlePlotPoints (xCenter, yCenter, x, y);

}

}

void circlePlotPoints (int xCenter, int yCenter, int x, int y)

{

setPixel (xCenter + x, yCenter + y);

setPixel (xCenter - x, yCenter + y);

setPixel (xCenter + x, yCenter - y);

setPixel (xCenter - x, yCenter - y);

setPixel (xCenter + x, yCenter + y);

setPixel (xCenter - x, yCenter + y);

Trang 33

setPixel (xCenter + x, yCenter - y);

setPixel (xCenter - x, yCenter - y);

}

Ellipse

Nói một cách gần đúng, ellipse là một sự co giãn củađương tròn Vì vậy, ellipse có thể được vẽ nên bằngcách sửa đổi giải thuật vẽ đường tròn theo hai chiềukhác nhau của ellipse dọc theo hai trục chính và phụ

Đặc điểm của ellipse

Một ellipse có thể được định nghĩa là một tập hợpcác điểm mà tổng khoảng cách từ nó đến hai điểm cốđịnh (gọi là tiêu cự) là không đổi (hình vẽ 3.17) Nếunhư khoảng cách đến hai tiêu cự từ một điểm P = (x,y) nằm trên ellipse tương ứng là d1 và d2 thì phươngtrình tổng quát của ellipse được biễu

F1 và F2 Nếu biểu diễn d1 và d2 thông qua tọa độ của hai tiêucự là

F1 = (x1, y1) và F2 = (x2, y2), ta có:

(x - x1)2 + (y - y1 )2 + (x - x2 )2 + (y - y2 )2 = constant(33)

Biến đổi toán học phương trình trên, chúng ta có thể thu được một phương trình tổng quátcó dạng như sau:

trong đó các hệ số A, B, C, D, E, F được phụ thuộc vào tọa độ của các tiêu cự và chiều cáctrục của ellipse Trục chính của ellipse là đường thẳng nối từ tiêu cự này sang tiêu cự kiacủa ellipse và trục phụ là trục vuông góc với trục chinh tại trung điểm của đoạn thẳng nốihai tiêu cự

Phương pháp chỉ rõ ellipse là cho biết tọa độ của hai tiêu cự và một điểm bất kỳ thuộcellipse Với ba tọa độ này, chúng ta có thể xây dựng nên ellipse đó bằng phương trình(33) Các tham số sau đó có thể tính toán thông qua các điểm đã được xác định củaellipse

Phương trình biễu diễn ellipse có thể được đơn giản hoá nếu như hai trục của ellipsetrùng với hai trục của hệ tọa độ Hình vẽ 3-18 cho chúng ta hình ảnh một ellipse có vị tríchuẩn với chiều của hai trục là song song với chiều của hai trục x và y của gốc tọa độ.Tham số rx là tương ứng với trục chính và

Trang 34

ry tương ứng với trục phụ Phương trình của ellipseđược vẽ trên hình 3-18 có thể được viết lại một cáchđơn giản hơn theo tọa độ tâm và các tham số rx và rynhư sau:

độ Vì vậy chúng ta chỉ cần tính các điểm trong cungphần

tư thứ nhất mà thôi và sau đó thì tiến hành lấy đối xứng để xác định các điểm còn lại

Giải Thuật Vẽ Ellipse Theo Phương Pháp Tâm Điểm

Ở đây chúng ta cố gắng đưa ra một giải thuật tương đương với giải thuật vẽ đường tròn rờirạc Với các tham số rx, ry cùng với tọa độ tâm (xc, yc ) cho trước, chúng ta sẽ tiến hànhxác định các điểm (x, y) thuộc ellipse tại vị trí chuẩn với tâm là gốc tọa độ (0, 0), sau đóchúng ta sẽ dời các điểm này về ellipse có tâm là (xc, yc ) Nếu chúng ta muốn hiển thịellipse tại vị trí không phải là vị trí chuẩn thì chúng ta chỉ việc xoay ellipse để định hướnglại các trục của ellipse đó Để đơn giản, ở đây chúng ta chỉ xác định ellipse được vẽ tại vịtrí chuẩn

Phương pháp dùng tâm điểm tạo ellipse sẽ được áp dụng vào hai phần được chia cắtcủa cung phần tư thứ nhất tùy thuộc vào hệ số góc của ellipse Chúng ta sẽ tiền hành lấymẫu theo trục x nếu hệ số góc nhỏ hơn 1 và theo trục y nếu hệ số góc lớn hơn 1

Chúng ta định nghĩa hàm ellipse từ pphương trình (35) như sau:

Trang 35

< 0 nếu (x, y) nằm bên trong ellipse

fellipse(x, y) = 0 nếu (x, y) thuộc ellipse (38)

> 0 nếu (x, y) nằm bên ngoài ellipse

Như vậy thì hàm ellipse chính là tham số quyết định trong giải thuật tâm điểm để vẽellipse Tại mỗi vị trí lấy mẫu, chúng ta sẽ chọn điểm nào là điểm kế tiếp tùy vào dấu củahàm ellipse nói trên

Bắt đầu tại (0, ry ), chúng ta sẽ lấy mẫu theo chiều x cho đến khi chúng ta thực hiệnxong hết vùng 1 (là vùng có hệ số góc nhỏ hơn 1) Sau đó chúng ta sẽ chuyển sang lấymẫu theo chiều y cho đến lúc thực hiện xong cung phần tư thứ nhất, tại mỗi điểm, chúng

ta cần kiểm tra giá trị hệ số góc của ellipse Giá trị hệ số góc này có thể tính từ phươngtrình (37) như sau:

x từ (44) Giá trị cập nhật này cần được kiểm tra tại mỗi bước tính và chúng ta sẽchuyển từ phần 1 sang phần 2 nếu biểu thức (40) được thoả mãn

Giải thuật tâm điểm này có thể sử đổi để áp dụng cho các ellipse không nằm tại vị tríchuẩn bằng cách sử dụng hàn định nghĩa ellipse (34) và tính toán cho từng pixel một củaellipse Tuy nhiên, chúng ta có thể tiến hành vẽ ellipse tại vị trí chuẩn và sau đó sữ dụngcác phép biến hình để xác định các điểm của ellipse tại vị trí mới

Giả sử như chúng ta đã biết rx, ry và tâm của ellipse trong hệ tọa độ nguyên, chúng tachỉ cần tính các giá trị gia tăng để xác định giá trị tham số quyết định trong giải thuật này.các tham số r2x, r2

y, 2r2

x, 2r2

y chỉ cần tính toán một lần ngay tại lúc bắt đầu chương trình.Chúng ta có thể tóm tắt giải thuật vẽ ellipse bằng các bước sau đây:

Trang 36

1 Nhập vào rx, ry và tọa độ tâm của ellipse (xc, yc ), sau đó chọn điểm đầu tiên thuộcellipse ứng với tâm nằm tại gốc tọa độ là:

p1k+1 = p1k + 2r2

yxk+1 - 2r2

xyk+1 + r2

yvà tiếp tục cho đến khi 2r2

5 Ứng với mỗi vị trí yk trong phần thứ ø, bắt đầu với k = 0, kiểm tra: nếu p2k > 0,điểm kế tiếp của ellipse có tâm (0, 0) sẽ là (xk, yk - 1) và

p2k+1 = p2k - 2r2xyk+1 + r2xNgược lại, điểm kế tiếp của ellipse sẽ là (xk+1, yk - 1) và

p2k+1 = p2k + 2r2

yxk+1 - 2r2

xyk+1 + r2

x

6 Xác định các điểm đối xứng tương ứng trong ba cung phần tư còn lại

7 Di chuyển mỗi vị trí (x, y) đã tính toán lên ellipse có tọa độ (xc, yc ) với các giá trịtịnh tiến là:

x = x + xc y = y + yc

Trang 37

8 Lặp lại các bước cho phần 1 cho đến khi 2r2

yx ≥ 2r2

xy

Sau đây là giải thuật vẽ một ellipse bằng phương pháp tâm điểm với các giá trị ở đầu vàolà Rx, Ry, xCenter và yCenter Vị trí của các điểm trong cung phần tư thứ nhất sẽ đượctạo ra và sau đó là chuyển chúng vào vị trí tương ứng trên màn hình Độ sáng của cácđiểm này cùng với những điểm đối xứng của nó được xác định từ vùng đệm khung vàđược tải vào chương trình bằng hàm setPixel

#include <device.h>

#define ROUND(a) ((int) (a+0.5))

void ellipseMidpoint (int xCenter, int yCenter, int Rx, int Ry)

void ellipsePlotPoints (int, int, int, int);

/* Vẽ tập điểm đầu tiên */

ellipsePlotPoints(xCenter, yCenter, x, y);

y ;

py -= twoRx2;

Trang 38

p += Ry2 + px - py;

}ellipsePlotPoints (xCenter, yCenter, x, y);

x++;

px += twoRy2;

p += Rx2 - py + px;

}ellipsePlotPoints(xCenter, yCenter, x, y);

}

}

void ellipsePlotPoints (int xCenter, int yCenter, int x, int y)

{

setPixel (xCenter + x, yCenter + y);

setPixel (xCenter - x, yCenter + y);

setPixel (xCenter + x, yCenter - y);

setPixel (xCenter - x, yCenter - y);

}

Đa Giác (Polygon)

Đa giác thực chất là một đường gấp khúc khép kín Để vẽ một đa giác, ta có thể thực hiệndựa trên cơ sở của phép vẽ đường gấp khúc và một phép đóng đường gấp khúc bằng mộtđoạn thẳng nối từ đỉnh cuối cùng đến đỉnh đầu tiên

Đa giác đều là trường hợp đặc biệt của đa giác với các cạnh bằng nhau Do đó ta cóthể xây dựng một giải thuật để vẽ đa giác đều khi biết tâm, bán kính (bán kính của đườngtròn ngoại tiếp) và góc bắt đầu

Giải Thuật Vẽ Đa Giác Đều.

Giả thiết ta muốn xây dựng giải thuật vẽ đa giác đều N đỉnh, bán kính R, có đỉnh thứnhất nằm trên trục hoành (0, R) Ta nhận thấy các điểm tiếp theo nằm trên đường tròn

Trang 39

ngoại tiếp đa giác và cách điểm trước đó một cung là 2π/N Từ đó, ta có thể tìm được tọađộ của điểm thứ i là: (R.cos(2π(I-1)/N), R.sin(2π(I-1)/N)) Nhờ đó ta có thể vẽ đa giác lầnlượt qua các đỉnh có tọa độ được xác định như trên.

Hoa Hồng Nguyên Tố (Prime Rosette)

Hoa hồng nguyên tố thực chất là một đa giác đều có đầy đủ các đường chéo Ta cũng cóthể vẽ hoa hồng nguyên tố bằng cách phát triển giải thuật vẽ đa giác đều, nhưng hoa hồngnguyên tố có đặc điểm là ta có thể vẽ chỉ bằng một nét bút (nghĩa là chỉ một lần đặt bútvẽ và không nhấc bút lên cho đến khi hoàn tất) Mặc khác, trong mỗi lần vẽ đường thẳng,ngoài việc tiến hành vẽ đường thẳng, chúng ta phải di chuyển điểm hiện hành đến điểmcuối của đường thẳng để có thể phục vụ cho lần vẽ sau Như vậy, ta có thể đưa ra một giảtthuật tối ưu hơn để vẽ hoa hồng nguyên tố

Việc xây dựng giải thuật vẽ hoa hồng nguyên tố phải dựa trên giải thuật vẽ đa giácvà các đường chéo của nó Như đã đề cập ở trên, hoa hồng nguyên tố có thể vẽ chỉ bằngmột nét bút, nhờ vậy ta có thể vẽ đơn giản hơn như sau:

- Lần thứ nhất vẽ đường thẳng qua lần lượt các đỉnh 1, 2, 3, …, N, 1 (vẽ đa giác)

- Lần thứ hai cũng vẽ lần lượt nhưng mỗi lần vẽ bỏ qua một đỉnh 1, 3, 5, …, N-1, 1

- Lần thứ ba cũng vẽ lần lượt nhưng mỗi lần vẽ bỏ qua hai đỉnh 1, 4, 7,…, N-2, 1Cứ như thế, quá trình được lặp lại với (N-1)/2 lần thì kết thúc

Cung C

Trong đồ họa máy tính, với sự trợ giúp của máy tính và các giải thuật đệ quy, thực tếchúng ta đã tạo ra được những họ đường cong gây ra sự lôi cuốn rất đặc biệt nhờ hiệu ứnghình học của nó Bên cạnh đó, việc xây dựng các họ đường cong này cũng tương đối đơngiản và dễ hiểu Trong phạm vi của đồ án thực tập tốt nghiệp này, chúng ta sẽ khảo sát họđường cong C

Đường cong C được xây dựng trên cơ sở thay thế một đoạn thẳng bằng một đường gấpkhúc tạo ra bởi hai đoạn thẳng ngắn hơn hợp với nhau một góc là π/2 Hai đoạn thẳng nàycó độ dài bằng 1/√2 lần đoạn thẳng cấp cha của chúng Đễ có thể vẽ được các đoạn thẳngcấp hai từ đoạn thẳng cấp một, ta bắt đầu ở một đầu đoạn thẳng cấp một này vẽ đoạnthẳng cấp hai dài bằng 1/√2 lần đoạn thẳng cấp một và hợp với đoạn thẳng cấp một góc

π/4, sau đó từ vị trí hiện hành (đầu cuối của đoạn thẳng cấp hai thứ nhất), ta vẽ đoạnthẳng thứ hai cũng có chiều dài tương tự và hợp với đoạn thẳng cấp hai vưà vẽ một góc -(π/2) Cứ như thế từ việc thay thế 2 đoạn thẳng cấp n cho mỗi đoạn thẳng cấn n-1 ta đượcmột đường cong có hình chữ C rất đẹp (số cấp là từ 15 trở lên thì hình ảnh cung C hiện rarất rõ)

Cung Rồng

Tương tự như cung C, cung rồng là việc thay thế một đoạn thẳng cơ sở bằng hai đoạnthẳng cấp con nhưng việc thay có một khác biệt ở chỗ chiều dài của đoạn thẳng thừ hai

Trang 40

Tóm Tắt

Như vậy, chúng ta đã lần lượt tiến hành khảo sát các cơ sở toán học của những đối tượng

cơ sở trong đồ họa máy tính Trong thực tế thì các đường gấp khúc, các đa giác, cung C,cung rồng không phải là đối tượng cơ sở của đồ họa, nhưng chúng ta cũng tiến hành khảosát ở đây bởi vì chúng là những đối tượng thường xuyên được sử dụng để tạo ra hệ cácmẫu vẽ (patterns) là hệ mà chúng ta sẽ tiến hành hiệ thực bằng phần mềm

Hơn nữa, trong khi khảo sát lý thuyết, đễ có thể hiểu được cặn kẽ bản chất của cácgiải thuật, chúng ta cũng đã tiến hành khảo sát rất nhiều các giải thuật khác ứng với từngloại đối tượng một, nhưng trong thực tế khi hiện thực bằng phần mềm, trên cơ sở cấu hìnhhệ thống mà chúng ta đang sử dụng, trên cơ sở qũy thời gian hiện có của chúng ta và trên

cơ sở hiện thực của ngôn ngữ mà ta đang sử dụng thì việc lựa chọn giải thuật nào hợp lýnhất là tùy thuộc vào kỹ năng của người lập trình

Ngày đăng: 15/05/2016, 09:10

HÌNH ẢNH LIÊN QUAN

Hình 1.1. Hệ tọa độ thế giới thực - Cơ sở toán học trong đồ hoạ máy tính
Hình 1.1. Hệ tọa độ thế giới thực (Trang 8)
Hình 1.2. Hệ tọa độ thiết bị - Cơ sở toán học trong đồ hoạ máy tính
Hình 1.2. Hệ tọa độ thiết bị (Trang 9)
Hình 1.3 - Các phép biến đổi tọa độ - Cơ sở toán học trong đồ hoạ máy tính
Hình 1.3 Các phép biến đổi tọa độ (Trang 10)
Hình 1.5. - Sự ánh xạ từ NDC sang một thiết bị cụ thể - Cơ sở toán học trong đồ hoạ máy tính
Hình 1.5. Sự ánh xạ từ NDC sang một thiết bị cụ thể (Trang 11)
Hình 1.6. - Qúa trình mở rộng vùng vẽ trên màn hình - Cơ sở toán học trong đồ hoạ máy tính
Hình 1.6. Qúa trình mở rộng vùng vẽ trên màn hình (Trang 12)
Hình 3-5.    Hình 3-6. - Cơ sở toán học trong đồ hoạ máy tính
Hình 3 5. Hình 3-6 (Trang 22)
Hỡnh 3-17       dieón nhử sau: - Cơ sở toán học trong đồ hoạ máy tính
nh 3-17 dieón nhử sau: (Trang 33)
Hình vẽ 3-35 minh họa cho cách thức tô màu bằng đường thẳng quét. - Cơ sở toán học trong đồ hoạ máy tính
Hình v ẽ 3-35 minh họa cho cách thức tô màu bằng đường thẳng quét (Trang 41)
Hình 3-35       đường thẳng cắt ngang đa giác tại đỉnh của đa giác - Cơ sở toán học trong đồ hoạ máy tính
Hình 3 35 đường thẳng cắt ngang đa giác tại đỉnh của đa giác (Trang 42)
Bảng liệt kê các hàm trong CDC Class - Cơ sở toán học trong đồ hoạ máy tính
Bảng li ệt kê các hàm trong CDC Class (Trang 81)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w