CHƯƠNG 3: CÁC PHÉP BIẾN ĐỔI ĐỒ HOẠ
3.3. CÁC PHÉP BIẾN ĐỔI HÌNH HỌC BA CHIỀU
3.3.7. Cài đặt bằng c/c++ như sau
Đổi 3D sang 2D
#define RADS 0.017453293 struct point{
int x,y,z;
}
point Diem3d(int &x, int &y, int &z) { point p;
p.x = int(getmaxx()/2+ y - x*cos(RADS*45));
p.y = int(getmaxy()/2 - z + x*cos(RADS*45));
return p;
}
Quay quanh các trục toạ độ
point quay(int x,int y,int z,float goc,int truc){
point p;
if (truc==1){ //Quay quanh OX
p.y=y*cos(RADS*goc)-z*sin(RADS*goc);
p.z=y*sin(RADS*goc)+z*cos(RADS*goc);
p.x=x;
}
if (truc==2){ //Quay quanh OY
p.x=x*cos(RADS*goc)+z*sin(RADS*goc);
p.z=-x*sin(RADS*goc)+z*cos(RADS*goc);
p.y=y;
}
if (truc==3){
p.x=x*cos(RADS*goc)-y*sin(RADS*goc);
p.y=x*sin(RADS*goc)+y*cos(RADS*goc);
p.z=z;
}
return p;
}
Tóm tắt:
Các phép biến đổi hình học cho phép dễ dàng thao tác trên các đối tượng đã được tạo ra.
Chúng làm thay đổi mô tả về toạ độ của các đối tượng, từ đó đối tượng sẽ được thay đổi về hướng, kích thước và hình dạng. Các phép biến đổi hình học cơ sở bao gồm tịnh tiến, quay và biến đổi tỷ lệ. Ngoài ra một số phép biến đổi khác cũng thường được áp dụng đó là phép đối xứng và biến dạng.
Các phép biến đổi hình học 2D đều được biểu diễn dưới dạng ma trận đồng nhất 3x3 để tiện cho việc thực hiện các thao tác kết hợp giữa chúng. Trong hệ toạ độ đồng nhất, toạ độ của một điểm được mô tả bởi một vector dòng bao gồm ba giá trị, hai giá trị đầu tương ứng với toạ độ Descartes của điểm đó, và giá trị thứ ba là 1. Với cách biểu diễn này, ma trận của phép biến đổi có được từ sự kết hợp của các phép biến đổi cơ sở sẽ bằng tích của các ma trận của các phép biến đổi thành phần.
Phép biến đổi hình học 3D là sự mở rộng của phép biến đổi 2D. Tương tự nó cũng có các phép: tịnh tiến, tỷ lệ, biến dạng và quay. Phức tạp nhất là phép quay, nên chúng ta khảo sát lần lượt từ đơn giản đến phức tạp: quay đối tượng quanh các trục toạ độ, quanh 1 trục song song với trục toạ độ, quanh 1 trục bất kỳ....Do khảo sát các phép biến đổi affine với biểu diễn dạng ma trận đồng nhất (4x4 với 3D) nên công việc khá đơn giản và nhất quán.
Lưu ý phép tịnh tiến và quay có chung thuộc tính là: sau khi biến đổi hình dạng và kích thước của đối tượng không thay đổi mà chúng chỉ bị thay đổi vị trí và định hướng trong không gian.
Bài tập:
1.
a. Hãy tìm ma trận biểu thị phép quay một đối tượng một góc 600 quanh gốc toạ độ.
b. Tìm toạ độ mới của P(-3,3) sau khi thực hiện phép quay trên?
2.
a. Hãy viết dạng tổng quát của ma trận điều chỉnh tỷ lệ tương ứng với một điểm cố định Q(a,b)?
b. Phóng lớn tứ giác có các đỉnh A(0,0), B(1,3), C(4,2) và D(3,1) lên hai lần kích thước ban đầu của nó trong khi vẫn giữ điểm D(3,1)?
3.
a. Mô tả phép biến đổi nhằm quay 1 đối tượng một góc α xung quanh một tâm cố định Q(a,b)?
b. Thực hiện phép quay tam giác ABC có A(0,0), B(1,1) và C(4,2) một góc 450 xung quanh điểm (-1, -1)?
4. Cho ∆ABC có các toạ độ đỉnh là A(2,2), B(3,1) và C(4,3). Xác định ma trận biến đổi affine biến đổi tam giác này thành A’B’C’ biết ảnh A’(4,3), B’(4,5) và C’(7,3).
5.
a. hãy tìm một ma trận dành cho phép phản chiếu đối xứng gương xung quanh một đường thẳng G với độ dốc m và tung độ gốc (0,g)?
b. Tạo phản xạ đối xứng gương đa giác mà đỉnh của nó: A(-1,0), B(0,-2), C(1,0) và D(0,2) xung quanh đường G trong các trường hợp sau:
i. x=2 ii. y=3 iii. y=2x+3
6. Cho hình chóp ABCD có các toạ độ A(0,0,0), B(1,0,0), C(0,1,0) và D(0,0,1). Quay hình chóp quanh đường L (v=x+y+z) đi qua điểm C một góc 450. Tìm toạ độ hình chóp mới.
7.
a. Hãy tìm phép biến đổi dành cho phép đối xứng gương tương ứng với một mặt phẳng đã cho (có vector pháp tuyến M, trên đó có một điểm P).
b. Áp dụng tìm ma trận cho phép đối xứng gương với mặt phẳng đi qua gốc toạ độ và vector pháp tuyến có hướng M=x+y+z.
8. Viết chương trình với đối tượng (đường thẳng, tam giác, tứ giác...) trong mặt phẳng 2D
a. Dịch chuyển (dùng các phím dịch chuyển) x
y P’
P G
0 g
α
x z
y M
Q
Q’
b. Phóng lớn, thu nhỏ (dùng phím dịch chuyển hay gõ vào từ bàn phím) c. Quay với góc quay được gõ vào từ bàn phím (góc gõ vào được tính bằng
độ)
9. Viết chương trình với đối tượng (hình kim cương, hình lập phương ...) trong 3D a. Dịch chuyển
b. Phóng lớn, thu nhỏ c. Quay một góc