Bài giảng Đồ họa máy tính - Chương 5: Biến đổi ba chiều - Trần Thị Minh Hoàn

pdf 29 trang Gia Huy 16/05/2022 2410
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa máy tính - Chương 5: Biến đổi ba chiều - Trần Thị Minh Hoàn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_do_hoa_may_tinh_chuong_5_bien_doi_ba_chieu_tran_th.pdf

Nội dung text: Bài giảng Đồ họa máy tính - Chương 5: Biến đổi ba chiều - Trần Thị Minh Hoàn

  1. Chương V. Biến đổi ba chiều  I. Nhắc lại đại số với véctơ  II. Các phép biến đổi 3D cơ sở  III. Biến đổi 3D gộp 1
  2. Đại số véctơ P2 V  Biểu diễn véctơ  Đoạn thẳng có hướng giữa hai điểm xác định P1  Cộng hai véctơ V1 V2 (x1 x2 , y1 y2 , z1 z2 )  Nhân hai véctơ y  Tích vô hướng hay tích điểm V1+V2 V1.V2 x1x2 y1 y2 z1z2 V2=(x2,y2,z2)  Độ dài véctơ V V.V (x 2 y 2 z 2 ) V1=(x1,y1,z1) x V2 z V1  V1 .V 2 V1 V 2 cos  Chiếu V2 trên V1 2
  3. Đại số véctơ  Tích có hướng của hai véctơ  Kết quả là véctơ vuông góc với mặt phẳng V1 x V2 V2 tạo ra bởi hai véctơ u  V1  Véctơ đơn vị u  Có độ dài bằng 1  Xác định hướng của véctơ kết quả  Quy tắc bàn tay phải  Nắm tay phải, để cong các ngón tay từ V1 đến V2 (nếu V1xV2), lòng bàn tay hướng về gốc, ngón cái sẽ trỏ theo hướng của u  Véctơ kết quả V1xV2 u V1 V2 sin  3
  4. Đại số véctơ  Véctơ đơn vị theo các trục tọa độ: ux ,u y ,uz  Tích có hướng của hai véctơ được biểu diễn như sau: y ux u y uz uy V1xV2 x1 y1 z1 u z x u x2 y2 z2 x z V1 xV2 u x ( y1 z2 z1 y 2 ) u y (z1 x2 x1 z 2 ) u z (x1 y 2 x2 y1 )  Cosine hướng y  Cho trước véctơ p. Cosine hướng P(x, y, z) là cosine của các góc ,  và  p  u p j y = r cos  u= i cos + j cos  + k cos  k O i cos2 + cos2  + cos2  = 1 x z  (x, 0, z) 4
  5. Các phép biến đổi 3D cơ sở  Dịch chuyển  Co dãn  Xoay  Các phép biến đổi khác 5
  6. Các phép biến đổi 3D cơ sở  Dịch chuyển điểm (x, y, z) đến (x’, y’, z’) 1 0 0 0 y 0 1 0 0 (x', y',z') x ' y' z' 1 x y z 1 0 0 1 0 (x, y,z) T T T 1 x x y z z  Co dãn Sx 0 0 0 0 Sy 0 0 x' y' z' 1 x y z 1 0 0 Sz 0 0 0 0 1 6
  7. Các phép biến đổi 3D cơ sở  Xoay  Chọn trục xoay và góc xoay  Qui ước: Xoay ngược chiều kim đồng hồ theo trục sẽ tạo thành góc dương nếu nhìn về gốc tọa độ từ nửa trục dương.  Trục dễ quản lý: song song trục tọa độ y x z  Xoay quanh trục z x' x cos y sin y' x sin y cos cos sin 0 0 sin cos 0 0 z' z x' y' z' 1 x y z 1 0 0 1 0 0 0 0 1 7
  8. Các phép biến đổi 3D cơ sở  Xoay quanh trục x 1 0 0 0 y' y cos z sin 0 cos sin 0 z' y sin z cos x' y' z' 1 x y z 1 0 sin cos 0 x' x 0 0 0 1  Xoay quanh trục y z' z cos xsin x' z sin x cos y' y cos 0 sin 0 0 1 0 0 x' y' z' 1 x y z 1 sin 0 cos 0 0 0 0 1 8
  9. Xoay quanh trục bất kỳ  Trường hợp đặc biệt  Trục xoay song song trục tọa độ  Các bước thực hiện  Dịch đối tượng sao cho trục xoay về trục tọa độ song song với nó  Thực hiện xoay  Dịch đối tượng sao cho trục xoay về vị trí ban đầu  Trường hợp tổng quát  Yêu cầu bổ sung một vài biến đổi  Xác định ma trận chuyển đổi bằng đại số véctơ  Xác định ma trận chuyển đổi bằng hình học 9
  10. Các bước xoay quanh trục bất kỳ 1. Dịch đối tượng sao cho trục xoay đi qua gốc tọa độ. 2. Xoay đối tượng sao cho trục xoay trùng với một trong các trục tọa độ. 3. Thực hiện xoay đối tượng. 4. Áp dụng xoay ngược để trục xoay trở về hướng xoay ban đầu. 5. Áp dụng chuyển dịch ngược để đem trục xoay về vị trí ban đầu. 10
  11. Tìm ma trận chuyển đổi bằng hình học (x2,y2,z2)  Giả sử trục xoay được xác định bởi hai điểm (x1, y1, l z1) và (x2, y2, z2), có độ dài l (x1,y1,z1)  Bước 1: Tịnh tiến sao cho đầu cuối của nó trùng với gốc tọa độ.  Tọa độ hai đầu đoạn thẳng sẽ là (0, 0, 0) và (x0, y0, z0). (x , y , z )  Bước 2: Thực hiện xoay quanh trục x và y để trục bất kỳ 0 0 0 trùng với trục z  Bước 3: Xoay quanh trục z góc  y  Bước 4: Xoay ngược lại quanh trục y và x (x , y , z )  Bước 5: Tịnh tiến ngược để đưa trục về vị trí ban đầu. 0 0 0 l  Ma trận biến đổi cuối cùng l x    1  T R ARB T TR T R x T R y T R z T R y T R x T TR  l z 11
  12. Thực hiện tính toán  Bước 1: Ma trận tịnh tiến 1 0 0 0 (x2,y2,z2) 0 1 0 0 T  l TR 0 0 1 0 (x1,y1,z1) x1 y1 z1 1 12
  13. Thực hiện tính toán y  Bước 2: (0, y0, z0) (x , y , z )  Tính góc cho ma trận xoay. Chiếu trục xoay 0 0 0 lên mặt phẳng yz d l y y x sin 0 0 l y 2 z 2 d 0 0 k z z z cos 0 0 y 2 2 d y0 z0 (x0, y0, z0)  Ma trận xoay quanh x một góc l d x 1 0 0 0 1 0 0 0 k  l 0 cos sin 0 0 z / d y / d 0 T 0 0  R x z 0 sin cos 0 0 y0 / d z0 / d 0 0 0 0 1 0 0 0 1 13
  14. Thực hiện tính toán y  Bước 3:  Tìm góc quay  xung quanh trục y (x0, y0, z0) x d l sin  0 cos  l l d x  l 2 2 2 k l x0 y0 z0 z 2 2 2 2 2 2 2 l x0 y 0 z 0 l x0 d d y 2 z 2 0 0  Ma trận xoay quanh y một góc  cos 0 sin  0 d / l 0 x0 / l 0 0 1 0 0 0 1 0 0   TR y sin  0 cos 0 x0 / l 0 d / l 0 0 0 0 1 0 0 0 1 14
  15. Thực hiện tính toán  Bước 4:  Xoay xung quanh trục đã trùng với trục z y cos sin 0 0 (x , y , z ) 0 0 0  sin  cos 0 0  T  l R z 0 0 1 0 d x  0 0 0 1 k l z  Tìm ma trận biến đổi ngược trước khi tính toán ma trận cuối cùng 15
  16. Tìm ma trận xoay bằng đại số véctơ  Trục xoay đi qua hai điểm P1 (x1, y1, z1) y (x2,y2,z2) và P2 (x2, y2, z2). u  P1 và P2 xác định véc tơ V: (x1,y1,z1) x V (x2 x1, y2 y1, z2 z1 ) z  Véc tơ đơn vị u theo trục xoay sẽ là V x x y y z z u a, b, c a 2 1 , b 2 1 , c 2 1 V V | V | | V |  Giả sử chọn trục z để biến đổi trục xoay theo nó 16
  17. Tìm ma trận xoay bằng đại số véctơ  Các bước thực hiện  Bước 1: Dịch đối tượng sao cho P1 về gốc tọa độ 1 0 0 0 y 0 1 0 0 T 0 0 1 0 u z x x1 y1 z1 1  Biến đổi sao cho trục xoay trùng trục z  Xoay quanh trục x sao cho véc tơ u trong mặt phẳng xz  Xoay quanh trục y để đem u về trục z 17
  18. Tìm ma trận xoay bằng đại số véctơ  Bước 2: Tìm ma trận xoay quanh x để u về mặt phẳng xz  Góc xoay: giữa ánh xạ véctơ u vào mặt yz và trục dương z  Tìm góc xoay ? u x x z z u Biến đổi sao cho trục xoay trùng trục z 18
  19. Tìm ma trận xoay bằng đại số véctơ  Tìm cos y u'.u c cos z , u' u z d u'=(0,b,c) u=(a,b,c) u' 02 b 2 c 2 b 2 c 2 d x u 1 z z uz=(0,0,1) u'.u 0.0 b.0 c.1 c z ' 2 2  Tính sin ux uz u x sin u' u z u x b c sin u x d sin u' = (0, b, c) và uz = (0, 0, 1) u u u b x y z sin d u' xu z 0 b c u xb 0 0 1 19
  20. Tìm ma trận xoay bằng đại số véctơ  Ma trận xoay quanh trục x 1 0 0 0 1 0 0 0 0 cos sin 0 0 c / d b / d 0 Rx( ) 0 sin cos 0 0 b / d c / d 0 0 0 0 1 0 0 0 1 y y z z 2 2 b 2 1 , c 2 1 d b c | V | | V | V V.V (x 2 y 2 z 2 ) 20
  21. Tìm ma trận xoay bằng đại số véctơ  Bước 3: Tìm ma trận xoay véctơ đơn vị u’’ trong mặt xz quanh trục y vào trục dương z  Các thành phần của u”:  Xoay quanh trục x nên thành phần x của véctơ có giá trị a  Vì xoay u’ vào trục z cho nên thành phần z của u” có giá trị d  Thành phần y của u” có giá trị 0  Tính cos  từ tích vô hướng của u” và uz y u".uz u’=(0,b,c) cos  d  u" uz u V .V x x y y z z z x 1 2 1 2 1 2 1 2 u"=(a,0,d)  Theo tính chất cosin hướng ta có (b2+c2)1/2=d z 2 2 2 1/2 |uz| =1 và |u"| = (a +b +c ) =1 21
  22. Tìm ma trận xoay bằng đại số véctơ  Tính sin  từ tích có hướng của u” và uz u"x uz u y u" u zsin u y .1.1.sin  u y sin  u u u x y z y " u xu z a 0 d u y ( a) u’=(0,b,c)  0 0 1 Do đó: sin  = a u z x  Xoay quanh trục y với góc âm u"=(a,0,d) (b2+c2)1/2=d d 0 a 0 z 0 1 0 0 Ry  a 0 d 0 0 0 0 1 22
  23. Tìm ma trận xoay bằng đại số véctơ  Xoay quanh trục y với góc âm (theo chiều kim đồng hồ) d 0 a 0 0 1 0 0 Ry  y a 0 d 0 u’=(0,b,c)  0 0 0 1  Trục xoay là trục z dương, góc xoay  u z x cos sin  0 0 u"=(a,0,d) sin  cos 0 0 Rz  (b2+c2)1/2=d 0 0 1 0 z 0 0 0 1  Bước 4: Biến đổi trục xoay về vị trí ban đầu  Ma trận biến đổi xoay cuối cùng là R()=T.Rx( ).Ry().Rz().Ry-1 ().Rx-1 ( ).T-1 23
  24. Phép lấy đối xứng (reflection)  Giải pháp  Lấy đối xứng một trục tọa độ qua mặt phẳng phản chiếu  Thí dụ lấy đối xứng qua mặt phẳng xy  Biến đổi này làm thay đổi trục z còn giữ nguyên các trục x, y  Biểu diễn ma trận phản chiếu của các điểm so với mặt phẳng xy sẽ như sau 1 0 0 0 y y 0 1 0 0 z RFz 0 0 1 0 x x 0 0 0 1 z 24
  25. Phép lấy đối xứng (reflection)  Lấy đối xứng qua mặt phẳng yz và xz 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 RFx RFy 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1  Lấy đối xứng qua gốc tọa độ (0, 0, 0) 1 0 0 0 0 1 0 0 RFo 0 0 1 0 0 0 0 1 25
  26. Biến dạng (shear)  Thực hiện tương tự như biến dạng trong 2D  Với a, b có giá trị bất kỳ, ma trận biến dạng sẽ như sau 1 0 0 0 0 1 0 0 a b 1 0 0 0 0 1 26
  27. 1. Một hình chóp A(0, 0, 0), B(1, 0, 0), C(0, 1, 0) và D(0, 0, 1) được xoay một góc 450 quanh đoạn thẳng L được xác định theo hướng V= j + k và đi qua đỉnh C. Xác định tọa độ của các đỉnh sau phép xoay. 2. Tìm các tọa độ mới của khối vuông y (1, 1, 0) đơn vị như hình bên đây, sau khi xoay (0, 1, 0) quanh một trục xác định bởi điểm (0, 1, 1) (1, 1, 1) (1, 0, 0) A(2, 1, 0) và B(3, 3, 1). Góc xoay là (0, 0, 0) x z (0, 0, 1) (1, 0, 1) 900 ngược chiều kim đồng hồ. 27
  28. Thực hành 3. Tìm ma trận chuyển đổi để biến đổi khối vuông đơn vị như hình dưới bên trái thành khối chữ nhật như hình dưới bên phải. y y 2 x 1 4 x 450 1 1 z z 3 1 1 4. Hãy tìm ma trận chuyển đổi hình chóp tam giác ABCD bên trái thành hình chóp tam giác bên phải. 2 y C(1,2,1) A(0,1,0) B(1,0,0) x x B(0,0,1) C(1,0,0) 1 450 A D z z 1/2 28
  29. Thực hành Các bước thực hiện 1. Co dãn theo Oy Sy=1/2, Sx=Sz=1. 2. Quay quanh Oy một góc 180o 3. Quay quanh Oz một góc -900 4. Tịnh tiến (1,0,1) 5. Co dãn Oy 29