STAGE 3
回転を表す
回転行列と座標系
🎯 ミッション
点を回す計算を回転行列にまとめ、行列の列が「軸の矢印が回った先」であることを説明しよう。骨盤に乗って見た座標を内積で読み、好きな軸のまわりに回すロドリゲスの公式を、ベクトルを分けて組み立てられれば合格。
未達成

ねこ博士
チート900は、地面と空中を合わせて900°回る技だ。体全体を回したり、骨盤の向きを調べたり、脚だけを少し回したり――このアニメーションを作るときは「点を回す」計算を数えきれないほど使った。今日はその計算を整理する。まずは平面で、原点のまわりに点 (x, y) を角度 φ(ファイ)だけ反時計回りに回すと、どこへ行くかを考えよう。

うさ美
『本当はおもしろい複素数の世界』で、点 (x, y) を複素数 x+yi と見て、cos φ+i sin φ を掛けると φ だけ回る、と習いました。(x+yi)(cos φ+i sin φ) を展開すると、i²=−1 なので、(x cos φ − y sin φ) + (x sin φ + y cos φ) i。回した点は (x cos φ − y sin φ, x sin φ + y cos φ) です。

ねこ博士
よく覚えていたね。同じ式を、3次元にも広げられる別の見方で出し直そう。x の向きの長さ1の矢印 ex=(1, 0) と、y の向きの ey=(0, 1) を用意する。どんな点も、(x, y) = x ex + y ey、つまり「ex の向きに x 歩、ey の向きに y 歩」と書ける。図形を丸ごと回すと、この「歩き方」はそのままで、2本の矢印だけが回る。だから回した点は x×(回った ex)+ y×(回った ey)だ。

うさ美
ex は φ 回ると (cos φ, sin φ)。ey は、もともと ex から 90° 先にあるので、φ 回ると角度 φ+90° の向きで、(cos(φ+90°), sin(φ+90°)) = (−sin φ, cos φ) です。x 倍と y 倍して足すと (x cos φ − y sin φ, x sin φ + y cos φ)。複素数の掛け算と同じ答えになりました。

ねこ博士
この計算を短く書くために、回った矢印を縦に並べて箱にする。左の列が回った ex、右の列が回った ey だ。この数の箱を行列といい、回転を表すものを回転行列という。行列とベクトルの掛け算 R(x, y) は、「行列の各行と (x, y) の内積を、上から並べたもの」と決める。計算すると、さっきの答えそのものになる。
回転行列:R =
上の行との内積:(cos φ, −sin φ)・(x, y) = x cos φ − y sin φ
下の行との内積:(sin φ, cos φ)・(x, y) = x sin φ + y cos φ
| cos φ | −sin φ |
| sin φ | cos φ |
赤の矢印が回った ex=(cos φ, sin φ)、緑の矢印が回った ey=(−sin φ, cos φ)。この2本を列に並べたものが回転行列 R。灰色の棒人間(横から見たチート900の構え)の点は、どれも「x×赤+y×緑」の位置へ移る

うさ美
行列の列を見るだけで、軸の矢印がどこへ回ったかが分かるんですね。3次元でも同じですか?

ねこ博士
同じだ。3次元では軸の矢印が3本 ex、ey、ez あるから、回った3本を列に並べた 3×3 の箱が回転行列になる。たとえば上向きの y 軸のまわりに φ 回すと――体が床の上でくるっと回る向きだね――y の矢印は動かず、x と z の矢印が床に平行な面の中で回る。行列の真ん中の列 (0, 1, 0) が「y の矢印は動かない」を表している。
y 軸のまわりに φ 回す:Ry =
| cos φ | 0 | sin φ |
| 0 | 1 | 0 |
| −sin φ | 0 | cos φ |

うさ美
逆に、回転行列が分からなくても、回った後の3本の矢印さえ分かれば、それを並べれば回転行列になる、ということですか?

ねこ博士
その通り。そして、それがとても役に立つ。チート900の骨盤を考えよう。左の股関節から右の股関節へ向かう右向きの矢印 d、骨盤の上向きの矢印 u、そして2本に直角な前向きの矢印 f = u×d(外積だ。順番を逆にした d×u だと、右手の規則で後ろ向きになる)。どれも長さを1にそろえ、お互いに直角になるようにしておく。この3本を並べた行列が、骨盤がどれだけ回っているかを表す回転行列になる。このように、体のある部分にくっついた3本の直角な矢印の組を座標系という。

うさ美
骨盤の座標系があると、何が分かるんですか?

ねこ博士
「骨盤に乗って見ると、つま先はどこにあるか」が分かる。骨盤の中心 c からつま先 q への矢印を q−c とすると、骨盤から見た座標は (d・(q−c), u・(q−c), f・(q−c))。ステージ2で話した、内積は、長さ1の矢印の向きへの影の長さという性質を使っているんだ。下の図で、体が空中で回っても、骨盤から見た座標はあまり変わらないことを確かめてごらん。
骨盤の中心から出る3本の矢印が骨盤の座標系(赤=右 d、緑=上 u、青=前 f)。右つま先の位置を「床の座標」と「骨盤から見た座標(d・u・f との内積)」で並べた。再生すると、床の座標は体の回転につれて大きく変わるが、骨盤から見た座標は脚の動きの分しか変わらない

うさ美
床の座標だと、空中で体が回るたびにつま先の x と z が大きく入れ替わるのに、骨盤から見た座標はゆっくりしか変わりません。脚の形そのものを見ているからですね。

ねこ博士
そう。だから「脚の形」を扱いたいときは骨盤の座標系で考える。実際、このアニメーションでは、インパクトの前後で蹴り脚の形が崩れたとき、前の版の蹴り脚の形を骨盤から見た座標で取り出し、今の骨盤の向きに付け直すことで直した。骨盤から見た座標から床の座標に戻すときは、c +(d、u、f をそれぞれの成分倍して足したもの)、つまり回転行列を掛けて c を足せばいい。

うさ美
もう1つ知りたいです。体全体を、ななめの軸のまわりに少しだけ回したいときはどうするんですか? x・y・z の軸のまわりではなくて。

ねこ博士
いい質問だね。軸の向きを長さ1の矢印 k、回す角度を θ として、点(ベクトル)v を回すことを考えよう。コツは、v を軸に平行な部分と軸に直角な部分に分けることだ。軸に平行な部分は、軸への影だから内積で (k・v) k。直角な部分は、v からそれを引いた v⊥ = v − (k・v) k。軸のまわりに回すと、それぞれどうなると思う?

うさ美
軸に平行な部分は、軸の上にあるので、回しても動きません。直角な部分は、軸のまわりの円の上を回ります。

ねこ博士
その通り。直角な部分 v⊥ が回る円の平面には、v⊥ 自身と、それに直角でちょうど90° 先にある矢印 k×v が乗っている。k×v は外積だから k にも v⊥ にも直角で、長さは |k| |v⊥| = |v⊥|、ちょうど同じ長さだ。だから平面の回転と同じように、θ 回った後は v⊥ cos θ + (k×v) sin θ。これに動かない平行な部分を足してまとめたものをロドリゲスの回転公式という。最後の項は、v⊥ cos θ を v cos θ と (k・v)k cos θ に分けて、平行な部分とまとめたものだ。
平行な部分(動かない):v∥ = (k・v) k
直角な部分(θ 回る):v⊥ cos θ + (k×v) sin θ
ロドリゲスの回転公式:回した v = v cos θ + (k×v) sin θ + k (k・v)(1 − cos θ)
紫の線が回転の軸(重心を通り、向きは長さ1の矢印 k)。オレンジの円が、右つま先の「軸に直角な部分」が回る道すじ。下のボタンは、同じ 90° ずつの回転でも、回す順番を入れ替えると最後の向きが違うことを見るためのもの。図はドラッグで回せる

うさ美
下のボタンで、x 軸と y 軸のまわりに 90° ずつ回す順番を入れ替えたら、最後の姿勢がまったく違いました。平面の回転は、30° 回してから 40° 回しても、40° 回してから 30° 回しても同じなのに。

ねこ博士
3次元の回転の大事な性質だ。回す順番を入れ替えると結果が変わる。行列でいうと、「回転行列の掛け算は、順番を入れ替えると答えが変わる」ということになる。体全体の向きを少しずつ直す計算を重ねるときには、どの順番で掛けるかに気をつけないといけない。それから、3つの軸のまわりの角度(たとえば左右・上下・ひねり)で向きを表す方法もあるけれど、順番の問題と、ある向きのときに角度が1つに決まらなくなる問題があって、なめらかにつなぐのには向いていない。次のステージでは、それを解決する四元数を扱う。
【このステージの成果】
平面で φ 回す:(x, y) → (x cos φ − y sin φ, x sin φ + y cos φ)(複素数の掛け算と同じ)
回転行列=軸の矢印が回った先を、列に並べた箱。行列×ベクトル=各行との内積を並べたもの
座標系=体の部分にくっついた、長さ1で互いに直角な3本の矢印(骨盤なら右 d・上 u・前 f=u×d)。骨盤から見た座標は (d・(q−c), u・(q−c), f・(q−c))
ロドリゲスの回転公式(軸 k、角度 θ):v cos θ + (k×v) sin θ + k (k・v)(1−cos θ)。軸に平行な部分は動かず、直角な部分が円の上を回る
3次元の回転は、回す順番を入れ替えると結果が変わる
確認クイズ
Q1. 平面の点 (1, 0) を、原点のまわりに反時計回りに 90° 回すとどこへ行く?
正解! (x cos φ − y sin φ, x sin φ + y cos φ) に x=1、y=0、φ=90° を入れると (cos 90°, sin 90°) = (0, 1)。右向きの矢印が真上を向く。
Q2. 回転行列の「列」は何を表している?
正解! どの点も「x×(回った x の矢印)+ y×(回った y の矢印)+ z×(回った z の矢印)」へ移るので、回った3本の矢印さえ分かれば回転は決まる。それを列に並べたのが回転行列。
Q3. ロドリゲスの公式で、ベクトル v のうち「回転の軸に平行な部分」は、回すとどうなる?
正解! 軸の上にある部分は、軸のまわりに回しても動かない。円に沿って回るのは、軸に直角な部分 v − (k・v)k だけ。