Phép quay quanh một trục tọa độ

Một phần của tài liệu Giới thiệu đồ họa ba chiều (Trang 30 - 34)

Khác với phép quay trong hai chiều quanh một điểm bất kì, trong ba chiều ta có phép quay quanh một trục tọa độ. Ở đây ta sử dụng hệ tọa độ theo quy ước bàn tay phải và quy định chiều quay dương là ngược chiều kim đồng hồ.

Ta có các ma trận biểu diễn các phép quay quanh trục x, y, z một góc q lần lượt là R(z, q ), R(y,q ), R(x, q ): Quay quanh trục z :

Hình 6.8 - Phép quay quanh trục z Quay quanh trục y : (6.7) Hình 6.9 - Phép quay quanh trục y Quay quanh trục x : (6.8)

Nhận xét rằng các giá trị nằm trên dòng và cột tương ứng với trục x trong ma trận R(x,q ) sẽ có giá trị là 0 ngoại trừ giá trị nằm trên đường chéo chính là 1. Điều này đảm bảo cho tọa độ x của các điểm là không bị thay đổi qua phép biến đổi. Nhận xét này cũng tương tự cho trường hợp các ma trận còn lại.

Hình 6.10 - Phép quay quanh trục x

Ghi chú:

Các định nghĩa về chiều quay được dùng chung cho cả hệ tọa độ theo quy ước bàn tay phải và bàn tay trái. Cụ thể chiều dương được định nghĩa như sau:

Quay quanh trục x: từ trục dương y đến trục dương z.

Quay quanh trục y: từ trục dương z đến trục dương x.

Hình 6.11- Cách xác định chiều quay dương 1.5.2. Phép quay quanh một trục bất kì

Giả sử trục quay đi qua hai điểm P0, P1 nào đó với phương được biểu diễn bởi vector đơn vị k. Quay điểm (x, y, z) quanh trục k theo một góc q sẽ biến thành điểm (x’, y’, z’) (xem hình 6.12).

Hình 6.12 - Phép quay quanh trục k

Để thực hiện phép quay quanh k một góc q , ta có thể thực hiện một chuỗi các thao tác sau:

• Quay quanh trục x một góc a để đặt trục k' nằm trên mặt phẳng Oxz: rot(x,a ) (thành trục k").

• Quay quanh trục y góc b để đưa trục k" về trục z: rot(y,-b ).

• Thực hiện phép quay quanh trục z một góc q : rot(z,q ).

• Thực hiện chuỗi các phép biến đổi ngược lại quá trình trên.

Góc quay a được xác định dựa trên chiếu của k' lên mặt phẳng yz. Ta không cần tính a cụ thể. Thay vào đó ta tính sin(a ) và cos(a ) một cách trực tiếp.

Từ hình 6.12 ta có: ,

cos(a ) = kz/d, sin(a ) = ky/d. Tương tự, từ hình 6.13 ta có:

Như vậy, phép quay quanh một trục P0P1 bất kì một góc q , rot(P0P1, q ), có thể được phân rã thành chuỗi các biến đổi cơ sở sau: tr(-P0) rot(x,a ) rot(y, -b ) rot(z, q ) rot(y, b ) rot(x, -a ) tr(P0)

Hình 6.13 - Tính góc b 1.6. Kết hợp các phép biến đổi affine ba chiều

Để kết hợp các phép biến đổi affine ba chiều, chúng ta cũng thực hiện tương tự như ở phép biến đổi hai chiều bằng cách dùng hệ tọa độ thuần nhất.

Bằng cách này chúng ta cũng có các kết quả tương tự như trong trường hợp biến đổi hai chiều. Nếu M1 biến đổi P thành Q và M2 biến đổi Q thành S thì M1M2 sẽ biến đổi P thành S, do đó ma trận kết hợp của nhiều phép biến đổi có thể được tính từ việc nhân các ma trận của các phép biến đổi thành phần.

Một phần của tài liệu Giới thiệu đồ họa ba chiều (Trang 30 - 34)