クォータニオンを実装できてしまった話

タイトルの通りです。
Processingでクォータニオンを実装できてしまいました。任意軸回転できるようになったわけですね。

しかしまあ・・・なんでこんなものを実装したかったのかと言うと、話は以前制作したアトラクターの話に戻ります。

↑↑↑ これ

三次元常微分アトラクターってパーティクルの移動距離をベクトル(ℝ3)として、それをdt(わずかな時間)の分だけ取り出して計算するんですが、それってそもそもどういう風な情報が取り出せてるんでしょうか?

・・・という話をするとベクトルの定義について勉強することになります。
まあさておきベクトルとは「成分」と「角度(偏角)」、そして「距離(原点からの長さ)」の情報を含んだものです。
(x, y)の各成分が(1, 1)のベクトルなら角度は45°( = π/4)、距離は√2と言った感じです。

Vec := (x, y){θ, |V|}

各成分の情報Vec := (x, y)からは、角度θと距離|V| = abs(V)を計算できます。
逆に角度θを利用してv2 := (cosθ, sinθ)としたあと、v2に距離を掛け算することで元のVecが計算できます。

で。

それぞれの情報の成分量を見てみましょう。
2つ以上の成分が含まれているものをVector。1つの成分だけの物をScalarと書くことにします。
成分について。複素数だったら話が違うのですが、実数範囲内ではただ単なる数値でしかなくなってしまうので2次元未満のベクトルについてはベクトルとする意味があまりありません。なので成分はVectorです。

次に角度。角度は2次元ベクトルだったらScalarで間違いないですが、3次元ベクトルの場合は2成分のVectorとなることもあります。
球面座標系の場合など。ちなみに私は球面座標系は苦手です。

最後に距離ですが、これはどれほどの次元になったとしても、なんなら複素数の範囲まで含めたとしても絶対にScalarになります。
距離を計算する式が√x2 + y2という感じで「全成分を足して平方根にしてしまう」ためです。
というか長さが知りたいって言ってるのにx, yそれぞれで結果が違ったら全く意味がわからん。

まとめると・・・

  • 成分(Vector)
  • 角度(Scalar or Vector)
  • 距離(Scalar)

~そして本題へ~

というわけでここからが本題。
アトラクターに引き込まれるパーティクルの移動はベクトルです。その情報の中で成分と距離の2つを考えます。
3次元ベクトルなので成分はx, y, z、それと距離を合わせて(成分xyz, 距離d)とすると、(x, y, z, d)
計4つの成分で構成される「4次元ベクトル」になります。

ではここでクォータニオン(四元数)について非常に簡単に説明します。
クォータニオンは(x, y, z, w)の4つの成分で構成される4次元ベクトルです。
このうち、x, y, zは3成分合わせて3次元ベクトル。wは1成分のみの回転角です。

あれ?もしかしてキミらめっちゃ似てない?
並べてみるとこうなります。

(成分xyz, 距離d)(成分xyz, 回転角w)

もう似てるどころの話じゃありません。ほぼそのままです。そのまま持ってって使えるレベル。

なので置き換えたらどうなるんだろうなーと思いました。
しかし残念。Processingではデフォルトでクォータニオンはありません。ライブラリを使えば導入できそうですが、そうすると作品を公開した時に他人のProcessingにライブラリが無かったら作品を実行できません。
なので自分でプログラムしようと思いました。
結果は冒頭の通りです。

何となく、UnityでもHoudiniでも当然のように使われている技術に対してこれが何なのか理解できないまま使うのがとても気持ち悪いです。
HoudiniだとParticlesのアトリビュートでorientという物がありますが、「なるべく触らない方がいい」とsidefx公式ドキュメントには書いてあります。それならちゃんと仕組みを理解した上で「ああ、これは確かに制御できないな」と察して、以降触れないことを決定したい気持ちがとても強い。

そんな感じで軽率に挑戦して、お手軽にGoogleでドキュメントを検索して。なぜかC言語のサンプルコードと一緒に解説してあるPDFを発見してそれを活用して実装できたというわけです。

・・・一年前くらいからすごく不思議に思うんですけど、なんで他大学の講義ノートとかが普通にGoogleの検索でズラーっ出てくるんでしょう??一応資料の利用自体は私的範囲に限って使わせてもらってますので大丈夫だと思いますが・・・。

学術書とかに手を出すと本当に専門講師がいないとどうしようもない超絶クソムズ難解な内容に心が折れてしまうので講義ノートが見れるのは有難いんですけどね。AIで著作権がどうのこうのっていうよりも、Googleで講義ノートが検索できることの方が「これ本当に大丈夫なのか?」って気がします。