14
15

More than 5 years have passed since last update.

pythonでクオータニオンを扱う(pyquaternion)

Last updated at Posted at 2018-09-03

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
14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15