pythonでクオータニオン使いたい!って思ったらpyquaternion
なるものがあった.
でも全然日本語記事がねえ.
とりあえず,公式ドキュメントを読んで使い方を書いとくことにした.
クオータニオンについて詳しくは他サイトをどうぞ
適宜更新
インストール
install
# 普通にpipでインストール可能
pip install pyquaternion
使い方
環境
最初の説明で「クオータニオンに手を出すくらいならnumpy使ってるよね.当然.」みたいな前書きがあったので当然numpyは必須です.なければインストールしましょう.
import
# こいつでインポート
from pyquaternion import Quaternion
直感的に軸と回転を入れるだけでも,(w,x,y,z)でもどっちいれても使えます.便利
初期化
1 + 0i + 0j + 0k
を作ります.
default
q1 = Quaternion()
# コピー(クローンを作る)
q2 = Quaternion(q1)
要素から作成
w,x,y,z
から作成
from_elements
q1 = Quaternion(w,x,y,z)
# numpy.arrayからも可能
q2 = Quaternion(numpy.array([a,b,c,d]))
# タプル,リストからも可
演算
掛け算、割り算はそのまま使えます。
mutipli
qm = q1 * q2
qd = q1 / q2
ノルム(長さ)
norm
my_quaternion.norm
my_quaternion.magnitude
逆クオータニオン
inversion
inv_quaternion = my_quaternion.inverse
# 共役クオータニオン
conj_quaternion = my_quaternion.conjugate
正規化
normalisation
unit_quaternion = my_quaternion.normalised
unit_quaternion = my_quaternion.unit
回転クオータニオン
3次元ベクトルをクオータニオンで回転
rotation
rotated_tuple = my_quaternion.rotate((1, 0, 0)) # Returns a tuple
rotated_list = my_quaternion.rotate([1.0, 0.0, 0.0]) # Returns a list
rotated_array = my_quaternion.rotate(numpy.array([1.0, 0.0, 0.0])) # Returns a Numpy 3-array
rotated_quaternion = my_quaternion.rotate(Quaternion(vector=[1, 0, 0])) # Returns a Quaternion object
要素を取りだす
accessing_individual_elements
a = my_quaternion.elements
print("{} + {}i + {}j + {}k".format(a[0], a[1], a[2], a[3]))
#-0.6753741977725701 + 0.4624451782281068i + -0.059197245808339134j + 0.5714103921047806k