CGと線形代数7(.odp)

Download Report

Transcript CGと線形代数7(.odp)

3DCGにおける線形代数
7
5404025 澄川 知弘
1
合成変換
[2つの変換 f,g ]
・点 P が f で点 P' に移される
・点 P' が g で点 P'' に移される
2
合成変換
[2つの変換 f,g ]
・点 P が f で点 P' に移される
・点 P' が g で点 P'' に移される
点 P を P'' に移す操作を「 f と g の 合成変
換」
3
任意の点を基点とする拡大縮小(平面)
[ 点 P(a,b) を基点としてスケーリング定数が sx,sy の
スケーリング変換 ]
 1  P を原点に移す平行移動 : T PO
 2  原点基点のスケーリング変換 : S sx, sy
 3  原点を P に移す 平行移動 : T OP
この3つの変換を順に合成していく
T PO S sx ,sy T OP
4
任意の点を基点とする拡大・縮小(平面)
[ 点 P(a,b) を基点としてスケーリング定数が sx,sy の
スケーリング変換 ]
   


1 0 0 sx 0 0 1 0 0
T PO S sx ,sy T OP = 0 1 0 0 sy 0 0 1 0
−a −b 1 0 0 1 a b 1
sx
0
0
=
0
sy
0
−sx∗a  a −sy∗b  b 1
5
任意の点を基点とする拡大・縮小(平面)
[ 点 P(a,b) を基点としてスケーリング定数が sx,sy の
スケーリング変換 ]


sx
0 0
 x' , y' , 1  = x y 1 
0
sy 0
−sx∗a  a −sy∗b  b 1
6
任意の点を基点とする拡大縮小(空間)
[ 点 P(x0,y0,z0) を基点としてスケーリング定数が
sx,sy,sz の スケーリング変換 ]
 1  P を原点に移す平行移動 : T PO
 2  原点基点のスケーリング変換 : S sx, sy , sz
 3  原点を P に移す 平行移動 : T OP
この3つの変換を順に合成していく
T PO S sx ,sy , sz T OP
7
任意の点を基点とする拡大・縮小(空間)
[ 点 P(x0,y0,z0) を基点としてスケーリング定数が
sx,sy,sz の スケーリング変換 ]
   


1 0 0 0 sx 0 0 0 1
0
1
0
0
0
sy
0
0
0
T PO S sx ,sy , sz T OP =
0 0 1 0 0 0 sz 0 0
−x0 −y0 −z0 1 0 0 0 1 x0
0
1
0
y0
0 0
0 0
1 0
z0 1
sx
0
0
0
sy
0
=
0
0
sz
−sx∗x0  x0 −sy∗y0  y0 −sz∗z0  z0
0
0
0
1
8
任意の点を基点とする拡大・縮小(空間)
[ 点 P(x0,y0,z0) を基点としてスケーリング定数が
sx,sy,sz の スケーリング変換 ]

sx
0
0
0
sy
0
 x' , y' , z' , 1 = x y z 1 
0
0
sz
−sx∗x0  x0 −sy∗y0  y0 −sz∗z0  z0
0
0
0
1

9
任意のベクトルをKに重ねる変換
任意のベクトル v=ai+bj+ck をz軸の正の部分に
重ねる変換 Av
z
z
c
v
0
v1
P(a,b,c
)
b
v
y z
x
v1
y
v2
x
θ1
θ2
y
10
x
任意のベクトルをKに重ねる変換
任意のベクトル v=ai+bj+ck をz軸の正の部分に
重ねる変換 Av
 i  x軸の周りの回転角 θ 1 の回転 Rθ ,k により
v を xz平面上のベクトル v1 に移す
 ii  y軸の周りの回転角 θ 2 の回転 Rθ, j により
v 1 を z軸上のベクトル v 2 に移す
11
任意のベクトルをKに重ねる変換
任意のベクトル v=ai+bj+ck をz軸の正の部分に
重ねる変換 Av
 i  x軸の周りの回転角 θ 1 の回転 Rθ ,k により
v を xz平面上のベクトル v1 に移す
 ii  y軸の周りの回転角 θ 2 の回転 Rθ, j により
v 1 を z軸上のベクトル v 2 に移す
(i) でvのy成分を0にして (ii) でx成分を0にする
12
任意のベクトルをKに重ねる変換
(i) において

1 0
0
 a' , b' , c'  =  a b c  0 cos θ sin θ
0 −sin θ cos θ

=  a , b cosθ 1 − c sin θ1 , b sin θ 1 − c cosθ 1 
13
任意のベクトルをKに重ねる変換
(i) において


0
1 0
 a' , b' , c'  =  a b c  0 cos θ 1 sin θ 1
0 −sin θ 1 cos θ1
=  a , b cosθ 1 − c sin θ1 , b sin θ 1 − c cosθ 1 
これが xz 平面上にあるためy成分は0であるから
b cos θ1 − c sin θ1 = 0
14
任意のベクトルをKに重ねる変換
三角関数の合成公式より
b cos θ1 − c sin θ1 =
15
任意のベクトルをKに重ねる変換
三角関数の合成公式より
b cos θ1 − c sin θ1 =  b  c sinα−θ 1  = 0
b
c
sin α = 2 2 , cos α = 2 2
 b c
 b c
2
2
16
任意のベクトルをKに重ねる変換
三角関数の合成公式より
b cos θ1 − c sin θ1 =  b  c sinα−θ 1  = 0
b
c
sin α = 2 2 , cos α = 2 2
 b c
 b c
2
2
sin α − θ1 = 0 より α = θ1 なので
b
c
sin θ 1 = 2 2 , cos θ1 = 2 2
 b c
 b c
17
任意のベクトルをKに重ねる変換

0
0
1
 a ' , b ' , c '  =  a b c  0 cos θ 1 sin θ 1
0 −sin θ 1 cos θ1
=a b c 

1
0
0
0
c
b
2
b
2
c
b
2
c
2
−

0
b
b
b
2
2
2
c
c
2
c

18
任意のベクトルをKに重ねる変換

0
0
1
 a ' , b ' , c '  =  a b c  0 cos θ 1 sin θ 1
0 −sin θ 1 cos θ1
=a b c 

1

0
c
0
b
0 −
2
0
b
c
b
b
2
c
=a ,0 , b c 
2
2
2
b
2
b
2
2
c
c
2
c

2
19
任意のベクトルをKに重ねる変換
 1  P を原点に移す平行移動 : T 
PO
 i  x軸の周りの回転角 θ 1 の回転 Rθ ,k により
v を xz平面上のベクトル v1 に移す
 ii  y軸の周りの回転角 θ 2 の回転 Rθ, j により
v 1 を z軸上のベクトル v 2 に移す
iiについてもiと同様に解く
20
任意のベクトルをKに重ねる変換

cos θ 2 0 −sin θ 2
2
2
 a ' ' , b' ' , c ' '  =  a 0  b  c 
0 1
0
sin θ 2 0 cos θ 2
=a 0
 b2  c 2 

 b 2  c2
2
2
2
a

b

c

0
−
1
a
a
2
2
b c
=0 , 0 , a b  c 
2
0
2
2
0

a
2
2
2
a

b

c

0
 b2  c2
a
2
2
b c
2
2
21

任意のベクトルをKに重ねる変換
v = a i  b j  c k より ∣v∣ =  a 2  b2  c 2
λ=
b
2
 c としてここまでを整理すると
2
Av = Rθ i Rθ
1,
2,
j
22
任意のベクトルをKに重ねる変換
v = a i  b j  c k より ∣v∣ =  a 2  b2  c 2
λ=
b
2
 c としてここまでを整理すると
2
Av = Rθ i Rθ
j
   
1,
1
0
c
0
=
λ
b
0 −
λ
2,
0
b
λ
c
λ
λ
0
λ
a
∣v∣
0
∣v∣
∣v∣
ab
c
0
1 0 = −
λ ∣v∣ λ
a
λ
ac
b
−
0
−
−
∣v∣
∣v∣
λ ∣v∣
λ
a
∣v∣
b
λ
c
∣v∣

23
任意のベクトルをKに重ねる変換
v = a i  b j  c k より ∣v∣ =  a 2  b2  c 2
λ=
b
2
 c としてここまでを整理すると
2
Av = Rθ i Rθ
1,
2,
j
Rθ
S sx , sy , sz
Mx
My
Tv
Av
R−θ
S
1
1
1
,
,
sx sy sz
Mx
My
Tv
t
Av
もし b = c = 0 だった場合 Rθ i を
単位行列 E として計算しなければならない
1,
24
任意のベクトルをKに重ねる変換
任意のベクトル v=ai+bj+ck をz軸の正の部分に
重ねる変換 Av

λ
∣v∣
a b
−
λ ∣v∣
a c
−
λ ∣v∣
Av =

a
∣v∣
b
λ
c
∣v∣
0
c
λ
b
−
λ


0
0
0
a
−
∣a∣
1
a
∣a∣
0
0
0
 ただし λ =  b2  c 2 
b = c = 0 でないとき
b = c = 0 のとき
25