Professional Documents
Culture Documents
Lecture 3D 1
Lecture 3D 1
Trang 2
Biến đổi Taper
Daïng haøm
x' Tx (x, y, z) rx
y' Ty (x, y, z) ry
z' Tz (x, y, z) z
vôùi r f(z)
Trang 3
Biến đổi Twist
Daïng haøm
x' Tx (x, y, z) x cos y sin
y' Ty (x, y, z) x sin y cos
z' Tz (x, y, z) z
vôùi f(z)
Trang 4
Biến đổi Bend
Trang 5
Biến đổi affine
Daïng haøm :
Px' m00Px m10Py m20Pz m30
Py' m01Px m11Py m21Pz m31
Pz' m02Px m12Py m22Pz m32
Daïng ma traän :
m00 m01 m02 0
m10 m11 m12 0
P'
P'
P
'
1 Px Py Pz 1
0
x y z
m20 m21 m22
m30 m31 m32 1
Trang 6
Cấu trúc dữ liệu cho biến đổi affine
// Lưu thông tin phép biến đổi
struct TAffine3D {
double M[4][4];
};
Trang 7
Tính chất
Những kết quả của biến đổi 2D vẫn đúng cho biến đổi 3D
Phép biến đổi affine 3D có 3 tính chất
- Bảo toàn tính thẳng
- Bảo toàn tính song song
- Bảo toàn tỉ lệ
Trang 8
Nguyên lý kết hợp và phân rã
Mọi phép biến đổi affine đều có thể phân rã thành một chuỗi
các phép biến đổi cơ bản
Trang 9
Phép tịnh tiến
Tham soá :
ñoä dôøi treân truïc Ox : t x
ñoä dôøi treân truïc Oy : t y
ñoä dôøi treân truïc Oz : t z
y
O x
z Trang 10
Công thức
Daïng haøm
Px' Px t x
Py' Py t y
Pz' Pz t z
Daïng ma traän
1 0 0 0
0 1 0 0
M
0 0 1 0
t t t 1
x y z
Trang 11
Cài đặt
TAffine3D BuildTranslation3D(double tx, double ty, double tz)
{
TAffine3D T;
return T;
}
Trang 12
Phép tỉ lệ
Tham soá :
Taâm tæ leä : O
Heä soá tæ leä treân 3 truïc : sx , sy , sz
O x
z
Trang 13
Công thức
Daïng haøm
Px' sxPx
Py' syPy
Pz' szPz
Daïng ma traän
sx 0 0 0
0 sy 0 0
M
0 0 sz 0
0 0 0 1
Trang 14
Cài đặt
TAffine3D BuildScaling3D(double sx, double sy, double sz)
{
TAffine3D T;
return T;
}
Trang 15
Phép quay
Tham soá :
Truïc quay : v x y z
Goùc quay :
y
v x y z
O x
z Trang 16
Quay quanh trục Oz
Tham soá :
Truïc quay : v 0 0 1
Goùc quay :
y
O x
z Trang 17
Công thức
Q’
P’
Q
O P x
Trang 18
Công thức
Daïng haøm
Px' cos Px sin Py
Py' sin Px cos Py
Pz' Pz
Daïng ma traän
cos sin 0 0
sin cos 0 0
M
0 0 1 0
0 0 0 1
Trang 19
Quay quanh trục Ox
Tham soá :
Truïc quay : v 1 0 0
Goùc quay : y
O x
z Trang 20
Công thức
Daïng haøm
Px' Px
Py' cos Py sin Pz
Pz' sin Py cos Pz
Daïng ma traän
1 0 0 0
0 cos sin 0
M
0 sin cos 0
0 0 0 1
Trang 21
Quay quanh trục Oy
Tham soá :
Truïc quay : v 0 1 0
Goùc quay :
y
O x
z Trang 22
Công thức
Daïng haøm
Px' cos Px sin Pz
Py' Py
Pz' sin Px cos Pz
Daïng ma traän
cos 0 sin 0
0 1 0 0
M
sin 0 cos 0
0 0 0 1
Trang 23
Quay quanh trục đi qua gốc
Trang 24
Quay(trục Ox, )
u v
O x
z u v
Trang 25
Quay(trục Oy, )
O x
z
v v
Trang 26
Quay(trục Oz, )
O x
z
v
Trang 27
Công thức
Daïng ma traän
v x y z
c cos
s sin
xx(1 c) c yx(1 c) zs zx(1 c) ys 0
xy(1 c) zs yy(1 c) c zy(1 c) xs 0
M
xz(1 c) ys yz(1 c) xs zz(1 c) c 0
0 0 0 1
Trang 28
Cài đặt
TAffine3D BuildRotation3D(double angle,
double x, double y, double z)
{
TAffine3D T;
double c, s, d;
angle *= PI/180;
c = cos(angle);
s = sin(angle);
d = sqrt(x*x + y*y + z*z);
if(d == 0) return;
x /= d;
y /= d;
z /= d;
T.M[0][0] = x*x*(1-c) + c;
T.M[1][0] = x*y*(1-c) - z*s;
T.M[2][0] = x*z*(1-c) + y*s;
T.M[3][0] = 0;
Trang 29
Cài đặt …
T.M[0][1] = y*x*(1-c) + z*s;
T.M[1][1] = y*y*(1-c) + c;
T.M[2][1] = y*z*(1-c) - x*s;
T.M[3][1] = 0;
T.M[0][3] = 0;
T.M[1][3] = 0;
T.M[2][3] = 0;
T.M[3][3] = 1;
return T;
}
Trang 30
Quay quanh một trục bất kỳ
y p1
v Tính v
v = p 1 – p0
Biến đổi Quay(trục p0p1, ) được
phân tích thành
1. Tịnh_tiến(-p0x, -p0y, -p0z)
p0
2. Quay(trục v, )
3. Tịnh_tiến(p0x, p0y, p0z)
O x
Trang 31