- Nhận biết quay trái với quay phải: Cĩ những thuật giải ta phải duyệt một đa giác, lần lượt thăm mỗi đỉnh hay cạnh Ta xem như di chuyển theo một cạnh từ đỉnh
1- Các phép biến hình 3 chiều
Cơ sở tốn học:
Một trong những ưu điểm quan trọng của đồ họa là cho phép dễ dàng tác động lên các đối tượng đồ họa. Tất cả các biến đổi trên đồ họa máy tính đều cĩ thể thỏa mãn một cách tương đối dễ dàng vì các hình ảnh khi đưa vào xử lý đã được số hố, do đĩ nĩ cĩ thể thay đổi dễ dàng bằng các phép biến đổi tốn học. Phép biến đổi hình học thường được dùng là phép biến đổi Affine.
Cĩ hai quan điểm về phép biến đổi, đĩ là: Biến đổi đối tượng.
Biến đổi hệ tọa độ.
Biến đổi đối tượng: là thay đổi tọa độ các điểm mơ tả nĩ theo một quy luật nào đĩ.
Biến đổi hệ tọa độ: sẽ tạo ra một hệ tọa độ mới và tất cả các điểm mơ tả đối tượng sẽ được chuyển về hệ tọa độ mới này. Phần này ta sẽ mơ tả một số phép biến đổi đối tượng. Phép biến đổi affine 3D biến đổi điểm P(Px,Py,Pz) thành điểm Q:
Q = PM
Với P = (Px, Py, Pz), Q = (Qx, Qy, Qz) và M là ma trận biến hình 4x4
Một số phép biến đổi Affine cơ sở, đĩ là: phép tịnh tiến, phép co dãn, phép quay. a/ Phép tịnh tiến: Dịch chuyển đối tượng từ vị trí này sang vị trí khác. Tịnh tiến với các độ dời tx, ty, tz.
b/Phép co dãn: Với hệ số co Sx , Sy, Sz. Ma trận M là
c/Phép quay quanh trục x gĩcA: Tọa độ x của vật thể khơng đổi. Ma trận M là
m m m m m m m m m m m m m m m m M = M = 1 0 0 0 0 1 0 0 0 0 1 0 tx ty tz 1 Sx 0 0 0 0 Sy 0 0 0 0 Sz 0 0 0 0 1 M = 1 0 0 0 0 cos(A) sin(A) 0 M =
d/Phép quay quanh trục y gĩc A: Tọa độ y của vật thể khơng đổi. Ma trận M là:
e/Phép quay trục z gĩcA: Tọa độ z của vật thể khơng đổi. Ma trận M là
* Tổng hợp các phép biến hình Phép biến hình T1: PQ’ cĩ ma trận M1. Phép biến hình T2 : Q’Q cĩ ma trận M2. Tổng hợp 2 phép biến hình T1, T2 là phép biến hình T: PQ Phép biến hình T cĩ ma trận M = M1 x M2 Giải thuật: - Tính các phần tử của ma trận M.
- Xác định các điểm mới của đối tượng qua phép biến hình. -Vẽ lại đối tượng.
2- Biểu diễn đối tượng 3D
Cơ sở tốn học:
Thiết kế hệ thống kiểm tra các quan hệ hình học trang 41
cos(A) 0 -sin(A) 0 0 1 0 0 sin(A) 0 cos(A) 0 0 0 0 1 M = cos(A) sin(A) 0 0 -sin(A) cos(A) 0 0 0 0 1 0 0 0 0 1 M =
Các đối tượng trong thế giới thực hầu hết là các đối tượng 3D. Việc biểu diễn các đối tượng 3D trên mặt phẳng 2D, bằng máy tính phải tuân thủ các quy luật về phối cảnh… nhằm giúp người xem cĩ ấn tượng hình ảnh gần đúng trong thực tế.
Mơ hình khung dây(Wireframe) dùng biễu diễn các đối tượng 3D đơn giản như các khối đa diện, các mặt mà cĩ thể đơn giản hĩa cách thể hiện nĩ như gồm tập hợp gồm các đỉnh và các cạnh nối liền các đỉnh đĩ. Để lưu trữ mơ hình khung dây cần phải cĩ 2 danh sách:
+ Danh sách đỉnh chứa tọa độ các đỉnh.
+ Danh sách cạnh chứa các cặp đỉnh nối cạnh đĩ. Cấu trúc dữ liệu mơ tả Wireframe
Typedef struct { int NumVerts; int NumEdges; Point3D vert [ ]; Point3D edge[ ][2]; } wireframe;
Để vẽ các đối tượng biểu diễn bằng mơ hình khung dây chúng ta chỉ cần vẽ các cạnh trong danh sách cạnh. Tuy nhiên do các đỉnh và cạnh được định nghĩa trong 3D nên để vẽ ta phải chiếu lên mặt phẳng 2D bằng các phép chiếu thích hợp :
+Chiếu mỗi điểm lên 2D.
+Vẽ đoạn thẳng giữa hai điểm chiếu này.
Giải thuật:
+Khởi tạo danh sách đỉnh.
Đưa các đỉnh đa giác vào danh sách đỉnh. +Khởi tạo danh sách các cạnh.
Đưa các cặp đỉnh nối cạnh vào danh sách cạnh. +Khởi tạo phép chiếu.
+Vẽ các cạnh của đối tượng.
Trong chương trình minh họa, chúng ta sẽ dùng mơ hình wireframe để biểu diễn một số đối tượng ba chiều đặc biệt như hình lăng trụ, hình chĩp.
♦ Hình lăng trụ: Cơ sở của hình lăng trụ là một đa giác P nằm trên mặt xy và được quét dọc theo trục z đến một chiều cao H nào đĩ. Nếu đa giác P cĩ n đỉnh, hình lăng trụ cĩ 2*n đỉnh và 3*n cạnh.
Danh sách đỉnh: n đỉnh đầu tiên dành cho đa giác P cĩ tọa độ z bằng 0, n đỉnh kế tiếp cĩ tọa độ z là h.
Danh sách cạnh: n cạnh được chọn đầu tiên thuộc đa giác P sao cho prism.edge[i,1] là i và prism.edge[i,2] là i+1 (ngoại trừ khi i =n thì sẽ là 1 để thành đa giác), tương tự n cạnh kế ở mặt trên của hình trụ. Cuối cùng là n cạnh đứng của hình trụ cĩ prism.edge[i+2n,1] là i và prism.edge[i+2n] là i+n.
♦ Hình chĩp: Đáy của hình chĩp là đa giác P cĩ n đỉnh nằm trên mặt xy. Và đỉnh hình chĩp khơng thuộc mặt xy. Hình chĩp cĩ 2*n đỉnh và 2*n cạnh.
Danh sách đỉnh: n đỉnh đầu tiên dành cho đa giác P cĩ tọa độ z bằng 0, đỉnh kế tiếp (n+1) cĩ tọa độ z là h.
Danh sách cạnh: n cạnh được chọn đầu tiên thuộc đa giác P sao cho pyramide.edge[i,1] là i và pyramide.edge[i,2] là i+1 (ngoại trừ khi i =n thì sẽ là 1 để thành đa giác). n cạnh kế cĩ pyramide.edge[i+n,1] là i và pyramide.edge[i+n,2] là n+1.