1. Trang chủ
  2. » Thể loại khác

Các phép biến đổi hình học cơ sở

44 1,7K 9
Tài liệu đã được kiểm tra trùng lặp

Đ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 44
Dung lượng 726,5 KB

Nội dung

Các phép biến đổi hình học cơ sở

Trang 1

Chương III Các phép biến hình

Các phép biến đổi hình học cơ sở bao gồm:

- tịnh tiến /dời hình (translation)

- quay (rotation)

- tỷ lệ /vị tự / (scaling)

Ví dụ:

- một báo cáo viên muốn thu nhỏ các biểu đồ trong báo cáo

- một kiến trúc sư muốn nhìn tòa nhà ở những góc nhìn khác nhau

- nhà thiết kế muốn quan sát, tách rời và chỉnh sửa từng chi tiết của mẫu thiết kế

- Biến đổi hệ tọa độ (coordinate transformation): tạo ra một hệ tọa độ mới, sau đó tất

cả các điểm của đối tượng sẽ được chuyển về hệ tọa độ đó

*

) , (

*

y x g y

y x f x

và f() và g() là hai hàm tuyến tính thì được gọi là phép biến hình Affin (affine) Ta chỉ khảo sát các phép biến hình loại này Phép biến hình affin có những tính chất sau:

- Bảo toàn đường thẳng: ảnh của đường thẳng qua phép biến hình affine là đường thẳng

- Bảo toàn tính song song của các đường thẳng: ảnh của các đường thẳng song song qua phép biến hình affine cũng là các đường thẳng song song

- Bảo toàn tỷ lệ về khoảng cách: giả sử C là điểm chia đoạn AB theo tỷ lệ x và

A’,B’,C’ lần lượt là ảnh của A,B,C qua một phép biến hình affin Khi đó C’ cũng chia đoạn A’B’ theo tỷ lệ x

a x x

*

*

Vector tịnh tiến (a,b) còn gọi là “vector độ dời” Chúng ta có thể áp dụng quy tắc trên cho mọi điểm của đối tượng để dịch chuyển nó Đơn giản hơn, để tịnh tiến một đa giác chỉ cần tịnh tiến các đỉnh của nó rồi vẽ lại đa giác mới Tương tự, đối với đường tròn, ellip ta tịnh tiến tâm của chúng tới vị trí mới rồi vẽ lại

Trang 2

x tx x

Phép tỷ lệ

Trang 3

Phép quay làm thay đổi hướng của đối tượng Để xác định phép quay, ta cần biết tâm quay

và góc quay Phép quay điểm P(x,y) quanh gốc tọa độ một góc  tạo thành điểm ảnh

Q(x*,y*) có công thức như sau:

.

*

sin cos

.

*

y x

y

y x

*, y x

sin cos

Tuy nhiên, cách biểu diễn trên sẽ gặp khó khăn khi kết hợp các phép biến đổi lại với nhau vì biểu diễn của phép tịnh tiến (cộng ma trận) khác với hai phép biến hình còn lại (nhân ma trận) Chẳng hạn, khi thiết kế một động cơ, ta muốn tháo riêng một chi tiết ra ngoài (tịnh tiến), xoay 1 góc (quay) rồi lắp vào chỗ cũ (tịnh tiến) Khi đó ta phải thực hiện 3 phép tính trên ma trận (+  + ) Người ta đã tìm ra cách biểu diễn trong hệ tọa độ thuần nhất, nhờ đó rút gọn chuỗi biến đổi trên về chỉ một phép tính

4.1.3 Hệ tọa độ thuần nhất (homogeneous coordinates)

Phép quay quanh một điểm

1800

Trang 4

Tọa độ thuần nhất (đôi khi còn gọi là “đồng nhất”) của điểm (x,y) trên mặt phẳng được biểu

diễn bằng bộ ba (xh,yh,h) liên hệ với tọa độ (x,y) bởi công thức

h

y y h

4.1.4 Ma trận của các phép biến hình trong hệ tọa độ thuần nhất

0 0 1 1 , , 1

*,

*,

b a

y x y

0 0 1

b a T

0 0

0 0 1

, , 1

*,

tx y

x y

0 0

0 0

ty

tx S

Phép quay quanh gốc tọa độ:

0 cos sin

0 sin cos

1 , , 1

0 cos sin

0 sin cos

Bất kỳ phép biến hình nào cũng được kết hợp từ phép tịnh tiến, tỷ lệ và quay

Khi áp dụng liên tiếp các phép biến hình trên đối tượng, ta phải thực hiện nhiều phép nhân với các ma trận tương ứng Thay vào đó, ta sẽ chuẩn bị sẵn ma trận tích và sử dụng như ma trận của phép biến hình tổng thể

Kết hợp các phép tịnh tiến

Trang 5

Ta thực hiện phép tịnh tiến T1 với vector tịnh tiến (a,b) lên điểm P(x,y) và thu được ảnh Q’, sau đó thực hiện tiếp phép tịnh tiến T2(c,d) đối với Q’ và thu được Q(x*,y*)

*)

*,()

','(')

,(x y 1( ) Q x y 2( ) Q x y

0 0 1

1

0 1 0

0 0 1 1

0 1 0

0 0 1

) , ( ) , ( ).

,

1

d b c a d

c b

a

d b c a T d c T b a T

0 0

0 0 1

0 0

0 0

0 0 1

0 0

0 0

0 0

2 1

2 1 1

2 1

1

ty ty

tx tx ty

tx ty

tx

Kết hợp các phép quay

Tương tự như phép tịnh tiến, kết hợp của nhiều phép quay quanh gốc tọa độ cũng là một phép quay quanh gốc tọa độ Giả sử phép quay R1có góc quay là 1, phép quay R2 có góc quay 2, ma trận kết hợp của hai phép quay R1 R2 là

0

0cos

sin

0sin

cos1

00

0cossin

0sincos

100

0cossin

0sincos

2 1 2

1

2 1 2

1 2

2

2 2

1 1

1 1

Phép quay với tâm quay bất kỳ

Phép quay quanh tâm quay A(x,y) góc quay  có thể phân tích thành các phép biến hình cơ

sở sau:

- Tịnh tiến theo vector (-x,-y) để đưa tâm quay về gốc tọa độ

- Quay quanh gốc tọa độ một góc 

- Tịnh tiến theo vector (x,y) để đưa đối tượng về chỗ cũ

1 sin sin

cos

1

0 cos

sin

0 sin

cos

1

0 1 0

0 0 1 1 0 0

0 cos sin

0 sin cos

1

0 1 0

0 0 1

y x

y x

y x y

Trang 6

Phép đối xứng trục có thể xem là phép quay 1800 quanh trục đối xứng Phép đối xứng qua trục hoành và trục tung có ma trận lần lượt là

0 1 0

0 0 1 ,

1 0 0

0 1 0

0 0 1

- Phép biến dạng theo trục hoành làm thay đổi hoành độ còn tung độ giữ nguyên

- Phép biến dạng theo trục tung làm thay đổi tung độ còn hoành độ giữ nguyên

0 1 0

0 1

, 1 0 0

0 1

0 0

M t

Phép biến đổi ngược

Một ví dụ cho phép biến đổi ngược chính là thao tác Undo mà các phần mềm vẽ thiết kế

luôn có Giả sử phép biến hình M có ma trận như sau:

f e

d c

b a M

giả thiết ad-bc  0 Khi đó phép biến đổi ngược của M, ký hiệu là M-1, được biểu diễn như sau:

0 1

1

af be de cf

a c

b d

bc ad M

Gọi S (tx,ty) là phép đồng dạng, S-1 được biểu diễn như sau:

0 1 0

0 0 1 ,

1

ty

tx ty tx S

Trang 7

Phép quay quanh gốc tọa độ R() có biến đổi ngược như sau:

1 0 0

0 cos sin

0 sin cos

4.2 Các phép biến hình trong không gian 3 chiều

Hoàn toàn tương tự như trong mặt phẳng, ta cũng sử dụng các ma trận trong hệ tọa độ thuầnnhất để biểu diễn các phép biến hình: tịnh tiến, quay và đồng dạng

0 0 1 0

0 0 0 1 ) , , (

c b a

c b a T

0 0

0

0 0 0

0 0 0 )

, , (

c b

a c b a S

trong đó a,b,c là hệ số tỷ lệ tương ứng theo các trục tọa độ Ox,Oy,Oz

Phép quay

Nếu trong mặt phẳng ta có phép quay quanh một tâm quay thì trong không gian 3 chiều ta

có phép quay quanh một trục Ký hiệu ma trận của các phép quay quanh 3 trục Ox, Oy, Oz lần lượt là R(x,), R(y,), R(z,) với  là góc quay Ta có

Trang 8

0 cos sin

0

0 sin cos

0

0 0 0

1 ) , ( 1

0 0 0

0 cos 0 sin

0 0 1 0

0 sin 0 cos )

, (

1 0 0 0

0 1 0 0

0 0 cos sin

0 0 sin cos

) , (

R

z R

Chú ý: vẫn như trước, góc quay  có giá trị đại số Chiều quay dương được xác định theo

quy tắc như sau:

- Quay quanh trục Ox: chiều quay dương là chiều quay từ trục y đến trục z

- Quay quanh trục Oy: chiều quay dương là chiều quay từ trục z đến trục x

y

Phép quay quanh trục Oy Phép quay quanh trục Ox

Phép quay quanh trục Oz

Trang 9

- Quay quanh trục Oz: chiều quay dương là chiều quay từ trục x đến trục y

Nói cách khác, nếu đặt mắt nhìn thẳng vào trục tọa độ đi tới thì chiều quay dương là ngược chiều kim đồng hồ Hoặc có thể dùng quy tắc bàn tay phải: ngón cái chỉ chiều đi tới (vectorpháp tuyến), bốn ngón khum lại chỉ chiều quay dương

z

x y

x

y

z

+ +

Xác định chiều quay dương

Trang 10

Chương IV Thư viện đồ họa 2D, 3D

Trong chương này chúng ta sẽ khảo sát thư viện đồ họa lấy từ cuốn “GRAPHICSME DANS

LE PLAN ET DANS L’ESPACE AVEC TURBO PASCAL”, R.DONY, 1990

1 Nguyên tắc thiết kế của thư viện

1 Chúng ta sẽ xây dựng những công cụ chuyển đổi từ hệ tọa độ Toán học (hệ Decac thuận, tọa độ là số thực không giới hạn) sang hệ tọa độ màn hình (hệ Decac ngược, tọa độ là số nguyên) Bộ công cụ đó gồm các thủ tục sau:

Procedure CAT( ) - đảo tung độ y,

- chiếu “cửa sổ” lên màn hình,

- cắt những phần nằm ngoài phạm vi cửa sổProcedure CUASO( ) thiết lập nên “cửa sổ”

Procedure TAMNHIN( ) thiết lập nên “tầm nhìn”

2 Sau khi đã có bộ công cụ chuyển tọa độ trên, các lệnh vẽ về sau đều coi như đang vẽ trên

hệ tọa độ Toán học quen thuộc Việc biến đổi về hệ tọa độ màn hình và hiển thị được thực hiện tự động bởi các công cụ đã có

3 Đoạn thẳng được chọn làm nguyên thể đồ họa Mọi đối tượng hình học khác đều được xây dựng từ đoạn thẳng, chẳng hạn một điểm được vẽ như một đoạn thẳng với 2 đầu mút trùng nhau, các đường cong được vẽ bằng một loạt đoạn thẳng ngắn liên tiếp nhau, đường tròn được xấp xỉ hóa bởi một đa giác đều nhiều cạnh

2 Khái niệm cửa sổ, tầm nhìn

Về lý thuyết, không gian 2D thực tế là vô hạn nhưng con người không thể bao quát

hết mà thường chỉ quan tâm tới một vùng nào đó Cửa sổ được định nghĩa là hình chữ nhật

chứa những đối tượng đang được khảo sát Chẳng hạn nhìn lên một bức tranh tường, ta chú

ý vào một họa tiết nào đó, khi đó cửa sổ là hình chữ nhật nhỏ nhất có thể chứa nó Khi chuyển sự chú ý sang những phần khác, cửa sổ sẽ được di chuyển theo

Thủ tục tiết lập cửa sổ như sau: CuaSo (F1,F2,F3,F4: Real)

Trong đó F1, F2, F3, F4 là tọa độ các đỉnh cửa sổ (hình vẽ) và phải thỏa mãn:

F1 < F2, F3 < F4

PROCEDURE Cuaso (F1,F2,F3,F4 : Real);

BEGIN

XgFen := F1; {Hoanh do trai}

XdFen := F2; {Hoanh do phai}

YbFen := F3; {Tung do duoi}

YhFen := F4 {Tung do tren}

END;

Ví dụ ta gọi thủ tục sau để thiết lập cửa sổ vuông: CuaSo (13.5, 22, 18.5, 27);

Trang 11

Hình ảnh mà ta đang khảo sát trên cửa sổ phải được thể hiện lên màn hình máy tính Không phải lúc nào ta cũng dùng toàn bộ màn hình mà thường chia thành nhiều vùng, mỗi

vùng cho một mục đích, để hiển thị một cửa sổ khác nhau Ta gọi vùng màn hình đó là tầm nhìn của cửa sổ tương ứng

Thủ tục thiết lập tầm nhìn như sau: TamNhin (C1, C2, C3, C4: Integer) trong đó

0 C1 < C2  GetMaxX0 C3 < C4  GetMaxY

PROCEDURE TamNhin (C1,C2,C3,C4 : Integer);

BEGIN {Có đổi chiều trục Y }

XgClot := C1; {Hoành độ trái}

XdClot := C2; {Hoành độ phải}

YbClot := C3; {Tung độ dưới}

Trang 12

YhClot := C4; {Tung độ trên}

Xtl := (XdClot - XgClot) / (XdFen - XgFen); {tỷ lệ chiều ngang}

Ytl := (YhClot - YbClot) / (YhFen - YbFen); {tỷ lệ chiều dọc}

SetviewPort (XgClot, MaxY-YhClot, XdClot, MaxY-YbClot, ClipOn) {không vẽ ra

ngoài}

END;

Ví dụ: để thiết lập chế độ làm việc toàn màn hình ta gọi thủ tục

PROCEDURE TamNhinDay; {tầm nhìn đầy}

BEGIN

TamNhin (0,MaxX,0,MaxY) {Tầm nhìn là toàn bộ màn hình}

END;

3 Đoạn thẳng, điểm

Đoạn thẳng là nguyên thể đồ họa nhỏ nhất Ta vẽ đoạn thẳng bằng cách trước hết đặt con trỏ

đồ họa vào điểm đầu mút thứ nhất, sau đó vẽ đoạn nối tới đầu mút thứ hai Ta dùng cặp biến(XP1, YP1) để thao dõi và định vị con trỏ đồ họa

PROCEDURE VeDen (X,Y : Real);{ Vẽ đoạn nối (XP1,YP1) đến (X,Y) và clipping nó} BEGIN

XP2 := X;

YP2 := Y;

Cat (XP1,YP1,XP2,YP2); {clipping}

XP1 := XP2; {chuyển con trỏ tới đầu mút thứ hai vừa xác định }

4 Chiếu cửa sổ lên tầm nhìn

Sau khi đã xác định được cửa sổ (vùng cần khảo sát) và tầm nhìn (vùng dành cho việc hiển thị), công việc tiếp theo là chiếu toàn bộ nội dung cửa sổ lên màn hình Để làm việc này ta cần có công thức toán học của phép chiếu cho phép xác định tọa độ ảnh (Xe, Ye) của điểm thực (Xr, Yr) qua phép chiếu

Đầu tiên ta tính tỷ lệ giữa cửa sổ và tầm nhìn:

Xtl=(C2-C1)/(F2-F1), Ytl = (C4-C3) /(F4-F3)Khi đó ta có:

Xe = (Xr-F1) Xtl; Ye = (F4-Yr) Ytl

Ví dụ:

Xét cửa sổ (-3,3,-2,3), tầm nhìn (100,700,50,300)

Trang 13

Hiện tượng méo hình

Gọi B và H là đáy và chiều cao cửa sổ, còn B’, H’ là đáy và chiều cao của tầm nhìn Khi

chiếu cửa sổ lên tầm nhìn, nếu tỷ lệ B/H  B’/H’ thì sẽ xảy ra hiện tượng méo hình, nghĩa là

đối tượng không còn giữ được nguyên vẹn hình dạng lúc đầu

Trang 14

 Trong khi giữ nguyên kích thước cửa sổ, ta di chuyển nó tới những vị trí khác nhau trong không gian thực, khi đó trên tầm nhìn hiện ra những phần khác nhau của ảnh Hình của ảnh được chiếu lên màn hình có kích thước không đổi

 Khi kích thước cửa sổ bị thu nhỏ lại, phần diện tích được khảo sát của đối tượng cũng thu nhỏ lại theo nhưng ảnh của nó trên màn hình lại được phóng to ra

 Ngược lại, nếu cửa sổ được phóng to ra thì phần diện tích được khảo sát của đối tượng cũng tăng lên nhưng ảnh của nó trên màn hình lại thu nhỏ lại

Vấn đề Clipping (cắt bỏ những phần không nằm trong cửa sổ)

Vấn đề đặt ra là cần phải cắt bỏ những phần của đối tượng không nằm trong cửa sổ

Vì ta đã coi đoạn thẳng là nguyên thể đồ họa nên vấn đề quy về việc làm sao để clipping một đoạn thẳng Sau đây ta áp dụng thuật toán Cohen – Sutherland để giải quyết vấn đề này

Trước hết xét một điểm (X,Y) Nếu tọa độ của nó vi phạm một trong các điều kiện sau thì điểm đó nằm ngoài cửa sổ và sẽ bị loại bỏ

F1 X  F2 và F3 Y  F4Dấu bằng cho thấy các điểm nằm trên biên được coi như nằm trong cửa sổ

Với đoạn thẳng, ta kéo dài các đường biên cửa sổ thành các đường thẳng Chúng chiamặt phẳng làm 9 vùng Mỗi điểm trong mặt phẳng sẽ tương ứng với mã 4 bit được xác định theo quy tắc sau:

 bit thứ 1 là 1 nếu điểm đó nằm bên trái cửa sổ

 bit thứ 2 là 1 nếu điểm đó nằm bên phải cửa sổ

 bit thứ 3 là 1 nếu điểm đó nằm bên dưới cửa sổ

Trang 15

 bit thứ 4 là 1 nếu điểm đó nằm bên trên cửa sổ

Nhận xét;

 Đoạn thẳng nằm hoàn toàn trong cửa sổ khi và chỉ khi mã của cả 2 đầu mút là 0000 Ngược lại, nếu một trong hai mã khác 0000 thì đoạn thẳng có 1 phần hoặc toàn bộ nằm ngoài cửa sổ

 Nếu kết quả phép AND hai mã của 2 đầu mút khác 0000 thì đoạn thẳng tương ứng hoàn toàn nằm ngoài cửa sổ và sẽ không được hiển thị lên màn hình

Các bước:

- Nếu cả hai mã thuộc tính đều là 0000 thì đoạn thẳng hoàn toàn nằm trong cửa sổ

- Nếu kết quả phép AND hai mã khác 0000 thì đoạn thẳng hoàn toàn nằm ngoài cửa sổ

- Trường hợp không rơi vào hai khả năng trên: giao điểm của đoạn thẳng với biên cửa

sổ chia đoạn thẳng đã cho thành nhiều đoạn Ta xét từng đoạn theo cách như trên Toàn bộ các bước kể trên được thể hiện trong thủ tục CAT dưới đây:

PROCEDURE Cat (X1,Y1,X2,Y2 : Real);

Trang 16

TYPE Region = (Left,Right,Low,High);

Code = SET OF Region;

IF Y < YbFen THEN C := C+[Low]

ELSE IF Y > YhFen THEN C := C+[High]

BEGIN {Cắt dần để tìm đoạn hiển thị}

IF (C1*C2) <> [] THEN Exit; {C1C2 : cắt toàn bộ}

IF C1 = [] THEN C := C2 ELSE C := C1; {chọn C là điểm nằm ngoài}

Trang 17

so với hệ trục.

- Trục nào cắt cửa sổ thì để nguyên và vẽ lên tầm nhìn

- Trục nào không cắt qua cửa sổ: tịnh tiến ép sát vào mép trái hoặc mép dưới cửa sổ

- Trục nào vốn đã trùng với mép trái hoặc mép dưới cửa sổ thì để nguyên

Như vậy cuối cùng hình dạng cửa sổ có kèm theo hệ trục tọa độ sẽ có một trong 4 dạng sau:

Trang 18

BEGIN {Ve mui ten tren truc X}

MoveRel (-dX,dY); {kéo CP về B}

LineRel (dX,-dY); {vẽ BA}

MoveRel (-dX,-dY); {kéo CP về C}

LineRel (dX,dY) {vẽ CA}

ELSE XOrig := XgFen; {mep trai}

IF (YbFen < 0) AND (YhFen > 0)

Các thủ tục sau đảm nhiệm việc vẽ các vạch chia độ trên trục tọa độ:

C

A

B

dYdX

Trang 19

 Procedure ChinhTrucX;

 Procedure ChinhTrucY;

 Procedure DoDo;

Đường viền và lưới

Thủ tục Luoi() vẽ lưới ô vuông nhằm giúp người xem đánh giá vị trí tọa độ dễ dàng hơn Thủ tục Vien() vẽ một đường viền bao quanh tầm nhìn

PROCEDURE Vien (Mau : Byte);

- X,Y: bảng chứa các tọa độ đa giác

- Lim: số đỉnh của đa giác

- Mode: giá trị boolean chỉ thị vẽ đa giác kín hay mở

PROCEDURE DaGiac (X,Y : Table; Lim : Integer; Mode : Integer);

VAR I : Integer;

BEGIN

Diem(X[1],Y[1]);

FOR I := 2 TO Lim DO VeDen(X[I],Y[I]);

IF Mode = Dong THEN VeDen(X[1],Y[1]) {Net cuoi}

Trang 20

  (1)

sin

cos

1 1

Da n R X

n n

Y

a R

X

n n

sin cos

với a là góc ở tâm tương ứng Ta có

).

cos(

) cos(

) sin(

.

) sin(

) sin(

) cos(

) cos(

sin

) cos(

.

1 1 1

1

Da a R Da a R Y

Da a R Da a R X Da a R Y

Da a R X

n n n

n

cuối cùng ta có:

) 2 ( ) sin(

) cos(

.

) sin(

) cos(

1 1

Da Y

Y

Da Y

Da X

X

n n

n

n n

! 4

! 2 1 ) cos(

6 4

x

PROCEDURE VeTron (XC,YC,R : Real; Cham : Boolean);

VAR S,C,X,Y,Aux : Real;

Trang 21

Xét đường tròn đơn vị (bán kính bằng 1, tâm ở gốc tọa độ) Hình Bolygone bậc N gia số góc

a là tập các dây cung nối các điểm sau:

Điểm đầu Điểm cuối

Trang 22

Phương trình đường tròn bán kính R, tâm ở gốc tọa độ là:

X = R.Cos()Y=R.Sin()với đường tròn đơn vị (R=1) ta có

X=cos()Y=sin()

Khi đó chương trình vẽ Bolygone như sau:

Ngày đăng: 15/01/2013, 10:53

HÌNH ẢNH LIÊN QUAN

Hình ảnh mà ta đang khảo sát trên cửa sổ phải được thể hiện lên màn hình máy tính. - Các phép biến đổi hình học cơ sở
nh ảnh mà ta đang khảo sát trên cửa sổ phải được thể hiện lên màn hình máy tính (Trang 13)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w