Bài giảng Đồ họa máy tính (Bản đẹp)
CHƢƠNG I GIỚI THIỆU ĐỒ HỌA MÁY TÍNH
1.1 Giới thiệu về đồ họa máy tính
Ngày nay, đồ họa máy tính được ứng dụng rộng rãi trong ngành công nghệ thông tin. Khó mà tìm
được một ứng dụng thương mại của công nghệ thông tin không sử dụng một thành phần nào đó
của hệ đồ họa máy tính. Đồ họa máy tính ở vị trí quan trọng trong lĩnh vực thiết kế và giao tiếp kỹ
thuật. Nó là cơ sở để chuyển đổi các giải pháp tính toán số sang thể hiện hình ảnh tự nhiên cho
thiết kế kỹ thuật hay muốn sáng tỏ một vấn đề phức tạp. Đồ họa máy tính biểu diễn được hình ảnh
đối tượng, quan hệ, dữ liệu, vị trí … Đồ họa máy tính còn có chức năng mô tả kích thước của đối
tượng, phân tích dữ liệu. Trong những thập niên cuối thế kỷ 20, sự phát triển mạnh của những hệ
đồ họa như CAD/CAM đã trở thành chuẩn công nghiệp và trường học.
1.2 Tổng quan về một hệ đồ họa
Mục tiêu của đồ họa máy tính có chức năng tạo ra và thao tác các hình ảnh đồ họa, nên nó phải có
khả năng tạo ra và hiệu chỉnh các hình ảnh bằng các tương tác và đáp ứng. Các ứng dụng đồ họa
đưa ra các chỉ dẫn thuật ngữ theo yêu cầu đồ họa người dùng. Thư viện đồ họa thực hiện tương
tác, làm cầu nối cho giao tiếp giữa người dùng và các thiết bị vật lý đơn giản đi.
Hình 1.1 Hệ thống đồ họa
Một trong các yêu cầu chính của một hệ thống đồ họa là các ứng dụng, áp dụng cho nhiều hệ thiết
bị vật lý, phải được phát triển không phụ thuộc vào phần cúng. Để có được điều đó, phải có tiêu
chuẩn hóa cho môi trường đồ họa ở mức chức năng, bằng việc cung cấp sự độc lập thiết bị và
ngôn ngữ lập trình.
Sự độc lập với thiết bị cho phép các chương trình ứng dụng đồ họa chạy trên các dạng phần cứng
khác nhau. Nó được thực hiện thông qua thiết bị nhập xuất logic cung cấp cho phần mềm ứng
dụng thông qua thư viện đồ họa và ánh xạ thiết bị vật lý cụ thể.
Cho tới nay, có những tiêu chuẩn đồ họa đã được phát triển trong nhiều năm, bao gồm:
GKS(Graphics Kernel System – 1985), được phát triển riêng cho các thiết bị nhập xuất 2 chiều.
GKS-3D bổ sung thêm khả năng lập trình 3 chiều. PHIGS (Programmer’s Hierarchical Graphics
System – 1984) hay PHIGS+ bao gồm khả năng lập trình không gian , tạo thành thao tác dữ liệu
đồ họa phức tạp …
Các tiêu chuẩn đồ họa thực tế là kết quả của việc chấp nhận trong công nghiệp các giao diện đặc
trưng, được đề xuất bởi nhiều công ty và không nêu ra trong các tiêu chuẩn chính thức. Được
nhắc đến trong số này là hệ X-Windows, cung cấp một loạt các chức năng nhập và thao tác đồ
họa 2 chiều. Sự mở rộng được bắt đầu vào giữa những năm 80 là hệ X-Windows 3 chiều.
Để đảm bảo sự linh hoạt, các tiêu chuẩn đồ họa thiết lập cho ứng dụng các thay đổi tối thiểu, cho
2
phép nó định địa chỉ các thiết bị nhập xuất khác nhau. Khởi đầu, người lập trình tạo ra một hệ
thống tọa độ mô hình, mô tả đối tượng gọi là hệ thống tọa độ thực. Tiếp theo, là hệ tọa độ tiêu
chuẩn và hệ tọa độ thiết bị. Chương trình ứng dụng sẽ giao tiếp với hệ tọa độ chuẩn theo cách
thức phù hợp, không quan tâm đến thiết bị xuất được dùng. Do đó, tạo ra sự độc lập với thiết bị
trong việc tạo ra hình ảnh của đối tượng.
1.1 Giới thiệu về đồ họa máy tính
Ngày nay, đồ họa máy tính được ứng dụng rộng rãi trong ngành công nghệ thông tin. Khó mà tìm
được một ứng dụng thương mại của công nghệ thông tin không sử dụng một thành phần nào đó
của hệ đồ họa máy tính. Đồ họa máy tính ở vị trí quan trọng trong lĩnh vực thiết kế và giao tiếp kỹ
thuật. Nó là cơ sở để chuyển đổi các giải pháp tính toán số sang thể hiện hình ảnh tự nhiên cho
thiết kế kỹ thuật hay muốn sáng tỏ một vấn đề phức tạp. Đồ họa máy tính biểu diễn được hình ảnh
đối tượng, quan hệ, dữ liệu, vị trí … Đồ họa máy tính còn có chức năng mô tả kích thước của đối
tượng, phân tích dữ liệu. Trong những thập niên cuối thế kỷ 20, sự phát triển mạnh của những hệ
đồ họa như CAD/CAM đã trở thành chuẩn công nghiệp và trường học.
1.2 Tổng quan về một hệ đồ họa
Mục tiêu của đồ họa máy tính có chức năng tạo ra và thao tác các hình ảnh đồ họa, nên nó phải có
khả năng tạo ra và hiệu chỉnh các hình ảnh bằng các tương tác và đáp ứng. Các ứng dụng đồ họa
đưa ra các chỉ dẫn thuật ngữ theo yêu cầu đồ họa người dùng. Thư viện đồ họa thực hiện tương
tác, làm cầu nối cho giao tiếp giữa người dùng và các thiết bị vật lý đơn giản đi.
Hình 1.1 Hệ thống đồ họa
Một trong các yêu cầu chính của một hệ thống đồ họa là các ứng dụng, áp dụng cho nhiều hệ thiết
bị vật lý, phải được phát triển không phụ thuộc vào phần cúng. Để có được điều đó, phải có tiêu
chuẩn hóa cho môi trường đồ họa ở mức chức năng, bằng việc cung cấp sự độc lập thiết bị và
ngôn ngữ lập trình.
Sự độc lập với thiết bị cho phép các chương trình ứng dụng đồ họa chạy trên các dạng phần cứng
khác nhau. Nó được thực hiện thông qua thiết bị nhập xuất logic cung cấp cho phần mềm ứng
dụng thông qua thư viện đồ họa và ánh xạ thiết bị vật lý cụ thể.
Cho tới nay, có những tiêu chuẩn đồ họa đã được phát triển trong nhiều năm, bao gồm:
GKS(Graphics Kernel System – 1985), được phát triển riêng cho các thiết bị nhập xuất 2 chiều.
GKS-3D bổ sung thêm khả năng lập trình 3 chiều. PHIGS (Programmer’s Hierarchical Graphics
System – 1984) hay PHIGS+ bao gồm khả năng lập trình không gian , tạo thành thao tác dữ liệu
đồ họa phức tạp …
Các tiêu chuẩn đồ họa thực tế là kết quả của việc chấp nhận trong công nghiệp các giao diện đặc
trưng, được đề xuất bởi nhiều công ty và không nêu ra trong các tiêu chuẩn chính thức. Được
nhắc đến trong số này là hệ X-Windows, cung cấp một loạt các chức năng nhập và thao tác đồ
họa 2 chiều. Sự mở rộng được bắt đầu vào giữa những năm 80 là hệ X-Windows 3 chiều.
Để đảm bảo sự linh hoạt, các tiêu chuẩn đồ họa thiết lập cho ứng dụng các thay đổi tối thiểu, cho
2
phép nó định địa chỉ các thiết bị nhập xuất khác nhau. Khởi đầu, người lập trình tạo ra một hệ
thống tọa độ mô hình, mô tả đối tượng gọi là hệ thống tọa độ thực. Tiếp theo, là hệ tọa độ tiêu
chuẩn và hệ tọa độ thiết bị. Chương trình ứng dụng sẽ giao tiếp với hệ tọa độ chuẩn theo cách
thức phù hợp, không quan tâm đến thiết bị xuất được dùng. Do đó, tạo ra sự độc lập với thiết bị
trong việc tạo ra hình ảnh của đối tượng.
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa máy tính (Bản đẹp)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_do_hoa_may_tinh_ban_dep.pdf
Nội dung text: Bài giảng Đồ họa máy tính (Bản đẹp)
- CHƢƠNG II CÁC ĐỐI TƢỢNG ĐỒ HỌA CƠ BẢN 2.1 Giới thiệu về các đối tƣợng đồ họa cơ sở Kỹ thuật đồ họa liên quan đến tin học và toán học bởi vì hầu hết các giải thuật vẽ, tô cùng các phép biến hình đều được xây dựng dựa trên nền tảng của hình học không gian hai chiều và ba chiều. Trong chương này, chúng ta giới thiệu các thuật toán vẽ và tô các đường cơ bản như đường thẳng, đa giác, đường tròn, ellipse. Các thuật toán này giúp cho sinh viên hiểu được quá trình vẽ và tô một đối tượng hình học cơ sở như thế nào. 2.1.1 Các đối tượng đồ họa cơ sở - Điểm: điểm là thành phần cơ sở được định nghĩa trong một hệ tọa độ, đối với hệ tọa độ 2 chiều mỗi điểm được xác định bởi hoành độ và tung độ. Ngoài thông tin tọa độ, điểm còn có thông tin màu sắc. - Đoạn thẳng, đường thẳng: đường thẳng xác định qua 2 điểm, đoạn thẳng bị giới hạn bởi 2 điểm đầu và cuối. Phương trình đường thẳng được xác định qua 2 điểm P(x1, y1) và Q(x2, y2) như sau: x x x x 1 2 1 y y1 y 2 y1 Hay ở dạng phương trình đoạn chắn y = mx + b, trong đó: Dx = x2 –x1 , Dy = y2 –y1 , D m y D x Hay ở dạng tổng quát: Ax + By + C = 0 , trong đó: A = y2- y1, B = x1 – x2, C = x2y1 – x1y2 - Đường gấp khúc: là tập các đoạn thẳng nối với nhau một cách tuần tự, các đoạn không nhất thiết phải tạo thành hình khép kín và có thể cắt nhau. Giao của hai đoạn thẳng là đỉnh, đỉnh và đỉnh cuối của đa giác trùng nhau. - Vùng tô: bao gồm đường biên và vùng bên trong, đường biên là đường khép kín như đa giác lồi. - Ký tự, chuỗi ký tự: Ký tự cho phép hiển thị thông tin theo ngôn ngữ nào đó. 2.1.2 Các thuộc tính của các đối tượng đồ họa cơ sở - Điểm có thuốc tính màu sắc. - Đoạn thẳng, đường thẳng có thuộc tính màu sắc, độ rộng, kiểu nét. - Vùng tô có thuộc tính của đường thẳng, và thuộc tính riêng là mầu tô và mẫu tô. - Ký tự có thuộc tính màu sắc, kiểu chữ, cỡ chữ, khoảng cách giữa các ký tự, hướng hiển thị ký tự 2.2 Các thuật toán vẽ điểm, đƣờng 2.2.1 Thuật toán vẽ đường thẳng Xét đoạn thẳng có hệ số góc 0 0. Với các đoạn thẳng dạng này, nếu (xi, yi) là điểm đã được xác định ở bước thứ i thì điểm kế tiếp (xi+1, yi+1) ở bước thứ i+1 sẽ là một trong hai điểm sau: 4
- x x i 1 i yi yi yi 1 Vấn đề đặt ra là chọn điểm vẽ như thế nào để đường thẳng được vẽ gần với đường thẳng muốn vẽ nhất và đạt được tối ưu hóa về mặt tốc độ ? Thuật toán DDA Là thuật toán tính toán các điểm vẽ dọc theo đường thẳng dựa vào hệ số góc của phương trình Δ y đường thẳng y = mx+b. Trong đó: m ,Δ y yi 1 yi ,Δ x x i 1 x i Nhận thấy tọa độ của Δ x điểm x sẽ tăng 1 đơn vị trên mỗi điểm vẽ, còn việc quyết định chọn yi +1 là yi +1 hay yi sẽ phụ thuộc vào giá trị sau khi làm tròn của tung độ y. Tuy nhiên, nếu tính trực tiếp giá trị thực của y ở mỗi bước từ phương trình y = mx+b thì cần một phép toán nhân và một phép toán cộng số thực: yi +1 = mxi +1 + b = m(xi + 1) + b = mxi + b + m Để cải thiện tốc độ, người ta khử phép nhân trên số thực. Ta có: yi = mxi + b ⇒ yi +1 = yi + m → int(yi +1) (2-1) Có 2 khả năng: 0 1: xi +1 = xi + 1/m → int(xi+1), yi +1 = yi + 1 Hai trường hợp này dùng để vẽ một điểm bắt đầu từ bên trái đến điểm cuối cùng bên phải của đường thẳng (xem hình 1.1). Nếu điểm bắt đầu từ bên phải đến điểm cuối cùng bên trái thì xét ngược lại : 0 1: xi +1 = xi - 1/m → int(xi+1), yi +1 = yi - 1 Hình 2.1 Dạng đường thẳng tương ứng 2 khả năng của m. Tương tự, có thể tính toán các điểm vẽ cho trường hợp m 1 (sinh viên tự tìm hiểu thêm). 5
- Thuật toán Bresenham Hình 2.2 Dạng đường thẳng nếu 0<m<=1 Gọi (xi +1,yi +1) là điểm thuộc đoạn thẳng (xem hình 1.2). Ta có y = m(xi +1) + b Đặt d1 = yi +1 – yi và d2 = (yi +1) - yi +1 Việc chọn điểm (xi +1, yi +1) là P1 hay P2 phụ thuộc vào việc so sánh d1 và d2 Nếu d1- d2<0 : chọn điểm P1, tức là yi +1= yi Nếu d1- d2 ≥0 : chọn điểm P2, tức là yi +1= yi +1 Ta có : d1 – d2 = 2yi+1 – 2yi – 1 = 2m(xi+1) + 2b – 2yi – 1 (2-4) Δy ⇒ Pi = Δx (d1 – d2) = Δx[2m(xi+1) + 2b - 2yi - 1] = x [ 2 (x i 1) 2b 2y i 1 ] Δx = 2Δy(xi+1) - 2Δx.yi + Δx(2b – 1) = 2Δy.xi - 2Δx.yi + 2Δy + Δx(2b - 1) Vậy C = 2Δy + Δx(2b - 1) = Const ⇒ Pi = 2Δy.xi - 2Δx.yi + C (2-5) Nhận xét rằng nếu tại bước thứ i ta xác định được dấu của Pi thì xem như ta xác định được điểm cần chọn ở bước (i+1). Ta có : Pi +1 - Pi = (2Δy.xi+1 - 2Δx.yi+1 + C) - (2Δy.xi - 2Δx.yi + C ) ⇔ Pi +1 = Pi + 2Δy - 2Δx ( yi+1 - yi ) Nếu Pi < 0 : chọn điểm P1, tức là yi +1= yi và Pi +1 = Pi + 2Δy Nếu Pi ≥ 0 : chọn điểm P2, tức là yi +1= yi +1 và Pi +1 = Pi + 2Δy - 2Δx (2-6) Giá trị P0 được tính từ điểm vẽ đầu tiên (xo, yo) theo công thức: Po = 2Δy.xo - 2Δx.yo + C Δy Do (xo ,yo ) là điểm nguyên thuộc về đoạn thẳng nên ta có: y mx b x b o o Δx o 6
- Thay yo vào phương trình trên ta được: Po = 2Δy - Δx Nhận xét: Thuật toán Bresenham chỉ thao tác trên số nguyên và chỉ tính toán trên phép cộng và phép nhân 2. Điều này là một cải tiến làm tăng tốc độ đáng kể so với thuật toán DDA. Ý tưởng chính của thuật toán này là ở chổ xét dấu Pi để quyết định điểm kế tiếp, và sử dụng công thức truy hồi Pi +1 - Pi để tính Pi bằng các phép toán đơn giản trên số nguyên. Tuy nhiên, việc xây dựng trường hợp tổng quát cho thuật toán Bresenham có phức tạp hơn thuật toán DDA. 2.2.2 Thuật toán vẽ đƣờng tròn, elip Trong hệ tọa độ Descartes, phương trình đường tròn bán kính R có dạng: 2 2 2 2 2 2 tâm O(0,0) : x + y = R ; tâm C(xc,yc): (x - xc ) + (y - yc ) = R (2-7) x x c Rcosθ Trong hệ tọa độ cực : , θ [0, 2 ] y yc Rsinθ Do tính đối xứng của đường tròn C, nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối xứng qua 2 trục tọa độ và 2 đường phân giác thì ta vẽ được cả đường tròn. Hình 2.3 Đường tròn với các điểm đối xứng. Thuật toán xét trung điểm Do tính đối xứng của đường tròn nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối xứng là vẽ được cả đường tròn. Thuật toán trung điểm đưa ra cách chọn yi+1 là yi hay yi-1 bằng cách so sánh điểm Q(xi+1,y) với điểm giữa là trung điểm (Midpoint) của S1 và S2. Chọn điểm bắt đầu để vẽ là (0,R). Giả sử (xi, yi) là điểm nguyên đã tìm được ở bước thứ i (xem hình 1.4), thì điểm (xi+1, yi+1) ở bước i+1 là sự lựa chọn giữa S1 và S2. 7
- x x 1 i 1 i yi 1 y i 1 yi Hình 2.4 Đường tròn với điểm Q(xi +1, y) và trung điểm. Đặt F(x,y) = x2 + y2 - R2 , ta có : F(x,y) 0 , nếu điểm (x,y) nằm ngoài đường tròn. Xét Pi = F(MidPoint) = F(xi +1, yi - 1/2). Ta có : Nếu Pi = 0 : điểm MidPoint nằm ngoài đường tròn. Khi đó, điểm Q gần với điểm S2 hơn nên ta chọn yi+1 = yi - 1. Mặt khác : Pi+1 - Pi = F(xi+1 +1, yi+1 - 1/2) - F(xi + 1, yi - 1/2) 2 2 2 2 2 2 = [(xi+1 +1) + (yi+1 - 1/2) - R ] - [(xi +1) + (yi - 1/2) - R ] 2 2 = 2xi + 3 + ((yi+1) - (yi) ) - (yi+1 - yi) Vậy: Nếu Pi = 0 : chọn yi+1 = yi - 1. Khi đó Pi+1 = Pi + 2xi - 2yi +5 Pi ứng với điểm ban đầu (xo , yo) = (0,R) là: Po = F(xo + 1, yo - 1/2) = F(1, R - 1/2) = 5/4 -R Thuật toán Bresenham 8
- Tương tự thuật toán vẽ đường thẳng Bresenham, các vị trí ứng với các tọa độ nguyên nằm trên đường tròn có thể tính được bằng cách xác định một trong hai pixel gần nhất với đường tròn hơn trong mỗi bước. Hình 2.5 Đường tròn với khoảng cách d1 và d2. 2 2 2 2 2 2 2 2 2 Ta có: d1 = (yi) - y = (yi) - (R - (xi + 1) ) và d2 = y - (yi - 1) = (R - (xi + 1) ) - (yi - 2 1) 2 2 Đặt Pi = d1 - d2 , do đó Pi+1 = Pi + 4xi + 6 + 2((yi+1) - (yi) ) - 2(yi+1 - yi) Nếu Pi = 0 : chọn yi+1 = yi - 1. Khi đó Pi+1 = Pi + 4(xi - yi ) + 10 Po ứng với điểm ban đầu (xo , yo) = (0,R) là: Po= 3 - 2R. Thuật toán vẽ elip Tương tự thuật toán vẽ đường tròn, sử dụng thuật toán Bresenham để vẽ, ta chỉ cần vẽ 1/4 ellipse, sau đó lấy đối xứng qua các trục tọa độ sẽ vẽ được toàn bộ ellipse. x 2 y2 Xét ellipse có tâm O, các bán kính là a và b, phương trình là: 1 a 2 b2 Chọn tọa độ pixel đầu tiên cần hiển thị là (xi ,yi) = (0,b). Cần xác định pixel tiếp theo là (xi+1 ,yi+1). Ta có : x x 1 i 1 i y y i 2 2 2 2 i 1 ; d1 = (y ) - y ; d2 = y - (y - 1) yi 1 i i 2b 2 P P 2((y )2 (y )2 ) 2(y y ) (2x 3) Đặt Pi = d1- d2, có i 1 i i 1 i i 1 i a 2 i 2b 2 Nếu Pi < 0 : chọn yi+1 = yi, P P ( 2x 3) (2 - 10) i 1 i a 2 i 2b 2 Pi 1 Pi (2x i 3) a 2 9
- Nếu Pi >= 0 : chọn yi+1 = yi – 1, Po ứng với điểm ban đầu (xo, yo) = (0, b) là: 2b 2 Po 2 2b 1 2.3 Thuật toán tô màu a Tô màu một vùng là thay đổi màu sắc của các điểm vẽ nằm trong vùng cần tô. Một vùng tô thường đựơc xác định bởi một đường khép kín nào đó gọi là đường biên. Dạng đường biên đơn giản thường gặp là đa giác. Dạng đường biên đơn giản thường gặp là đa giác. Việc tô màu thường chia làm 2 công đoạn : - Xác định vị trí các điểm cần tô màu. - Quyết định tô các điểm trên bằng màu nào. Công đoạn này sẽ trở nên phức tạp khi ta cần tô theo một mẫu tô nào đó chứ không phải tô thuần một màu. Có 3 cách tiếp cận chính để tô màu. Đó là : tô màu theo từng điểm (có thể gọi là tô đơn giản), tô màu theo dòng quét và tô màu dựa theo đường biên. Chúng ta sẽ giới thiệu 2 loại thuật toán tô mầu đơn giản và tô màu đường biên. Thuật toán tô màu theo dòng quét thì sinh viên tự tìm hiểu. 2.3.1 Tô đơn giản Thuật toán này bắt đầu từ việc xác định một điểm có thuộc vùng cần tô hay không ? Nếu đúng là điểm thuộc vùng cần tô thì sẽ tô với màu muốn tô. a. Tô đường tròn Để tô đường tròn thì ta tìm hình vuông nhỏ nhất ngoại tiếp đường tròn bằng cách xác định điểm trên bên trái (xc – r, yc – r) và điểm dưới bên phải (xc + r, yc + r) của hình vuông . Giải thuật giả mã như sau: i chạy từ xc-r đến xc+r j chạy từ yc-r đến yc+r tìm khoảng cách d giữa hai điểm (i,j) và tâm (xc,yc) nếu d<r thì tô điểm (i,j) với màu muốn tô Hình 2.6 đường tròn nội tiếp hình vuông. 10
- b.Tô đa giác Trước tiên, chúng ta giải quyết bài toán tìm hình chữ nhật nhỏ nhất có các cạnh song song với hai trục tọa độ chứa đa giác cần tô dưa vào hai tọa độ (xmin, ymin), (xmax, ymax). Hình 2.7 đa giác nội tiếp hình chữ nhật. Trong đó, xmin, ymin là hoành độ và tung độ nhỏ nhất, xmax, ymax là hoành độ và tung độ lớn nhất của các đỉnh của đa giác. Cách tô đa giác là cho x đi từ xmin đến xmax, y đi từ ymin đến ymax (hoặc ngược lại). Xét điểm P(x,y) có thuộc đa giác không ? Nếu có thì tô với màu cần tô. Thông thường một điểm nằm trong đa giác thì số giao điểm từ một tia bất kỳ xuất phát từ điểm đó cắt biên của đa giác phải là một số lẻ lần. Đặc biệt, tại các đỉnh cực trị (cực đại hay cực tiểu ) thì một giao điểm phải được tính 2 lần (xem hình 2.5). Tia có thể qua phải hay qua trái. Thông thường ta chọn tia qua phải. Hình 2.8 Xét đa giác gồm 13 đỉnh là Po , P1 , , P12 , Po Gọi tung độ của đỉnh Pi là Pi.y . Nếu : Pi.y Max ( Pi+1.y, Pi-1.y) thì Pi là đỉnh cực trị ( cực tiểu hay cực đại ). Pi-1.y Pi.y > Pi+1.y thì Pi là đỉnh đơn điệu. Pi = Pi+1 và Pi.y Max ( Pi+2.y, Pi-1.y) thì đoạn [Pi,Pi+1] là đoạn cực trị ( cực tiểu hay cực đại ). Pi = Pi+1 và Pi-1.y Pi.y > Pi+2.y thì đoạn [Pi,Pi+1] là đoạn đơn điệu. Thuật toán kiểm tra điểm có nằm trong đa giác - Với mỗi đỉnh của đa giác ta đánh dấu là 0 hay 1 theo qui ước như sau: nếu là đỉnh cực trị hay đoạn cực trị thì đánh số 0. Nếu là đỉnh đơn điệu hay đoạn đơn điệu thì đánh dấu 1. - Xét số 11
- giao điểm của tia nữa đường thẳng từ P là điểm cần xét với biên của đa giác. Nếu số giao điểm là chẳn thì kết luận điểm không thuộc đa giác. Ngược lại, số giao điểm là lẻ thì điểm thuộc đa giác. 2.3.2 Tô màu đường biên Bài toán đặt ra : Cần tô màu một vùng nếu biết được màu của đường biên vùng tô và một điểm nằm bên trong vùng tô. Ý tưởng : Bắt đầu từ một điểm nằm bên trong vùng tô, kiểm tra các điểm lân cận của nó đã được tô với màu muốn tô, hay điểm lân cận có màu trùng với màu biên không ? Nếu cả hai trường hợp đều không phải thì ta sẽ tô điểm đó với màu muốn tô. Quá trình này được lặp lại cho đến khi không còn tô được nữa thì dừng. Có 2 quan điểm về cách tô này. Đó là dùng 4 điểm lân cận (có thể gọi là 4 liên thông) hay 8 điểm lân cận (8 liên thông) Cài đặt minh họa thuật toán 4 liên thông Boundary_fill ( x,y, mauto, maubien :integer); mau_ht : integer; begin mau_ht:= getpixel(x, y); If (mau_ht maubien) then begin putpixel(x,y,color); Boundary_fill ( x+1,y, mauto, maubien ); Boundary_fill ( x-1,y, mauto, maubien ); Boundary_fill ( x,y+1, mauto, maubien ); Boundary_fill ( x,y-1, mauto, maubien ); end; end; Nhận xét : - Thuật toán có thể không chính xác khi có một số điểm nằm trong vùng tô có màu là màu cần tô của vùng. - Việc thực hiện gọi đệ qui làm thuật toán không thể sử dụng cho vùng tô lớn ( tràn stack). - Có thể khắc phục việc tràn stack bằng cách giảm số lần gọi đệ qui. Khởi đầu điểm (x,y) là điểm có vị trí đặc biệt trong vùng tô, sau đó, gọi đệ qui các điểm lân cận của (x,y). 12
- 2.4 Bài tập áp dụng Bài 1 Tại sao phải so sánh giá trị Pi với 0 trong các giải thuật Bresenham hay Midpoint. Bản chất của so sánh là gì? Gợi ý: giá trị Pi tạo ra không có phép chia nguyên, tính toán nhanh và chính xác hơn là tính trực tiếp. Bài 2 Cặt đặt các giải thuật Bresenham, MidPoint vẽ đoạn thẳng với hệ số góc trong khoảng [-1, 1], đường tròn. Gợi ý: Vẽ đường thẳng, ta xét 3 trường hợp 0 < m < 1, -1 < m < 0, m= 0. Bài 3 Giải thích tại sao chỉ chọn cung 1/8 để vẽ rồi lấy đối xứng mà không mở rộng cho cung 1/16 hay 1/32. Gợi ý: Nếu cung độ dài nhỏ hơn 1/8 thì giải thuật Midpoint không còn đúng nữa, vì không chính xác. Bài 4 Cài đặt giải thuật vẽ elip có tâm là gốc tọa độ, bán kính trục chính, trục phụ là a, b. Gợi ý: Dựa trên cơ sở giải thuật Midpoint cho vẽ đường tròn, nhưng vẽ cho cung ¼ rồi lấy đối xứng. Bài 5 Cài đặt thuật toán tô màu đường biên cho đối tượng hình tròn. Gợi ý: Sử dụng giả thuật tô mầu đường biên cải tiến, sử dụng giải thuật không đệ quy thì tốt hơn giải thuật đệ quy. 13
- CHƢƠNG III CÁC PHÉP BIẾN ĐỔI ĐỒ HỌA 2 CHIỀU 3.1 Các phép biến đổi cơ sở Trong lĩnh vực đồ họa máy tính, hình dạng và kích thước của đối tượng 2 chiều đặc trưng bởi một số 2 chiều quan hệ với hệ thống tọa độ Descartes. Một tập hợp các phép biến đổi hình học áp dụng cho đối tượng như: dịch chuyển, thay đổi kích thước, phương chiều của nó . Các hệ CAD luôn có thao tác như: scale, move, rotate, copy thực hiện những phép biến đổi hình học cơ sở. 3.1.1 Phép tịnh tiến Khả năng tịnh tiến đối tượng là một đặc điểm cần thiết của mọi hệ thống đồ họa. Phép tịnh tiến làm cho đối tượng dịch chuyển theo một hướng với độ dài xác định. Dưới dạng toán học, mô tả với hệ phương trình sau: x' = x + Tx (3-1) y' = y + Ty 3.1.2 Phép biến đổi tỷ lệ Phép biến đổi tỉ lệ làm thay đổi kích thước đối tượng. Để co hay giãn tọa độ của một điểm P(x,y) theo trục hoành và trục tung lần lượt là Sx và Sy (gọi là các hệ số tỉ lệ), ta nhân Sx và Sy lần lượt cho các tọa độ của P. x' = x.Sx (3-2) y' = y.Sy - Khi các giá trị Sx , Sy nhỏ hơn 1, phép biển đổi sẽ thu nhỏ đối tượng. Ngược lại, khi các giá trị này lớn hơn 1, phép biến đổi sẽ phóng lớn đối tượng. - Khi Sx = Sy , người ta gọi đó là phép đồng dạng (uniform scaling). Đây là phép biến đổi bảo toàn tính cân xứng của đối tượng. Ta gọi là phép phóng đại nếu |S|>1 và là phép thu nhỏ nếu |S|<1. - Nếu hai hệ số tỉ lệ khác nhau thì ta gọi là phép không đồng dạng. Trong trường hợp hoặc Sx hoặc Sy có giá trị 1, ta gọi đó là phép căng (strain). 3.1.3 Phép đối xứng Thuật ngữ đối xứng hiểu như hình ảnh trong gương. Phép đối xứng sử dụng trong việc tạo các hình đối xứng. Ví dụ như một nửa hình được tạo ra, sau đó lấy đối xứng để tạo nguyên hình, ví dụ như việc tạo khung đỡ mái nhà. Các ứng dụng như CAD luôn có chỉ thị Mirror thực hiện chức năng trên. Phép đối xứng qua điểm hay qua trục nào đó. Ma trận đối xứng sẽ có dạng chung như sau: a 0 0 [Tr] 0 b 0 (3-3) 0 0 1 14
- Các trường hợp khác nhau của đối xứng trục X, Y, Z như sau: 1 0 0 -1 0 0 -1 0 0 [Tr] 0 -1 0 [Tr] 0 1 0 [Tr] 0 -1 0 X y Z 0 0 1 0 0 1 0 0 1 3.1.4 Phép quay Phép quay làm thay đổi hướng của đối tượng. Một phép quay đòi hỏi phải có tâm quay, góc quay. Góc quay dương thường được qui ước là chiếu ngược chiều kim đồng hồ. Ta có công thức biến đổi của phép quay điểm P(x,y) quanh gốc tọa độ góc θ tới vị trí P’(x’, y’): x' = x.cosθ - y.sinθ (3-4) y' = x.sinθ + y.cosθ cosθ sinθ 0 hoặc dưới dạng ma trận sau: x' y' 1 x y 1 sinθ cosθ 0 0 0 1 3.2 Kết hợp các phép biến đổi Những phép biến hình 2 chiều đòi hỏi không chỉ một mà là chuỗi thứ tự các phép biến hình cơ sở để cuối cùng thu được mục tiêu mong muốn. 3.2.1 Kết hợp các phép tịnh tiến Nếu ta thực hiện phép tịnh tiến lên điểm P được điểm P', rồi lại thực hiện tiếp một phép tịnh tiến khác lên P' được điểm Q. Như vậy, điểm Q là ảnh của phép biến đổi kết hợp hai phép tịnh tiến liên tiếp. Qx = Px + ( Tx1 +Tx2 ) Qy = Py + ( Ty1 + Ty2 ) Vậy kết hợp hai phép tịnh tiến là một phép tịnh tiến. Từ đó, ta có kết hợp của nhiều phép tịnh tiến là một phép tịnh tiến. 3.2.2 Kết hợp các phép biến đổi tỉ lệ Tương tự như phép tịnh tiến, ta có tọa độ điểm Q là điểm có được sau hai phép tịnh tiến M1(Sx1, Sy1 ), M2 (Sx2, Sy2 ) là : Qx = Px* Sx1* Sx2 Qy = Py* Sy1* Sy2 15
- 3.2.3 Kết hợp các phép quay Tương tự, ta có tọa độ điểm Q là điểm kết quả sau khi kết hợp hai phép quay quanh gốc tọa độ MR1(θ1) và MR2(θ2) là : Qx = Px*cos(θ1+θ2) - Py*sin (θ1+θ2) Qy = Px*sin(θ1+θ2) + Py*cos(θ1+θ2) 3.3 Một số phép biến đổi khác 3.3.1 Phép biến dạng Phép biến dạng làm thay đổi hình dạng đối tượng, biến dạng theo trục hoành hay trục tung bằng cách thay đổi tọa độ điểm ban đầu theo cách sau đây: 1 0 0 1 s y 0 [M] s 1 0 [M] 0 1 0 X x y 0 0 1 0 0 1 Sx và Sy là các hệ số biến dạng theo trục hoành và trục tung. 3.3.2 Phép đối xứng Phép đối xứng xem như phép quay quanh trục đối xứng góc 180o. Nếu trục đối xứng là trục hoành hay trục tung , ta có các ma trận biến đổi đối xứng qua trục hoành và trục tung như sau: 1 0 0 -1 0 0 [M] 0 -1 0 [M] 0 1 0 RFX RFY 0 0 1 0 0 1 3.3.3 Tính chất của phép biến đổi affine Phép biến đổi affine là phép biến đổi tuyến tính, như những biến đổi trên. Sau đây là một vài tích chất cơ bản của phép biến đổi affine: - Phép biến đổi affine bảo toàn đường thẳng. - Tính song song của các đường thẳng được bảo toàn. - Tính tỷ lệ khoảng cách được bảo toàn. 3.4 Phép biến đổi giữa các hệ tọa độ Để thuận tiện cho việc mô tả đối tượng, thông thường đối tượng được mô tả trong hệ tọa độ cục bộ gắn với chúng. Tuy nhiên, muốn hiển thị toàn bộ ảnh bao gồm nhiều đối tượng thành phần, các mô tả phải chuyển về một hệ tọa độ. Quá trình chuyển đổi tọa độ chia thành 2 loại: - Từ hệ tọa độ cực, tọa độ cầu sang hệ tọa độ đề các. - Giữa 2 hệ tọa độ đề các. Trong nội dung trình bày của chương này, ta chỉ xét đối tượng hình học trong không gian tọa độ Đề các, do đó ta khảo sát phép biến đổi giữa 2 hệ tọa độ Đề các. Giả sử ta có hệ tọa độ I có gốc 16
- tọa độ O và các véc tơ đơn vị là i, j . Hệ tọa độ II là ảnh của hệ tọa độ I qua phép biến đổi T(M), có gốc tọa độ O’ và các véc tơ đơn vị là tương ứng u, v. Lúc này, một điểm P(x, y) trong hệ tọa độ I sẽ biến đổi thành điểm Q(a, b) trong hệ tọa độ II. Qua chứng minh, tìm được mối liên hệ giữa 2 điểm Q và P: Q = P.M-1 3.5 Bài tập áp dụng Bài 1 Cho biết phép biến đổi hình vuông thành hình chữ nhật? Gợi ý: Sử dụng phép biến đổi tỷ lệ Bài 2 Chứng minh rằng ma trận phép biến đổi lấy đối xứng qua đường thẳng y = x tương đương với kết hợp của phép lấy đối xứng trục hoành và phép quay quanh gốc tọa độ góc 90o . Gợi ý: Tìm ma trận M1 của phép lấy đối xứng qua trục y = x, ma trận M2 của phép đối xứng qua o trục hoành, ma trận M3 của phép quay 90 quanh gốc tọa độ. Chứng minh M1 = M2 M3 Bài 3 Chứng minh phép quay có tính giao hoán. Gợi ý: Giả sử với phép quay quanh gốc tọa độ 1 góc α, ta có được kết quả: MR1(α1) MR2(α2) = MR ( α1 + α2 ) = MR2(α2) MR1(α1) Bài 4 Chứng minh phép biến đổi affine được phân tích thành tích của các phép tịnh tiến, tỷ lệ, quay. Gợi ý: Áp dụng quy tắc phân rã phép biến đổi. Bài 5 Hệ tọa độ x’O’y’ nhận được bằng cách quay quanh gốc tọa độ góc α, rồi tịnh tiến theo véc tơ (trx, try) trong hệ tọa độ xOy. Hãy cho biết công thức tọa độ của điểm Q trong hệ tọa độ x’O’y’ nếu P(x, y) là tọa độ của điểm P trong xOy. Gợi ý: Hệ tọa độ x’O’y’ là ảnh của hệ tọa độ xOy, cần tìm ma trận biến đổi là tích giữa ma trận quay và ma trận tịnh tiến. 17