2. CÁC THUẬT TỐN VẼ ĐƯỜNG
1.5.1. Phép quay quanh một trục tọa độ
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:
•Tịnh tiến trục k về gốc tọa độ: tr(-P0) (thành trục k').
•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