CHƢƠNG 3 : PHÉP BIẾN ĐỔI TRONG ĐỒ HỌA HAI CHIỀU
5. Phép đối xứng
Phép đối xứng trục có thể xem là phép quay quanh trục đối xứng mõt góc 1800 .
Phƣơng trình ban đầu:
{ Hay
(Qx, Qy) = (Px, Py) ( ) (trx, try) Trục đối xứng là trục hoành : M = ( ) Ta có: { M = ( ) 6. Phép biến dạng (Shearing)
Phép biến dạng là phép biến đổi làm thay đổi, méo mó hình dạng của các đối tƣợng. Hai dạng phép biến dạng thƣờng gặp đó là biến dạng theo phƣơng
Hình 3.4 Phép quay quanh một điểm bất kỳ
32 trục x và biến dạng theo phƣơng trục y bằng cách thay đổi tọa độ (x,y) của điểm ban đầu theo cách sau :
- Biến dạng theo phƣơng trục x sẽ làm thay đổi hồnh độ cịn tung độ vẫn giữ nguyên
Ví dụ : biến đổi điểm P(Px, Py) thành điểm Q(Qx, Qy) theo phƣơng trục x là phép
biến đổi đƣợc biểu diễn bởi phƣơng trình sau: {
M = ( )
- Biến dạng theo phƣơng trục y sẽ làm thay đổi tung độ cịn hồnh độ vẫn giữ nguyên
{ M = ( )
7. Phép biến đổi Affine ngƣợc
Phép biến đổi ngƣợc dùng để undo một phép biến đổi đã thực hiện. Gọi Q là ảnh của P qua phép biến đổi T có ma trận biến đổi M là : P.M. Phép biến đổi ngƣợc T-1
sẽ có ma trận biến đổi là M-1 là ma trận nghịch đảo của ma trận M.
Nếu ( ) thì
( )
Hình 3.5 Phép biến dạng theo phương trục x với hệ số biến dạng h=3
33 Ta có: Phép tịnh tiến : ( ) thì ( ) Phép quay: ( ) thì ( ) Phép biến đổi tỉ lệ: ( ) thì ( ) Phép biến dạng: ( ) thì ( )
8. Một số tính chất của phép biến đổi affine
- Bảo toàn đƣờng thẳng : ảnh của đƣờng thẳng qua phép biến đổi affine là đƣờng thẳng.
Ví dụ : Để biến đổi một đoạn thẳng qua hai điểm A và B, chỉ cần thực hiện phép biến đổi cho A và B. Do vậy, để biến đổi một đa giác, chỉ cần thực hiện phép biến đổi đối với các đỉnh của đa giác.
- Bảo tồn tính song song : ảnh của hai đƣờng thẳng song song là song song.
Ví dụ : ảnh của hình vng, hình chữ nhật, hình bình hành, hình thoi sau phép biến đổi là hình bình hành.
- Bảo tồn tỉ lệ khoảng cách : Nếu điểm M chia đoạn AB theo tỉ số m thì ảnh của M là M' cũng chia đoạn AB theo tỉ số m.
Ví dụ : Trong hình vng, các đƣờng chéo cắt nhau tại trung điểm của mỗi đƣờng nên các đƣờng chéo của bất kỳ hình bình hành nào cũng cắy nhau tại trung điểm của mỗi đƣờng.
Trong tam giác đều, giao điểm của 3 đƣờng trung tuyến chia mỗi đƣờng theo tỉ số 1:2. Do ảnh của tam giác đều qua phép biến đổi affine la một tam giác nên giao điểm của các đƣờng trung tuyến trong một tam giác cũng sẽ chia chúng theo tỉ lệ 1:2
9. Hệ tọa độ thuần nhất
Tọa độ thuần nhất của một điểm trên mặt phẳng đƣợc biểu diễn bằng bộ ba số tỉ lệ (xh , yh , h) không đồng thời bằng 0 và liên hệ với các tọa độ (x, y) của
điểm đó bởi cơng thức: và
34 Nếu một điểm có tọa độ thuần nhất là (x,y,z) thì nó cũng có tọa độ thuần nhất là (hx, hy, hz) trong đó h là số thực khác 0 bất kỳ.
Một điểm P(x,y) sẽ đƣợc biểu diễn dƣới dạng tọa độ thuần nhất là (x,y,1). Trong hệ tọa độ thuần nhất các ma trận của phép biến đổi đƣợc biểu diễn nhƣ sau:
Phép tịnh tiến: (
) Phép biến đổi tỉ lệ: ( )
Phép quay: ( )
Thuận lợi của hệ tọa độ thuần nhất là khi ta kết hợp hai hay nhiều phép biến đổi affine thì ma trận hợp của nhiều phép biến đổi đƣợc tính bằng cách nhân các ma trận của các phép biến đổi thành phần.
10. Kết hợp các phép biến đổi
Quá trình áp dụng các phép biến đổi liên tiếp để tạo nên một phép biến đổi tổng thể đƣợc gọi là sự kết hợp các phép biến đổi.
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
{
(
) ( ) ( ) 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
35 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à:
{ ( )*( ) ( ) 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( ) và MR2( )
{
( ) ( )
36
CÂU HỎI VÀ BÀI TẬP CHƢƠNG 3
1. Vẽ một hình bình hành bằng cách sử dụng phép tịnh tiến 2. Vẽ một hình vng ABCD (xem hình a).
- Tịnh tiến hình vng đó đến vị trí khác. - Phóng to hình vng ABCD.
- Biến dạng hình vng thành hình thoi
3. Vẽ một bông hoa bằng cách vẽ các elip nghiêng một góc G độ với các màu khác nhau.
4. Vẽ hình tam giác, hình vng. Cho hình xoay tại tâm hình một góc G tại mỗi vị trí xoay vẽ một hình với màu khác nhau. Di chuyển tâm sang vị trí khác thực hiện lại thao tác trên
37
CHƢƠNG 4: WINDOWING VÀ CLIPPING Mã chƣơng: MH 15 -04 Mã chƣơng: MH 15 -04
Giới thiệu:
Chƣơng này sẽ đề cập tới các kĩ thuật để hiển thị các đối tƣợng hai chiều trên các thiết bị nhƣ màn hình, máy in,
Mục tiêu:
Học xong chương này người học có khả năng:
- Hiểu đƣợc thế nào là window
- Hiểu rõ các thao tác loại bỏ phần hình ảnh nằm ngồi một vùng cho trƣớc (thao tác này đƣợc gọi là xén hình)
Nội dung chính: 1. Tổng quan
Hệ tọa độ Descartes là dễ thích ứng cho các chƣơng trình ứng dụng để miêu tả các hình ảnh (picture) trên hệ tọa độ thế giới thực (world coordinate system). Các hình ảnh đƣợc định nghĩa trên hệ tọa độ thế giới thực này sau đó đƣợc hệ đồ họa vẽ lên các hệ tọa độ thiết bị (device coordinate). Điển hình, một vùng đồ họa cho phép ngƣời sử dụng xác định vùng nào của hình ảnh sẽ đƣợc hiển thị và bạn muốn đặt nó ở nơi nào trên hệ tọa độ thiết bị. Một vùng đơn lẻ hoặc vài vùng của hình ảnh có thể đƣợc chọn. Những vùng này có thể đƣợc đặt ở những vị trí tách biệt, hoặc một vùng có thể đƣợc chèn vào một vùng lớn hơn. Quá trình biến đổi này liên quan đến những thao tác nhƣ tịnh tiến, biến đổi tỷ lệ vùng đƣợc chọn và xóa bỏ những phần bên ngồi vùng đƣợc chọn. Những thao tác này đƣợc gọi là windowing và clipping (xem hình 4.1).
38
2. Các định nghĩa về Windowing
Một vùng có dạng hình chữ nhật đƣợc xác định trong hệ tọa độ thế giới thực đƣợc gọi là một cửa sổ (window). Cịn vùng hình chữ nhật trên thiết bị
hiển thị để cửa sổ đó ánh xạ đến đƣợc gọi là một vùng quan sát (viewport).
Hình 4.1 minh họa việc ánh xạ một phần hình ảnh vào trong một viewport. Việc ánh xạ này gọi là một phép biến đổi hệ quan sát (viewing transformation), biến đổi cửa sổ (windowing tranformation), biến đổi chuẩn hóa (normalization transformation).
Các lệnh để xây dựng một cửa sổ và vùng quan sát từ một chƣơng trình ứng dụng có thể đƣợc định nghĩa nhƣ sau:
set_window(xw_min, xw_max, yw_min, yw_max) set_viewport(xv_min, xv_max, yv_min, yv_max)
Các tham số trong mỗi hàm đƣợc dùng để định nghĩa các giới hạn tọa độ của các vùng chữ nhật. Các giới hạn của cửa sổ đƣợc xác định trong hệ tọa độ thế giới thực. Hệ tọa độ thiết bị chuẩn thƣờng đƣợc dùng nhất cho việc xác định
vùng quan sát, dù rằng hệ tọa độ thiết bị có thể đƣợc dùng nếu chỉ có một thiết
bị xuất (output device) duy nhất trong hệ thống. Khi hệ tọa độ thiết bị chuẩn đƣợc dùng, thiết bị xuất sẽ có giá trị tọa độ trong khoảng 0..1. Một sự xác định vùng quan sát đƣợc cho với các giá trị trong khoảng này.
Bằng việc thay đổi vị trí vùng quan sát, các đối tƣợng có thể đƣợc hiển thị ở bất kỳ vị trí nào trên thiết bị xuất. Cũng nhƣ vậy, bằng việc thay đổi kích thƣớc vùng quan sát, kích thƣớc các phần của đối tƣợng có thể bị thay đổi. Khi
Hình 4.2 Ánh xạ một cửa sổ vào một vùng quan sát
39 các cửa sổ đƣợc đặt lại các kích thƣớc khác đƣợc ánh xạ thành cơng vào một vùng quan sát, các hiệu ứng về phóng to (zooming) có thể thực hiện đƣợc.
Khi các cửa sổ đƣợc làm nhỏ hơn, ngƣời dùng có thể phóng to vài nơi trên ảnh để xem chi tiết hơn mà khơng cần phóng to tồn bộ cửa sổ. Các hiệu ứng
panning có thể đƣợc tạo ra bằng cách di chuyển một cửa sổ có kích thƣớc xác
định ngang qua một hình ảnh lớn.
Một phƣơng pháp khác để xây dựng các vùng đa cửa sổ và vùng quan sát trong gói đồ họa là gán nhãn đến mỗi sự xác định. Điều này có thể đƣợc làm bằng việc thêm đối số về cửa sổ và vùng quan sát để xác định vùng chỉ định. Các tham số có thể là một chỉ số nguyên (0, 1, 2, 3, …). Các lệnh xuất sau đó dùng các chỉ số này để chỉ định sự chuyển đổi từ cửa sổ đến vùng quan sát nào. Cơ chế đánh số này cũng có thể đƣợc dùng để gắn kết một độ ƣu tiên với mỗi vùng quan sát, đây là cơ sở để cài đặt tính chất nhìn thấy đƣợc của các cửa sổ nằm đè lên nhau. Các vùng quan sát đƣợc hiển thị theo độ ƣu tiên đƣợc trình bày ở hình 4.3:
Về cửa sổ và vùng quan sát vừa đƣợc giới thiệu đƣợc dùng cho các vùng hình chữ nhật, các đƣờng biên của chúng song song với các trục tọa độ. Vài gói đồ họa cho phép ngƣời dùng chọn kiểu cửa sổ và vùng quan sát khác. Một cửa sổ bị quay, nhƣ hình 4.4, có thể đƣợc xác định với tham số là góc a trong một lệnh về cửa sổ.
Hình 4.3 Hiển thị các vùng quan sát theo thứ tự ưu tiên. Các vùng quan sát có số thứ tự
nhỏ hơn sẽ có quyền ưu tiên cao
hơn.
Hình 4.4 Quay cửa sổ, được xác định bởi một góc a.
40 Ngồi hình chữ nhật cửa sổ có nhiều hình dạng đặc biệt khác
3. Các thuật toán Clipping 3.1. Khái niệm: 3.1. Khái niệm:
Xén tỉa là tiến trình xác định các điểm của một đối tƣợng nằm trong hay ngoài cửa sổ hiển thị. Nằm trong đƣợc hiển thị, nằm ngoài loại bỏ.
Việc loại từng điểm ảnh của đối tƣợng thƣờng chậm nhất là khi đối tƣợng mà phần lớn nằm ngoài cửa sổ hiển thị
3.2. Clipping điểm:
Giả sử (x,y) là toạ độ của một điểm, vậy điểm đó đƣợc hiển thị khi thoả mãn:
Xmin <= x <= Xmax Ymin <= y <= Ymax
3.3. Clipping đoạn thẳng
3.2.1. Thuật toán Cohen-Sutherland
Ý tƣởng: Các đoạn thẳng có thể rơi vào các trƣờng hợp sau:
- Hiển thị (visible): cả hai đầu cuối của đoạn thẳng đều nằm bên trong cửa sổ
Hình 4.4 Quá trình chuyển đổi các cửa sổ vào trong các vùng quan sát
41 - Không hiển thị (not visible): đoạn thẳng xác định nằm ngoài cửa sổ. Điều này xảy ra khi đoạn thẳng từ (x1,y1) đến (x2,y2) thoả màn bất kỳ một trong bốn bất đẳng thức sau:
x1,x2 >xmaxy1,y2 > ymax x1,x2 < xminy1,y2 < ymin - Xén tỉa: đoạn thẳng cần xén tỉa
Việc cài đặt giải thuật chia làm hai bƣớc:
+ Gán mã vùng 4-bit cho mỗi điểm cuối của đoạn thẳng
Mã vùng đƣợc xác định theo 9 vùng của mặt phẳng mà các điểm cuối nằm vào đó. Một bít đƣợc cài đặt true (1) hoặc false (0).
Bít 1: điểm cuối ở bên trên cửa sổ = sign(y-ymax)
Bít 2: điểm cuối ở bên dƣới cửa sổ = sign(ymin-y) Bít 3: điểm cuối ở bên phải cửa sổ = sign(x-xmax) Bít 4: điểm cuối ở bên trái cửa sổ = sign(xmin-x) Qui ƣớc sign(a) = 1 nếu a dƣơng và 0 nếu a âm
+ Q trình kiểm tra vị trí của đoạn thẳng so với cửa sổ. Tất cả điểm đầu và điểm cuối của đoạn thẳng đã có mã.
Nếu mã của P1 hoặc P2 đều = 0000 thì tồn bộ đoạn thẳng thuộc phần hiển thị.
Nếu mã của P1 và P2 có cùng một vị trí thì “ 2 điểm nằm về 1 phía của cửa sổ”
+ Xét giao điểm
Hình 4.6 Mặt phẳng mã trong các trường hợp clipping đoạn thẳng
42
- Tìm giao điểm của đƣờng thẳng với cửa sổ, chính xác hơn là với phần mở rộng của đƣờng biên.
- Chú ý: các đƣờng biên mà điểm cuối đƣợc chọn sẽ “đẩy ngang qua” nhằm thay đổi mã “1” thành “0” - Nếu: Bít 1 là 1: cắt y=ymax Bít 2 là 1: cắt y= ymin Bít 3 là 1: cắt x=xmax Bít 4 là 1: cắt x=xmin
Nhìn trên hình ta có: gọi điểm cuối của đoạn (x1,y1)
Nếu C đƣợc chọn thì đƣờng y=ymin chọn để tính phần cắt nhau (bít 2 = 1) Nếu D đƣợc chọn thì y=ymax hoặc x=xmax (bít 1 và bít 3 =1)
Toạ độ cắt:
Hoặc
Có m là độ dốc của đoạn thẳng m=(y2-y1)/(x2-x1) Bây giờ thay điểm cuối (x1,y1) với điểm cắt (xi,yi)
43 3.2.2. Giải thuật Lyangbarsky
Thuật toán Liang-Barsky đƣợc phát triển dựa vào việc phân tích dạng tham số của phƣơng trình đoạn thẳng.
Ứng với mỗi giá trị t, ta sẽ có một điểm P tƣơng ứng thuộc đƣờng thẳng. Các điểm ứng với t 1sẽ thuộc về tia P2x.
Các điểm ứng với t 0 sẽ thuộc về tia P2x’.
Các điểm ứng với 0 t 1 sẽ thuộc về đoạn thẳng P1P2 .
Tập hợp các điểm thuộc về phần giao của đoạn thẳng và cửa sổ ứng với các giá trị t thỏa hệ bất phƣơng trình :
Lúc này ta viết hệ phƣơng trình trên dƣới dạng :
Nhƣ vậy việc tìm đoạn giao thực chất là tìm nghiệm của hệ bất phƣơng trình này. Có hai khả năng xảy ra đó là :
44 Hệ bất phƣơng trình vơ nghiệm, nghĩa là đƣờng thẳng khơng có phần giao với cửa sổ nên sẽ bị loại bỏ
Hệ bất phƣơng trình có nghiệm, lúc này tập nghiệm sẽ là các giá trị t thỏa t t1,t2 0,1.
Ta xét các trƣờng hợp :
- Nếu k 1,2,3,4: (pk 0) (qk 0)thì rõ ràng bất phƣơng trình ứng với k trên là vơ nghiệm, do đó hệ vơ nghiệm.
- Nếu k 1,2,3,4: (pk 0) (qk 0)thì với các bất phƣơng trình mà ứng với pk = 0 là các bất phƣơng trình hiển nhiên, lúc này hệ bất phƣơng trình cần giải tƣơng đƣơng với hệ bất phƣơng trình có pk 0.
+ Với các bất phƣơng trình pkt qk mà pk 0, ta có t qk / pk . + Với các bất phƣơng trình pkt qk mà pk 0, ta có t qk / pk . Vậy nghiệm của hệ bất phƣơng trình là t1,t2 với :
Nếu hệ trên có nghiệm thì đoạn giao Q1Q2 sẽ là Q1(x1 t1Dx, y1
t1Dy),Q2(x1 t2Dx, y1 t2Dy).
Nếu xét thuật tốn này ở khía cạnh hình học ta có :
Trƣờng hợp k 1,2,3,4: (pk 0) (qk 0) tƣơng ứng với trƣờng hợp đoạn thẳng cần xét song song với một trong các biên của cửa sổ ( pk 0) và nằm ngoài cửa sổ ( qk 0) nên sẽ bị loại bỏ sau khi xén.
Với pk , giá trị t rk qk / pk pk 0 sẽ tƣơng ứng với giao điểm của đoạn thẳng với biên k kéo dài của cửa sổ. Trƣờng hợp pk 0 kéo dài các biên cửa sổ và đoạn thẳng về vơ cực, ta có đƣờng thẳng đang xét sẽ có hƣớng đi từ bên ngoài vào bên trong cửa sổ. Nếu pk > 0, đƣờng thẳng sẽ có hƣớng đi từ bên
trong cửa sổ đi ra. Do đó hai đầu mút của đoạn giao sẽ ứng với các giá trị đƣợc tính nhƣ sau : Giá trị t1 chính là giá trị lớn nhất của các rk qk / pk mà pk 0 (đƣờng thẳng đi từ ngoài vào trong cửa sổ) và 0; giá trị t2 chính là giá trị nhỏ
45
3.3. Clipping đa giác
Làm thế nào các đa giác đƣợc dùng trong các ứng dụng vẽ đƣờng (line- drawing application) có thể bị cắt bằng cách xử lý các đoạn thẳng thành phần