Pyquaternion et numpy-quaternion semblent être les deux meilleures bibliothèques au monde qui gèrent les quaternions en Python, mais probablement parce que la personne qui a créé la page de référence pour pyquaternion était la première au Japon, le calcul du quaternion en Python déborde dans les rues. C'est juste pyquaternion (y en a-t-il seulement?).
Cependant, numpy-quaternion semble avoir un coût de calcul inférieur. Référence: https://www.theoj.org/joss-papers/joss.00787/10.21105.joss.00787.pdf
De plus, en comparant le nombre d'étoiles sur github, il y a plus de numpy-quaternion (au 13 décembre 2019, numpy-quaternion est de 276 et pyquaternion de 138).
Je pense que l'affinité avec numpy est également meilleure que pyquaternion en raison de la facilité de gestion de la conversion par lots. Souhaitez-vous l'utiliser?
Dépôt github: https://github.com/moble/quaternion Documentation: https://quaternion.readthedocs.io/en/latest/ PyPI: https://pypi.org/project/numpy-quaternion/
pip install numpy-quaternion
Vous pouvez facilement entrer avec.
Aussi,
import quaternion
Vous pouvez importer la bibliothèque avec.
quat = (w, x, y, z) = \left(\underbrace{\cos\frac{\theta}{2}}_{Partie réelle},\ \underbrace{\lambda_x\sin\frac{\theta}{2},\ \lambda_y\sin\frac{\theta}{2},\ \lambda_z\sin\frac{\theta}{2}}_{Nombre imaginaire(vecteur)département}\right)
Moins que,
import numpy as np
import quaternion
ça ira.
quat = np.quaternion(w, x, y, z)
quaternion est ajouté à l'attribut de numpy. Par exemple
print(np.quaternion(1,0,0,0))
# -> quaternion(1, 0, 0, 0)
type(np.quaternion(1,0,0,0))
# -> quaternion.quaternion
Il devient.
q1 = np.quaternion(1, 2, 3, 4)
q2 = np.quaternion(4, 5, 6, 7)
print(q1*q2)
# -> quaternion(-52, 10, 24, 20)
La multiplication est définie. Pour le moment, d'autres opérations à quatre règles sont également définies, mais utilisez-vous parfois des sommes ... Ce n'est pas défini dans Eigen of C ++.
Seule une partie sera reprise. Il ne couvre pas les choses liées aux fonctions sphériques ou à l'interpolation linéaire. Référence: https://quaternion.readthedocs.io/en/latest/_autosummary/quaternion.html
Variables de membre | une fonction |
---|---|
w | Éléments de la partie réelle |
x | Le premier élément de la partie imaginaire |
y | Deuxième élément de la partie imaginaire |
z | Troisième élément de la partie imaginaire |
components | (w,x,y,z)Est numpy.Renvoyé en tant que tableau |
imag | Partie imaginaire(x,y,z)Est numpy.Renvoyé en tant que tableau |
vec | Partie imaginaire(x,y,z)Est numpy.Renvoyé en tant que tableau |
real | Partie réelle(w)Est retourné |
Fonction membre | une fonction |
---|---|
abs() | Valeur absolue du quaternion (distance euclidienne) |
absolute() | Valeur absolue du quaternion |
angle() | angle de rotation |
conj() | Renvoie le conjugué complexe du quaternion |
conjugate() | Renvoie le conjugué complexe du quaternion |
equal(quat) | Est-il égal au quaternion du contenu de l'argument? |
exp | Renvoie exponentiel ( |
inverse() | Renvoie le quaternion inverse |
isfinite() | Tous les éléments sont-ils finis |
ininf() | Y a-t-il même un élément inf? |
innan() | Y a-t-il même un élément nan? |
log() | Renvoie le journal des quarternions |
nonzero() | Tous les éléments sont-ils 0 |
norm() | Norme Quarternion Cayley (route au carré absolu) |
normalized() | Renvoie un quaternion normalisé |
notequal(quat) | N'est-il pas égal au quaternion du contenu de l'argument? |
sqrt() | Place Quarternion-root( |
square() | Quarternion au carré |
Le fait est que les méthodes dans ce domaine ne sont pas unidimensionnelles, mais peuvent également être utilisées pour des tableaux multidimensionnels. Si la taille de la dernière dimension nécessite un quaternion, elle doit être 4, si elle est de 3 dimensions, elle doit être de 3 dimensions, si elle est de 3x3, les 2 dernières dimensions doivent être de 3x3.
Fonction membre | une fonction |
---|---|
quaternion.as_quat_array(a) | numpy.Convertit un tableau en quaternion. La taille de la dernière dimension d'un doit être 4 |
quaternion.as_float_array(a) | numpy.numpy quaternion.Convertir en tableau. La dimension de la sortie est une plus grande que celle de l'entrée. |
quaternion.from_float_array(a) | as_quat_Identique au tableau |
quaternion.as_rotation_matrix(q) | numpy.Convertissez quaternion en matrice de rotation 3x3. |
quaternion.from_rotation_matrix(rot, nonorthogonal=True) | Numpy une matrice de rotation 3x3.Convertir en quaternion |
quaternion.as_rotation_vector(q) | Trouvez l'axe de rotation à partir du quart. L'amplitude de la dernière dimension de la sortie est de 3. |
quaternion.from_rotation_vector(rot) | Conversion de l'axe de rotation de taille 3 en quaternion. |
quaternion.as_euler_angles(q) | Conversion de l'angle quaternion en angle huileur Reportez-vous au document pour l'ordre de conversion des angles d'Euler. |
quaternion.from_euler_angles(alpha_beta_gamma, beta=None, gamma=None) | Conversion de l'angle d'Euler en Quarternion. Reportez-vous au document pour l'ordre de conversion des angles de graisseur. |
quaternion.rotate_vectors(R, v, axis=-1) | R est un quaternion et v est un vecteur. Faites pivoter le vecteur en fonction du quaternion. |
quaternion.allclose(a, b, rtol=8.881784197001252e-16, atol=0.0, equal_nan=False, verbose=False) | Comparez deux quaternions |
quaternion.integrate_angular_velocity(Omega, t0, t1, R0=None, tolerance=1e-12) | Tourner selon la vitesse angulaire |
https://quaternion.readthedocs.io/en/latest/index.html
À propos, l'auteur de cette bibliothèque semble avoir un grand angle de graissage. Si vous voyez quelqu'un l'utiliser, arrêtez! Dites-le et éloignez-vous de l'endroit et dérangez votre maman! Est écrit
Où est la demande de quaternions en Python? Unity est C #, et je parle d'utiliser les fonctions de Unity en premier lieu, et Python est trop lent pour les robots, ce qui est hors de question ...
Recommended Posts