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