Tải bản đầy đủ (.pdf) (29 trang)

Bài giảng Đồ họa máy tính: Chương 5 - ThS. Trần Thị Minh Hoàn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (315.61 KB, 29 trang )

Chương V. Biến đổi ba chiều




I. Nhắc lại đại số với véctơ
II. Các phép biến đổi 3D cơ sở
III. Biến đổi 3D gộp

1


Đại số véctơ
P2


Biểu diễn véctơ




V

Đoạn thẳng có hướng giữa hai điểm xác định

P1

Cộng hai véctơ
V1  V2  ( x1  x 2 , y1  y 2 , z1  z 2 )




Nhân hai véctơ


y

Tích vơ hướng hay tích điểm

V1 .V2  x1 x 2  y1 y 2  z1 z 2


Độ dài véctơ

V1+V2
V2=(x2,y2,z2)
V1=(x1,y1,z1)

V  V.V  ( x 2  y 2  z 2 )

x
V2


z
V1

V1 .V 2  V1 V 2 cos 
Chiếu V2 trên V1
2



Đại số véctơ


Tích có hướng của hai véctơ






Kết quả là véctơ vng góc với mặt phẳng
tạo ra bởi hai véctơ
Véctơ đơn vị u


Có độ dài bằng 1



Xác định hướng của véctơ kết quả

V1 x V2
V2
u



V1


Quy tắc bàn tay phải


Nắm tay phải, để cong các ngón tay
từ V1 đến V2 (nếu V1xV2), lịng bàn
tay hướng về gốc, ngón cái sẽ trỏ theo
hướng của u



Véctơ kết quả
V1 xV2  u V1 V2 sin 
3


Đại số véctơ
ux , u y , uz



Véctơ đơn vị theo các trục tọa độ:



Tích có hướng của hai véctơ được biểu diễn như sau:
y

ux

uy


uz

V1 xV2  x1
x2

y1
y2

z1
z2

uy
uz

x

ux
z

V1 x V2  u x ( y1 z 2  z1 y 2 )  u y ( z1 x 2  x1 z 2 )  u z ( x1 y 2  x 2 y1 )


Cosine hướng


y

Cho trước véctơ p. Cosine hướng


là cosine của các góc ,  và 
u= i cos  + j cos  + k cos 
cos2  + cos2  + cos2  = 1

p
u
p

P(x, y, z)


j
k



y = r cos 

i

x

O

z


(x, 0, z)
4



Các phép biến đổi 3D cơ sở





Dịch chuyển
Co dãn
Xoay
Các phép biến đổi khác

5


Các phép biến đổi 3D cơ sở


Dịch chuyển điểm (x, y, z) đến (x’, y’, z’)

x'



y ' z ' 1  x

y

1
0

z 1
0

Tx

0
1

0
0

0
Ty

1
Tz

 Sx 0
 0 Sy
z 1
0 0

0 0

0
0

0
0
0


1 

y
(x', y',z')
(x, y,z)
z

x

Co dãn

x'

y ' z ' 1  x

y

0
0
Sz 0

0 1

6


Các phép biến đổi 3D cơ sở



Xoay





Chọn trục xoay và góc xoay
Qui ước: Xoay ngược chiều kim đồng hồ theo trục sẽ tạo thành góc dương
nếu nhìn về gốc tọa độ từ nửa trục dương.
Trục dễ quản lý: song song trục tọa độ
y

z


x

Xoay quanh trục z
x '  x cos   y sin 
y '  x sin   y cos 
z'  z

x'

y ' z ' 1  x

y

 cos 
 sin 

z 1
 0

 0

sin 
cos 
0
0

0 0
0 0
1 0

0 1
7


Các phép biến đổi 3D cơ sở


Xoay quanh trục x

y '  y cos   z sin 
z '  y sin   z cos 
x'  x


x'


y ' z ' 1  x

y

0
1
0 cos 
z 1
0  sin 

0
0

0
sin 
cos 
0

0
0
0

1

Xoay quanh trục y
z '  z cos   x sin 
x'  z sin   x cos 
y'  y

x '


y ' z ' 1  x

y

cos 
 0
z 1
 sin 

 0

0  sin 
1
0

0
cos 

0

0

0
0
0

1
8



Xoay quanh trục bất kỳ


Trường hợp đặc biệt



Trục xoay song song trục tọa độ
Các bước thực hiện






Dịch đối tượng sao cho trục xoay về trục tọa độ song song với nó
Thực hiện xoay
Dịch đối tượng sao cho trục xoay về vị trí ban đầu

Trường hợp tổng quát




Yêu cầu bổ sung một vài biến đổi
Xác định ma trận chuyển đổi bằng đại số véctơ
Xác định ma trận chuyển đổi bằng hình học

9



Các bước xoay quanh trục bất kỳ
1. Dịch đối tượng sao cho trục xoay đi qua gốc tọa độ.
2. Xoay đối tượng sao cho trục xoay trùng với một
trong các trục tọa độ.
3. Thực hiện xoay đối tượng.
4. Áp dụng xoay ngược để trục xoay trở về hướng
xoay ban đầu.
5. Áp dụng chuyển dịch ngược để đem trục xoay về vị
trí ban đầu.

10


Tìm ma trận chuyển đổi bằng hình học




l
(x1,y1,z1)

Bước 1: Tịnh tiến sao cho đầu cuối của nó trùng với gốc
tọa độ.




(x2,y2,z2)


Giả sử trục xoay được xác định bởi hai điểm (x1, y1,
z1) và (x2, y2, z2), có độ dài l

Tọa độ hai đầu đoạn thẳng sẽ là (0, 0, 0) và (x0, y0, z0).



Bước 2: Thực hiện xoay quanh trục x và y để trục bất kỳ
trùng với trục z



Bước 3: Xoay quanh trục z góc 

(x0, y0, z0)

y



Bước 4: Xoay ngược lại quanh trục y và x



Bước 5: Tịnh tiến ngược để đưa trục về vị trí ban đầu.

(x0, y0, z0)
l


Ma trận biến đổi cuối cùng

T R ARB

 T TR



T R x T R y T R z T R  T R  T TR 







y


x

l

1

z

x



l

11


Thực hiện tính tốn


Bước 1: Ma trận tịnh tiến

 1
 0
TTR   
 0

 x1

0
1
0

0
0
1

 y1

 z1

0

0 
0

1

(x2,y2,z2)
l
(x1,y1,z1)

12


Thực hiện tính tốn
y


Bước 2:


Tính góc  cho ma trận xoay. Chiếu trục xoay
lên mặt phẳng yz
sin  
cos  

(0, y0, z0)

(x0, y0, z0)
d

l




y
 0
d
y02  z 02



y0

z0
2
0

y z

2
0



x

l
k

z0
d


z
y
(x0, y0, z0)



Ma trận xoay quanh x một góc 

l


d

TR x

0
1
0 cos 

0  sin 

0
0

0
sin 
cos 
0


0  1
0
0  0 z 0 / d

0  0  y 0 / d
 
1  0
0

0
y0 / d
z0 / d
0

0
0
0

1

k



x

l

z


13


Thực hiện tính tốn


y

Bước 3:


x
sin   0
l

l
2

d

l

d
cos  
l

2
0

2

0

2
0

2
0

2
0

2
0

x y z

l  x y z



(x0, y0, z0)

Tìm góc quay  xung quanh trục y
d


k

2


2
0

l  x d



x

l

z

2

y 02  z 02

Ma trận xoay quanh y một góc 

TR y

 cos 
 0

  sin 

 0

0
1


sin 
0

0 cos 
0
0

0  d / l
0   0


  x0 / l
0
 
1  0

0
1

x0 / l
0

0
0

d /l
0

0

0 
0

1
14


Thực hiện tính tốn


Bước 4:


Xoay xung quanh trục đã trùng với trục z
y

TR z

 cos 
  sin 

 0

 0

sin 
cos 
0
0


0 0
0 0 
1 0

0 1

(x0, y0, z0)
l
d
k




x

l

z



Tìm ma trận biến đổi ngược trước khi tính tốn ma
trận cuối cùng

15


Tìm ma trận xoay bằng đại số véctơ



Trục xoay đi qua hai điểm P1 (x1, y1, z1)

y
(x2,y2,z2)

và P2 (x2, y2, z2).


u

P1 và P2 xác định véc tơ V:

(x1,y1,z1)

V  ( x 2  x1 , y 2  y1 , z 2  z1 )


x

Véc tơ đơn vị u theo trục xoay sẽ là

V
u
 a, b, c 
V


z


a

x2  x1
y  y1
z z
, b 2
, c 2 1
V
|V|
|V|

Giả sử chọn trục z để biến đổi trục xoay theo nó

16


Tìm ma trận xoay bằng đại số véctơ


Các bước thực hiện


Bước 1: Dịch đối tượng sao cho P1 về gốc tọa độ

 1
 0
T 
 0

  x1



0
1
0

0
0
1

 y1

 z1

0
0 
0

1

y

u
z

x

Biến đổi sao cho trục xoay trùng trục z



Xoay quanh trục x sao cho véc tơ u trong mặt phẳng xz



Xoay quanh trục y để đem u về trục z

17


Tìm ma trận xoay bằng đại số véctơ


Bước 2: Tìm ma trận xoay quanh x để u về mặt phẳng xz


Góc xoay: giữa ánh xạ véctơ u vào mặt yz và trục dương z



Tìm góc xoay ?

u
z

x

x
z
u


Biến đổi sao cho trục
xoay trùng trục z

18


Tìm ma trận xoay bằng đại số véctơ


Tìm cos 
u'.u z
c
cos  
 ,
u' u z
d

y

u=(a,b,c)

u'=(0,b,c)

u'  0 2  b 2  c 2  b 2  c 2  d


x

uz  1


z

uz=(0,0,1)

u'.u z  0.0  b.0  c.1  c


Tính sin 

u ' xu z  u x . u' . u z .sin   u x b 2  c 2 sin   u x d sin 

u' = (0, b, c) và uz = (0, 0, 1)

ux
u ' xu z  0
0

uy
b
0

uz
c  u xb
1

sin  

b
d
19



Tìm ma trận xoay bằng đại số véctơ


Ma trận xoay quanh trục x

0
1
0 cos 
Rx ( )  
0  sin 

0
0

0
sin 
cos 
0

y2  y1
z 2  z1
b
, c
|V|
|V|

0 1
0

0 0 c / d

0  0  b / d
 
1  0
0

0
b/d
c/d
0

0
0
0

1

d  b2  c2

V  V.V  ( x 2  y 2  z 2 )
20


Tìm ma trận xoay bằng đại số véctơ


Bước 3: Tìm ma trận xoay véctơ đơn vị u’’ trong mặt xz quanh trục y vào
trục dương z





Các thành phần của u”:


Xoay quanh trục x nên thành phần x của véctơ có giá trị a



Vì xoay u’ vào trục z cho nên thành phần z của u” có giá trị d



Thành phần y của u” có giá trị 0

Tính cos  từ tích vơ hướng của u” và uz
y

cos  

u".u z
d
u" u z

u’=(0,b,c)

uz

V1 .V2  x1 x 2  y1 y 2  z1 z 2


x
u"=(a,0,d)



Theo tính chất cosin hướng ta có
|uz| =1 và |u"| = (a2+b2+c2)1/2=1

z

(b2+c2)1/2=d

21


Tìm ma trận xoay bằng đại số véctơ


Tính sin  từ tích có hướng của u” và uz

u"xu z  u y u" u z sin   u y .1.1.sin   u y sin 
ux
u " xu z  a
0
Do đó: sin  = a


uy
0

0

uz
d  u y ( a)
1

y
u’=(0,b,c)

uz

x

Xoay quanh trục y với góc âm
u"=(a,0,d)

d
0
Ry    
 a

0

0 a 0
1 0 0
0 d 0

0 0 1

z


(b2+c2)1/2=d

22


Tìm ma trận xoay bằng đại số véctơ


Xoay quanh trục y với góc âm (theo chiều kim đồng hồ)



 d 0 a 0
 0 1 0 0

Ry    
  a 0 d 0


 0 0 0 1
Trục xoay là trục z dương, góc xoay 
 cos 
  sin 
Rz    
 0

 0

sin 

cos 
0
0

0
0
1
0

0
0 
0

1



Bước 4: Biến đổi trục xoay về vị trí ban đầu



Ma trận biến đổi xoay cuối cùng là

y
u’=(0,b,c)

uz

x
u"=(a,0,d)


z

(b2+c2)1/2=d

R()=T.Rx().Ry().Rz().Ry-1 ().Rx-1 ().T-1
23


Phép lấy đối xứng (reflection)


Giải pháp




Lấy đối xứng một trục tọa độ qua mặt phẳng phản chiếu

Thí dụ lấy đối xứng qua mặt phẳng xy


Biến đổi này làm thay đổi trục z còn giữ nguyên các trục x, y



Biểu diễn ma trận phản chiếu của các điểm so với mặt phẳng xy sẽ như sau

1
0

RFz  
0

0

0

0

0
1 0 0
0  1 0

0 0 1

y

y

z

z

x

x

24



Phép lấy đối xứng (reflection)


Lấy đối xứng qua mặt phẳng yz và xz

 1
0
RFx  
0

0


0 0 0
1 0 0
0 1 0

0 0 1

1 0
0  1
RFy  
0 0

0 0

0 0
0 0 
1 0


0 1

Lấy đối xứng qua gốc tọa độ (0, 0, 0)

 1 0 0
 0 1 0
RFo  
 0 0 1

0 0 0

0
0 
0

1
25


×