四元数雑記?

四元数とは (シゲンスウとは) [単語記事] - ニコニコ大百科
四元数を用いた三次元回転計算の幾何学的意味 - Qiita
四元数を作ろう - Qiita
EMANの物理学・物理数学・四元数(クォータニオン)の定義


基底の対称性

q=a+bi+cj+dk\ (a,b,c,d\in\mathcal{R})
i^2=j^2=k^2=-1
ij=k,jk=i,ki=j
ji=-k,kj=-i,ik=-j
j=k=0 のときには q複素数とみなせる。k=i=0 または i=j=0 のときも、それぞれ j,k虚数単位として複素数とみなせる。i,j,k は3すくみの対称性をもつ。


基底の再設定

a=0, b^2+c^2+d^2=1 のとき( i,j,k はこの条件を満たす)、

\quad q^2\\=(bi+cj+dk)^2\\=-(b^2+c^2+d^2)+bc(ij+ji)+cd(jk+kj)+db(ki+ik)\\=-1


i’=b_1i+c_1j+d_1k\ \ (b_1^2+c_1^2+d_1^2=1),\\j’=b_2i+c_2j+d_2k\ \ (b_2^2+c_2^2+d_2^2=1),\\b_1b_2+c_1c_2+d_1d_2=0\ \ (すなわち\ (b_1,c_1,d_1)\perp(b_2,c_2,d_2)\ )
とおく。

\quad i’j’\\=(b_1i+c_1j+d_1k)(b_2i+c_2j+d_2k)\\=-(b_1b_2+c_1c_2+d_1d_2)\quad(=0)\\\quad+(c_1d_2+d_1c_2)i\\\quad+(d_1b_2+b_1d_2)j\\\quad+(b_1c_2+c_1b_2)k

(c_1d_2+d_1c_2,d_1b_2+b_1d_2,b_1c_2+c_1b_2)=(b_1,c_1,d_1)\times(b_2,c_2,d_2) である。

k’=(c_1d_2+d_1c_2)i+(d_1b_2+b_1d_2)j+(b_1c_2+c_1b_2)k とおくと、
i’^2=j’^2=k’^2=-1
i’j’=k’,j’k’=i’,k’i’=j’
j’i’=-k’,k’j’=-i’,i’k’=-j’
を満たす。
このようにして、i軸、j軸、k軸の張る三次元空間で互いに直行する3つの単位ベクトルを、四元数の3つの基底として選び直すことができる(向きに注意する)。


積の幾何

i1=i,ii=-1,i(-1)=-i,i(-i)=1
これらの式は、i を掛けることが (1,i) 平面において \frac\pi2 の回転にあたることを示唆する。実際、複素数の積は絶対値の積と偏角の和にあたる。

ij=k,ik=-j,i(-j)=-k,i(-k)=j
これらの式は、i を掛けることが (j,k) 平面において \frac\pi2 の回転にあたることを示唆する。実際その通りである。
(\cos\theta+i\sin\theta)(cj+dk)=(c\cos\theta-d\sin\theta)j+(d\sin\theta+c\cos\theta)k
右から掛ければ回転方向は逆になる。

v=bi+cj+dk とおき、q=s+tv とする(vは先ほどの通り i として選び直せる)。q に対して、偏角スカラー)や指数関数は v虚数単位とみなして複素数のときと同じように定義される。
四元数 p を、(1,v) 平面に平行な成分 p_\parallel と垂直な成分 p_\perp に分解して、
p=p_\parallel+p_\perp とする。
qp=qp_\parallel+qp_\perp
つまり四元数同士の積は、掛ける数と 1 とが張る平面の平行成分と垂直成分をそれぞれその平面で回転させ、絶対値の積を取ったものとみなせる。
右から掛けるとはつまり積の順序を入れ替えることであり、垂直成分の回転方向を逆にした場合の結果と乗数・被乗数を入れ替えて考えた場合の結果が一致することになる。これはあまり直感的でない。



図は、四元数空間における pq (絶対値 1)の計算の様子を実軸正方向から見たものである。視線と実軸が重なっているため実軸は原点に縮退し、(1,i) 平面はi軸に縮退している。

四元数積 - GeoGebraBook

4D Blocks をやってください

PCのみです。画面は Mac ですが Java なので Windows でも何でもできます。Java をインストールしていない人はしておいてください。https://java.com/ja/download/



http://www.urticator.net/blocks/v6/にアクセスします。
英語が読める人は指示に従います。

読めなくても、とりあえずここf:id:dearsip:20170428225343p:plainをクリックします。ダウンロードされたzipファイルを解凍します。


"out" フォルダ内f:id:dearsip:20170428230327p:plain
の "Maze.class" f:id:dearsip:20170428230346p:plain
を見つけます。たぶんダブルクリックすれば起動します。(エイリアス(ショートカット)をデスクトップに置いておくと良いでしょう)

f:id:dearsip:20170428230649p:plain
こんなメッセージに阻まれたら、「システム環境設定」のf:id:dearsip:20170428230810p:plain
ここから
f:id:dearsip:20170428230904p:plain
ここを押してf:id:dearsip:20170428231058p:plain
起動します。


f:id:dearsip:20170428231320p:plain
何か表示されました。初期設定ができるようですが、よくわからないと思うのでとりあえず先に進みます。
f:id:dearsip:20170428231746p:plain
始まりました。ここは4次元空間に自動生成された迷路のスタート地点。この世界を存分に歩き回って4次元の方向感覚を身につけましょう。
と言いたいところですが、いきなりこれを見ても何がなんだかわからないと思うので、まずは3次元で練習することにしましょう。
ちなみに、http://www.urticator.net/maze/maze.htmlには、4次元空間の見方が実に丁寧に(英語で)説明されています。画像が豊富なので読めなくても分かりますが、また気が向いたら雑に訳します。
f:id:dearsip:20170428232558p:plain
ここを押して、
f:id:dearsip:20170428232710p:plain
ここを押します。

f:id:dearsip:20170428233015p:plain
こちらは誰もがよく知る3次元空間です。壁しか見えませんが、少し動けばすぐ分かるでしょう。

操作方法を確認します。「キーボード」でググって一番上に出てきた画像素材なので Windows キーがあります。
f:id:dearsip:20170428233610j:plain
左手で使うのは中指だけ、前後移動を担当します。
上下左右の方向転換は右手。3本指で操作します。

動きましょう。
f:id:dearsip:20170428234132g:plain
こういうゲームの経験がない人には難しく感じるかもしれません。慣れましょう。


慣れましたか?
では、4次元に戻りましょう。
f:id:dearsip:20170428234535p:plain
f:id:dearsip:20170428234622p:plain
f:id:dearsip:20170428234837p:plain
戻って来ました。

いくつか確認があります。
まず、ほとんど同じ画面が横に2つ並んでいるのが分かるかと思いますが、これはいわゆる立体視です。
交差法です。
知らない人は、ググって練習しましょう。

白い立方体の枠の中に、カラフルな線が入っている様子がわかるでしょうか。
この大きな立方体が言わば画面の枠です。4次元空間を写すカメラの映像なので立体に写してあるわけですが、まあ難しいことは考えなくて大丈夫です。大事なのは慣れです。


4次元なので、もう一つ向きが増えます。
f:id:dearsip:20170429000424j:plain
サイトに習って ("in and out direction") 、「内」「外」と呼ぶことにします。
立方体画面の「手前側」と「向こう側」です。ちなみに、3次元空間の画面と同じように、「前」は「画面」の「中央」に、「後ろ」は後ろなので当然見えないところにあります。ややこしい。


あとはとにかく動かせばいいのですが、既に画面の煩雑さにうんざりしていると思います。

そこで、個人的におすすめの設定があります。情報が減って逆に分かりにくくなるかもしれないので選択は自由ですが、以後の画面はこの設定で進めます。
設定は簡単で、8キーと0キーを押すだけです。
f:id:dearsip:20170429001330p:plain
線の数が減り、色も無くなりました。

さて、行きましょう。
f:id:dearsip:20170429003039g:plain
偶然にもかなり早くゴールに辿り着くことができました。普段はここまで早いことはほとんど無く、延々と迷路を彷徨うことになります。

というか何が起こっているのかさっぱり分からないと思います。当然です。そもそも3次元の迷路でも方向感覚が無くなるのはよくあることだと言うのに、4次元迷路に挑戦しようなんて無茶な話です。
なので、まずはこの記事の先頭に戻り、今度はちゃんとただ読むだけでなく指示通りゲームを始めて、とにかく自分で動いてみてください。
数週間ぐらいやってるうちに、どんなのが壁だとか、何が見えたら進めるとか、どこらへんが3次元のときと同じだとかが分かってくるかと思います。たぶん。そしたら4次元空間が面白くなってくるかもしれません。たぶん。

よろしくお願いします。


最後に、ここ http://www.urticator.net/essay/3/373.html にある通り、John McIntosh 氏によるこのサイトのコンテンツは全て、コードの解析、改変、再配布、その他「何でも (whatever you like)」可能とされています。
今僕はこのゲームに重力とかジャンプとかを導入してアクションゲーム化したいと思っているんですが、Java というかプログラミングを一から勉強しなくてはならなくて果てしない道のりになりそうです。もし興味のある人がいたら是非、やってください。

ひとまず僕からは以上です。

雑まとめ:iのi乗が見えるまで

ei

指数関数

e^{ax}

は、導関数が元の関数の a 倍である。

(e^{ax})'=ae^{ax}


なので、

e^{ix}

は、導関数が元の関数の i 倍である。

(e^{ix})'=ie^{ix}


i 倍は複素平面上での 90 度回転に当たる。

f:id:dearsip:20170130142132p:plain

よって円を描く。

f:id:dearsip:20170130143011g:plain

絶対値は常に 1(半径)なので、x は描いた弧の長さすなわち回転角に対応する。

e^i は、絶対値 1偏角 1 の点である。

f:id:dearsip:20170111165300p:plain

下図は ze^z の対応である。点をドラッグして動かせる。
右図は、左図を筒状に丸めて上から覗き込んだような関係にある。
「左右に動かして回転」という直感的操作と合致させるため、z複素平面90 度回転させてある。

ii

a^b

e^{b\log a}

とされ、指数の積で計算できる。


積は三角形で表せる。

f:id:dearsip:20170109164034p:plain

i は絶対値 1\ (=e^0)偏角 \frac\pi2+2\pi n\ \ (n\in\mathbb Z) であるから、\log iei にする指数)は

\log i=\displaystyle\frac\pi2i+2\pi ni\ \ (n\in\mathbb Z)

となる。主値(代表)として

\mathrm{Log}\  i=\displaystyle\frac\pi2i

を取っておく。

f:id:dearsip:20170131130222p:plain

これと、指数 i

f:id:dearsip:20170131171324p:plain

との積をとる。i^i の主値は、

\displaystyle{e^{i\ \mathrm{Log}\  i}=e^{i\cdot\frac\pi2i}=e^{-\frac\pi2}}

f:id:dearsip:20170131182726p:plain

世界一分かりやすいネイピア数の導入

今や、「巨大ロボット」は当たり前の存在となっていた。


f:id:dearsip:20170113103713p:plain


ロボット研究者たちの興味はすでに別のところにあった。

それは、「巨大化」である。


f:id:dearsip:20170113110949p:plain


普段はコンパクトに保管できて、いざというときは巨大化して怪獣と闘う。


f:id:dearsip:20170113111524p:plain


そんなロボットを開発するため、ロボット研究者たちは、ロボットをより速く、より大きく巨大化させるための研究に夢中になっていた。


f:id:dearsip:20170113113456p:plain


そんなある日、タロウ君は、ハカセが新しいロボットを開発したと聞いて、ハカセの研究所へとやって来た。


f:id:dearsip:20170113114249p:plain

「こんにちは、ハカセ!
ハカセの作った新しいロボットを見せてください!」


f:id:dearsip:20170113114315p:plain

「よく来たな、タロウ君。
では、さっそく見せてあげよう。
これが、私の作った新しいロボットじゃ!」


f:id:dearsip:20170113114928p:plain


f:id:dearsip:20170113114249p:plain

「見た目は普通のロボットですね。
ハカセ、このロボットもやはり巨大化するのですか?」


f:id:dearsip:20170113114315p:plain


「もちろんじゃ、タロウ君。
ロボットの背中を見てみたまえ。」


f:id:dearsip:20170113115112p:plain


f:id:dearsip:20170113114315p:plain

「この『巨大化ボタン』を押すことで、ロボットは
一定のスピードで巨大化
するのじゃ。」


f:id:dearsip:20170113114249p:plain

「一定のスピード?
ハカセ、それはどれくらいのスピードなのですか?」


f:id:dearsip:20170113114315p:plain

「ふふふ、聞いておどろくがいい。
なんと、
1 秒で 2 倍になる
スピードなのじゃ!」


f:id:dearsip:20170113114249p:plain

「……え?
1 秒で 2 倍、ですか?」


f:id:dearsip:20170113114315p:plain

「そうじゃ」


f:id:dearsip:20170113114249p:plain

「あの……ハカセ。
1 秒で 2 倍になる
一定のスピード

で巨大化する……ってことは、
2 秒後には 3 倍、
3 秒後には 4 倍、
……
という風に巨大化していく、ってことですよね?」


f:id:dearsip:20170113114315p:plain

「うむ、そうなるな」


f:id:dearsip:20170113114249p:plain

「でもハカセ、それだと
10 倍の大きさになるのに 9 秒もかかる
ことになりますよ?
最近のロボットは 10 倍の大きさになるのに 3 秒もかかりませんから、このロボット、実は大したことないんじゃないですか?」


f:id:dearsip:20170113114315p:plain

「まあまあ、タロウ君、おどろくのはここからじゃ。
実はな、この『巨大化ボタン』は何度でも押すことができて、押すたびに巨大化のスピードが変わるのじゃ」


f:id:dearsip:20170113114249p:plain

「巨大化のスピードが変わる?
いったい、どう変わるんですか?」


f:id:dearsip:20170113114315p:plain

「よく聞くんじゃよ。実はな……
1 秒で
ボタンを押したときの大きさの
2 倍になる
スピード

に変わるんじゃ」


f:id:dearsip:20170113114249p:plain

1 秒で、
『ボタンを押したときの大きさ』の、
2 倍?」


f:id:dearsip:20170113114315p:plain

「そうじゃ。
実際にやってみた方が分かりやすいじゃろう」


f:id:dearsip:20170114110027p:plain


f:id:dearsip:20170113114315p:plain

「ロボットの最初の大きさは 1 メートルじゃ。
まずは、最初の一回だけボタンを押してみよう」


f:id:dearsip:20170114110510g:plain


f:id:dearsip:20170113114315p:plain

「赤いマークが、ボタンを押したタイミングじゃ。
タロウ君の言う通り、このときは
1 秒で 2 倍の 2 メートル、
2 秒で 3 倍の 3 メートル、
3 秒で 4 倍の 4 メートル、
……
というように巨大化していくな」


f:id:dearsip:20170113114249p:plain

「つまり、秒速 1 メートルのスピードですね。
これでは遅すぎます」


f:id:dearsip:20170113114315p:plain

「そこで、今度は、
1 秒ごとにボタンを押し直してみる
のじゃ。まずは一回押すぞい」


f:id:dearsip:20170114111123g:plain


f:id:dearsip:20170113114315p:plain

「ここじゃ!
ここでもう一度ボタンを押すのじゃ」


f:id:dearsip:20170114114139p:plain


f:id:dearsip:20170113114249p:plain

「今、ロボットの大きさは 2 メートル。
ここでボタンを押したということは、巨大化のスピードは
1 秒で
ボタンを押したときの大きさ、つまり 2 メートルの
2 倍になる
スピード

……すなわち、
1 秒で
2 メートルから
4 メートルになる
スピード

に変わるんですね!」


f:id:dearsip:20170113114315p:plain

「そうじゃ。つまり、秒速 2 メートルのスピードに変わるんじゃな」


f:id:dearsip:20170113114249p:plain

「ここからさらに 1 秒待てば、ロボットの大きさは 4 メートルになります」


f:id:dearsip:20170114121625g:plain


f:id:dearsip:20170113114249p:plain

「最初にボタンを押してから 2 秒で、4 メートルまで大きくなりました。ここでまたボタンを押すんでしたよね、ハカセ?」


f:id:dearsip:20170113114315p:plain

「うむ、そうしよう。
スピードはどう変わるかな?」


f:id:dearsip:20170114121929p:plain


f:id:dearsip:20170113114249p:plain

「今度は、
1 秒で
ボタンを押したときの大きさ、つまり 4 メートルの
2 倍になる
スピード

……すなわち、
1 秒で
4 メートルから
8 メートルになる
スピード

に変わります!
さらに速くなりましたね!」


f:id:dearsip:20170113114315p:plain

「うむ。
今度は秒速 4 メートルじゃな」


f:id:dearsip:20170114122512g:plain


f:id:dearsip:20170113114249p:plain

「最初にボタンを押してから 3 秒で、8 メートルまで大きくなりました。
……あれ、結局 3 秒では 10 メートルまで届きませんでしたね。やっぱり大したことないんじゃないですか?」


f:id:dearsip:20170113114315p:plain

「いやいや、そんなことはないぞ、タロウ君。
実は、この方法を続けると、10 秒後には 1024 メートルまで大きくなるのじゃ」


f:id:dearsip:20170113114249p:plain

「え、10 秒で 1024 メートル!?
それはすごいですね!」


f:id:dearsip:20170113114315p:plain

「ふふふ、そうじゃろうそうじゃろう」


f:id:dearsip:20170113114249p:plain

「でも、いざというときは 10 秒も待っている時間はないですよね。
何かもうちょっと速くする方法は……
あ!」


f:id:dearsip:20170113114315p:plain

「む、どうしたタロウ君?」


f:id:dearsip:20170113114249p:plain

「ハカセ、もっとスピードを速くする方法を思いつきました!
ボタンを押す間隔をもっと短く
すればいいんですよ!」


f:id:dearsip:20170113114315p:plain

「なるほど、それはいい考えじゃ!
ボタンを押せばそのたびにスピードが上がることには違いないのじゃからな。
さっそくやってみよう!」


f:id:dearsip:20170113114249p:plain

「さっきは 1 秒ごとの間隔だったので、今度は 0.5 秒ごとの間隔にしましょう。
ボタンを押しますね」


f:id:dearsip:20170114130313g:plain


f:id:dearsip:20170113114249p:plain

0.5 秒経ちました!
ここでもう一度ボタンを押します」


f:id:dearsip:20170114130415p:plain

f:id:dearsip:20170113114315p:plain

「今の大きさは 1.5 メートル……ということは、秒速 1.5 メートルのスピードに変わるはずじゃな」


f:id:dearsip:20170113114249p:plain

「あれ?
ハカセ、もしかして、ボタンを押したときのスピードって、
そのときの大きさに「秒速」をつけたスピードになる
んですか?」


f:id:dearsip:20170113114315p:plain

「よく気づいたな、その通りじゃ。
これまでは丁寧に計算していたが、これからはこのルールを使って良いとしよう」


f:id:dearsip:20170113114249p:plain

「はい、わかりました。
では、さらに 0.5 秒待ちます」


f:id:dearsip:20170114131939g:plain


f:id:dearsip:20170113114249p:plain

「最初にボタンを押してから 1 秒で、2.25 メートルになりました!
やっぱり速くなってますね!」


f:id:dearsip:20170113114315p:plain

「うむ。
このまま 3 秒経つまで続けてみよう」


f:id:dearsip:20170113114249p:plain

1 秒後にボタンを押せば、スピードは秒速 2.25 メートルになります。

1.5 秒後の大きさは 3.375 メートルです。
1.5 秒後にボタンを押せば、スピードは秒速 3.375 メートルになります。

2 秒後の大きさは 5.0625 メートルです。
2 秒後にボタンを押せば、スピードは秒速 5.0625 メートルになります。

2.5 秒後の大きさは 7.59375 メートルです。
2.5 秒後にボタンを押せば、スピードは秒速 7.59375 メートルになります。

3 秒後の大きさは……」


f:id:dearsip:20170114131745g:plain


f:id:dearsip:20170113114249p:plain

「最初にボタンを押してから 3 秒で、 11.390625 メートルになりました!
やりました!10 メートルを超えましたよ!」


f:id:dearsip:20170113114315p:plain

「うむ、やったな!
これでこのロボットのすごさが分かっただろう、タロウ君」


f:id:dearsip:20170113114249p:plain

「はい!
それに、もっともっとボタンを押す間隔を短くすれば、さらにスピードは上がるはず……あ!
ハカセ、このボタンを押しっぱなしにしてはどうでしょう?」


f:id:dearsip:20170113114315p:plain

「む、押しっぱなし、とな?」


f:id:dearsip:20170113114249p:plain

「はい。
素早くボタンを押すのでは縮められる間隔に限界がありますが、押しっぱなしにしてしまえば
間隔 0 にしたも同然
です!」


f:id:dearsip:20170113114315p:plain

「なるほど。
そうすれば、
スピードは大きさに合わせて絶えず増加していく
ことになるな。
面白そうじゃ」


f:id:dearsip:20170113114249p:plain

「これで最高のスピードが出せるはずです。
やってみましょう!」


f:id:dearsip:20170114135058g:plain


f:id:dearsip:20170113114249p:plain

「おお、かなりの勢いで大きくなっていますね!
3 秒の時点で 20 メートル以上まで行っていますよ!
でも、正確な大きさはよく分かりませんね。
これ、数字にするとどれくらいの速さなんでしょう?」


f:id:dearsip:20170113114315p:plain

「うむ、それは気になるな。
試しに、1 秒後の大きさを正確に測ってみよう」


f:id:dearsip:20170114140513p:plain



10 分後……)



f:id:dearsip:20170113114249p:plain

「これは……どういうことなんでしょう?
いくら細かく測っても正確な大きさが分かりませんよ……」


f:id:dearsip:20170113114315p:plain

「ふむ、これは……。
もしかすると、正確な大きさを書き表せない特殊な数なのかもしれんな。
どれ、名前をつけるとしようか」


f:id:dearsip:20170113114249p:plain

「え、名前を?
そんな軽い気持ちでつけていいものなんですか?」


f:id:dearsip:20170113114315p:plain

「もちろんじゃ。
新しいものに出会ったらとりあえず名前をつける。
これは科学の基本じゃよ」


f:id:dearsip:20170113114249p:plain

「そういうものなんですか」


f:id:dearsip:20170113114315p:plain

「さて、どんな名前にしようかのう……」




「待て!」


f:id:dearsip:20170113114249p:plain

「え?
誰ですか?」


f:id:dearsip:20170114135500p:plain

「……」


f:id:dearsip:20170113114315p:plain

「むむ、どこから入って来おった?」


f:id:dearsip:20170114135500p:plain

「……ハカセ、その数に名前をつけるのはやめてもらおう」


f:id:dearsip:20170113114315p:plain

「なんじゃと?」


f:id:dearsip:20170114135500p:plain

「その数には、すでに別の人間によって名前がつけられているのだ」


f:id:dearsip:20170113114249p:plain

「え、そうなんですか!
その名前、なんて言うんですか?」


f:id:dearsip:20170114135500p:plain

「教えてやろう、それは……」



〜後半へつづく〜