JuliaTokai #10 (2021/05/15)
tags: JuliaTokai
prezentation
おしながき
- 自己紹介
- 3次元の回転って?
- Rotations.jlの紹介
- 面白い結果(a) \(\operatorname{SO}(3)\)の可視化
- 面白い結果(b) Thomson問題の拡張
- まとめ
過去の関連発表
\(\operatorname{SO}(3)\)と\(\operatorname{SU}(2)\)の対応関係について話しました
Rotations.jlとの関わり
3次元回転をJuliaで扱うためのパッケージ
- 1ヶ月前(2021/04/08)からcontribution開始
- PR 8つ (merged 3つ)
- issue 7つ
- 3次元回転を完全に理解したぞ!
3次元の回転って?
- そもそも回転とは
- \(\operatorname{SO}(3)\)の性質 ①-⑥
そもそも回転とは
- 原点の位置を変えない合同変換
- (普通は)Eudlid空間での合同変換
- ただし鏡像は除く
- 線形代数の言葉で言えば…
- 直交行列による変換 (\(R^{-1}=R^{\top}\)となる行列)
- ただし行列式は1
- 一般には\(n\)次の回転行列まで考えれる
- \(\operatorname{SO}(n)\)と書く
- Rotations.jlでは(基本的に)3次のみ扱う
\(\operatorname{SO}(3)\)の性質① 元の可視化
\(\color{red}{x},\color{green}{y},\color{blue}{z}\)軸の正規直交基底の"姿勢"が\(\operatorname{SO}(3)\)の元

\(\operatorname{SO}(3)\)の性質② 空間の次元
- 与えられた姿勢への到達に、3回の座標軸回転が必要
- Euler角と呼ばれる (回転順序によって12種類存在)
- \(\color{blue}{z}\text{-}\color{red}{x}\text{-}\color{blue}{z}, \color{red}{x}\text{-}\color{green}{y}\text{-}\color{red}{x}, \color{green}{y}\text{-}\color{blue}{z}\text{-}\color{green}{y}, \color{blue}{z}\text{-}\color{green}{y}\text{-}\color{blue}{z}, \color{red}{x}\text{-}\color{blue}{z}\text{-}\color{red}{x}, \color{green}{y}\text{-}\color{red}{x}\text{-}\color{green}{y}\) 狭義Euler角
- \(\color{red}{x}\text{-}\color{green}{y}\text{-}\color{blue}{z}, \color{green}{y}\text{-}\color{blue}{z}\text{-}\color{red}{x}, \color{blue}{z}\text{-}\color{red}{x}\text{-}\color{green}{y}, \color{red}{x}\text{-}\color{blue}{z}\text{-}\color{green}{y}, \color{blue}{z}\text{-}\color{green}{y}\text{-}\color{red}{x}, \color{green}{y}\text{-}\color{red}{x}\text{-}\color{blue}{z}\) Tait–Bryan角
- つまり\(\operatorname{SO}(3)\)は3次元の空間! \(\dim(\operatorname{SO}(3))=3\)
- より一般に\(\dim(\operatorname{SO}(n))=n(n-1)/2\)

\(\color{red}{x}\text{-}\color{green}{y}\text{-}\color{blue}{z}回転 / \color{red}{x}\text{-}\color{green}{y}\text{-}\color{red}{x}\)回転
\(\operatorname{SO}(3)\)の性質④ 固有値と固有ベクトル
- \(R\in \operatorname{SO}(3)\)の固有値は\(\{1,e^{i\theta},e^{-i\theta}\}\)で表示可能
- 固有値\(1\)に対応する固有ベクトルが回転軸
- \(\theta\)が回転角
- 任意の回転は「軸回りの回転」として表示可能!

\(\operatorname{SO}(3)\)の性質⑤ 準同型な空間など
この辺りから数学的に込み入ってきますが…
- \(\operatorname{SO}(3)\)と\(\operatorname{SU}(2)\)は\(1:2\)に対応(準同型)
- \(\operatorname{SU}(2)\)は\(\det\)が1のユニタリ行列全体
- (詳細は以前の発表スライド参照)
- \(\operatorname{SU}(2)\)は「単位長さ四元数全体」と対応(同型)
- つまり4つの実数で3次元の回転を表現可能
- パラメータ減ってハッピー!(9→4)
- 「単位長さ四元数」は3次元球面\(S^3\)と対応(同相)
- \(S^3\subset\mathbb{R}^4\)なので普通の球面ではない
- 立体射影で\(S^3\leftrightarrow\mathbb{R}^3\cup\{\infty\}\)の対応(同相)
\(\operatorname{SO}(3)\)の性質⑥ まとめ
- \(\operatorname{SO}(3)\)は3次元Lie群!
- 3次行列として表示可能
- 良い感じのパラメータ(座標)が欲しい!
- 行列表示 / Euler角 / 軸回り回転 / 四元数 / \(\mathbb{R}^3\cup\{\infty\}\)
Rotations.jlの紹介
- Juliaで3次元回転を扱うためのパッケージ比較
- Rotations.jlで定義される型
- 使い方の例
Rotations.jlで定義されている型
- 行列表示
- Euler角
RotX
, RotY
, RotZ
RotXY
, RotYX
, RotZY
, RotYZ
, RotXZ
, RotZX
RotXYZ
, RotXYX
, (他10種)
- 軸回り回転
- 四元数
- \(S^3\)の立体射影
MRP
(Modified Rodrigues Parameters)
- \(S^3\)の原点からの射影
<: Rotation <: StaticMatrix <: AbstractMatrix
これらの他にも2次元回転の型もある
使い方の例
| using Rotations |
| |
| R_uq = rand(UnitQuaternion{Float64}) |
| |
| Matrix(R_uq) |
| |
| R_mrp = MRP(R_uq) |
| |
| R_xyz = RotXYZ(R_uq) |
このスライドのgifもRotations.jlで計算してます
(レンダリングはPOV-Ray)
面白い結果(a) \(\operatorname{SO}(3)\)の可視化
MRP
を使えば頑張れば\(\operatorname{SO}(3)\)を3次元球として描ける!
- ① 可視化の概要
- ② 座標軸まわりの回転
- ③ 非可換性の可視化
- ④ \(xy\)回転曲面の可視化
- ⑤ ジンバルロック
- ⑥ 有限部分群
\(\operatorname{SO}(3)\)の可視化①
MRP
で可視化する!

数学的に込み入ったことは抜きにして…
3次元球内の一点が、一つの姿勢(\(\operatorname{SO}(3)\)の元)を表す!
\(\operatorname{SO}(3)\)の可視化②-x
\(x\)軸回転

原点が単位行列
\(\operatorname{SO}(3)\)の可視化②-y
\(y\)軸回転

球面上の点がちょうど「180°回転」に相当する
\(\operatorname{SO}(3)\)の可視化②-z
\(z\)軸回転

- 一般に左図での「球面内の点と原点を結ぶ直線」は右図での「回転軸」に一致する
- 逆元は原点対称の点
\(\operatorname{SO}(3)\)の可視化③
\(\operatorname{SO}(3)\)の非可換性:\(\color{magenta}{R_x(t)R_y(t)}\)と\(\color{cyan}{R_y(t)R_x(t)}\)の比較

MRP(左)の方が基底の図示(右)よりも把握しやすい
\(\operatorname{SO}(3)\)の可視化④
\(\{R_x(s)R_y(t) \mid s,t\in\mathbb{R}\}\)は群を成さないが…
曲面としては描画できる

\(\operatorname{SO}(3)\)の可視化⑤
ジンバルロック(RotXYX
)

\(x\)軸上でめっちゃ密 😷 → Jacobianがゼロ
→ Euler角は\(\operatorname{SO}(3)\)の全体座標に不適格
\(\operatorname{SO}(3)\)の可視化⑥-4/4
\(\operatorname{SO}(3)\)の有限部分群と言えば…正多面体群!
- 正4面体群の位数は12
- \(\operatorname{SU}(2)\)で考えれば24個←正24胞体の頂点に一致!

\(\operatorname{SO}(3)\)の可視化⑥-6/8
- 正6面体群(=正8面体群)の位数は24
- \(\operatorname{SU}(2)\)で考えれば48個←正24胞体の頂点と胞中心に一致!

\(\operatorname{SO}(3)\)の可視化⑥-12/20
- 正12面体群(=正20面体群)の位数は60
- \(\operatorname{SU}(2)\)で考えれば120個←正600胞体の頂点に一致!

面白い結果(b) Thomson問題の拡張
- Thomson問題とは
- \(\operatorname{SO}(3)\)への拡張
- 計算結果
Thomson問題とは① 概要
トムソン問題(トムソンもんだい、英: Thomson problem) は、静電エネルギーが最小になるよう単位球面上に N 個の電子を配置する問題である(電子間力はクーロンの法則に従うものとする)。
Wikipediaより
\(\operatorname{SO}(3)\)への拡張
- そもそも\(\operatorname{SO}(3)\)にどうやって距離いれるの?
- 2点間を結ぶ回転行列の回転角にしよう!
- Lie代数\(\mathfrak{so}(3)\)に内積(\(\operatorname{SO}(3)\)にRiemann計量)を入れて「最短曲線の長さ」を距離とすることと同じ
- じゃあエネルギーは?
- Thomson問題に倣って(1/距離)を2点間のエネルギーにしよう!
計算結果
- 12,24,60点で正多面体群が出てくると期待されるが…
- 正多面体群になるのは24,60点のみだった!
(数値的に実験しただけで厳密に示した訳ではないです)
- スライドが間に合わなかったのでデモします…
感想
- Rotations.jl便利!
- いろんなパラメータ変換とか有り難い
- 可視化にも便利
- コンストラクタのベストプラクティスが分からん…
今後の予定
- Rotations.jlのバグ修正
- もう少し真面目にThomson問題を解く
- 微分方程式系として記述できそう
- ちゃんと可視化もやる
JuliaTokai #10 (2021/05/15) tags: JuliaTokai prezentation
{"metaMigratedAt":"2023-06-15T23:56:44.600Z","metaMigratedFrom":"YAML","title":"JuliaTokai #10 (2021/05/15)","breaks":true,"lang":"ja","dir":"ltr","robots":"noindex, nofollow","slideOptions":"{\"theme\":\"white\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"41421433-16a1-4a57-ac11-6f7b7becb765\",\"add\":18577,\"del\":5826}]","description":"堀川 由人, ほりたみゅ, @Hyrodium"}