Pyquaternion und Numpy-Quaternion scheinen die beiden besten Bibliotheken der Welt zu sein, die Quaternionen in Python verarbeiten. Wahrscheinlich ist die Quaternionsberechnung in Python jedoch überfüllt, da die Person, die die Referenzseite für Pyquaternion erstellt hat, die erste in Japan war Es ist nur Pyquaternion (gibt es nur?).
Numpy-Quaternion scheint jedoch geringere Berechnungskosten zu haben. Referenz: https://www.theoj.org/joss-papers/joss.00787/10.21105.joss.00787.pdf
Vergleicht man die Anzahl der Sterne auf Github, so gibt es auch mehr Numpy-Quaternion (ab dem 13. Dezember 2019 beträgt die Numpy-Quaternion 276 und die Pyquaternion 138).
Ich bin der Meinung, dass die Affinität zu Numpy aufgrund der einfachen Handhabung der Chargenkonvertierung auch besser ist als die von Pyquaternion. Möchten Sie es verwenden?
Github-Repository: https://github.com/moble/quaternion Dokumentation: https://quaternion.readthedocs.io/en/latest/ PyPI: https://pypi.org/project/numpy-quaternion/
pip install numpy-quaternion
Sie können leicht mit eingeben.
Ebenfalls,
import quaternion
Sie können die Bibliothek mit importieren.
quat = (w, x, y, z) = \left(\underbrace{\cos\frac{\theta}{2}}_{Realteil},\ \underbrace{\lambda_x\sin\frac{\theta}{2},\ \lambda_y\sin\frac{\theta}{2},\ \lambda_z\sin\frac{\theta}{2}}_{Imaginäre Zahl(Vektor)Abteilung}\right)
Weniger als,
import numpy as np
import quaternion
Wird besorgt.
quat = np.quaternion(w, x, y, z)
Quaternion wird dem Attribut numpy hinzugefügt. Zum Beispiel
print(np.quaternion(1,0,0,0))
# -> quaternion(1, 0, 0, 0)
type(np.quaternion(1,0,0,0))
# -> quaternion.quaternion
Es wird.
q1 = np.quaternion(1, 2, 3, 4)
q2 = np.quaternion(4, 5, 6, 7)
print(q1*q2)
# -> quaternion(-52, 10, 24, 20)
Multiplikation ist definiert. Derzeit sind auch andere Operationen mit vier Regeln definiert, aber verwenden Sie manchmal Summen ... Sie sind nicht in Eigen von C ++ definiert.
Es wird nur ein Teil aufgenommen. Es werden keine Dinge behandelt, die mit sphärischen Funktionen oder linearer Interpolation zusammenhängen. Referenz: https://quaternion.readthedocs.io/en/latest/_autosummary/quaternion.html
Mitgliedsvariablen | Funktion |
---|---|
w | Elemente des Realteils |
x | Das erste Element des Imaginärteils |
y | Zweites Element des Imaginärteils |
z | Drittes Element des Imaginärteils |
components | (w,x,y,z)Ist numpy.Wird als Array zurückgegeben |
imag | Imaginärteil(x,y,z)Ist numpy.Wird als Array zurückgegeben |
vec | Imaginärteil(x,y,z)Ist numpy.Wird als Array zurückgegeben |
real | Realteil(w)Ist zurück gekommen |
Mitgliedsfunktion | Funktion |
---|---|
abs() | Absolutwert der Quaternion (euklidischer Abstand) |
absolute() | Absoluter Wert der Quaternion |
angle() | Drehwinkel |
conj() | Gibt das komplexe Konjugat der Quaternion zurück |
conjugate() | Gibt das komplexe Konjugat der Quaternion zurück |
equal(quat) | Entspricht es der Quaternion des Inhalts des Arguments? |
exp | Gibt exponentiell zurück ( |
inverse() | Gibt die umgekehrte Quaternion zurück |
isfinite() | Sind alle Elemente endlich? |
ininf() | Gibt es überhaupt ein inf-Element? |
innan() | Gibt es überhaupt ein Nanelement? |
log() | Gibt das Quarternionsprotokoll zurück |
nonzero() | Sind alle Elemente 0 |
norm() | Quarternion Cayley Norm (absolute Quadratroute) |
normalized() | Gibt eine normalisierte Quaternion zurück |
notequal(quat) | Ist es nicht gleich der Quaternion im Argument? |
sqrt() | Quarternion Quadrat-root( |
square() | Quarternion im Quadrat |
Der Punkt ist, dass die Methoden in diesem Bereich nicht eindimensional sind, sondern auch für mehrdimensionale Arrays verwendet werden können. Wenn die Größe der letzten Dimension eine Quaternion erfordert, sollte sie 4 sein, wenn es 3 Dimensionen sind, sollte es 3 Dimensionen sein, wenn es 3x3 ist, sollten die letzten 2 Dimensionen 3x3 sein.
Mitgliedsfunktion | Funktion |
---|---|
quaternion.as_quat_array(a) | numpy.Konvertieren Sie das Array in Quaternion. Die Größe der letzten Dimension von a muss 4 sein |
quaternion.as_float_array(a) | numpy.Quaternion numpy.In Array konvertieren. Die Dimension der Ausgabe ist eine größer als die der Eingabe. |
quaternion.from_float_array(a) | as_quat_Gleich wie Array |
quaternion.as_rotation_matrix(q) | numpy.Konvertieren Sie die Quaternion in eine 3x3-Rotationsmatrix. |
quaternion.from_rotation_matrix(rot, nonorthogonal=True) | Numpy eine 3x3 Rotationsmatrix.In Quaternion konvertieren |
quaternion.as_rotation_vector(q) | Finden Sie die Rotationsachse aus dem Viertel. Die Größe der letzten Dimension der Ausgabe beträgt 3. |
quaternion.from_rotation_vector(rot) | Von Rotationsachse der Größe 3 in Quaternion konvertieren. |
quaternion.as_euler_angles(q) | Von Quaternion auf Ölerwinkel umstellen. Informationen zur Umrechnungsreihenfolge der Euler-Winkel finden Sie im Dokument. |
quaternion.from_euler_angles(alpha_beta_gamma, beta=None, gamma=None) | Vom Euler-Winkel in Quarternion konvertieren. Informationen zur Umrechnungsreihenfolge der Euler-Winkel finden Sie im Dokument. |
quaternion.rotate_vectors(R, v, axis=-1) | R ist eine Quaternion und v ist ein Vektor. Drehen Sie den Vektor entsprechend der Quaternion. |
quaternion.allclose(a, b, rtol=8.881784197001252e-16, atol=0.0, equal_nan=False, verbose=False) | Vergleichen Sie zwei Quaternionen |
quaternion.integrate_angular_velocity(Omega, t0, t1, R0=None, tolerance=1e-12) | Entsprechend der Winkelgeschwindigkeit drehen |
https://quaternion.readthedocs.io/en/latest/index.html
Übrigens scheint der Autor dieser Bibliothek einen großen Ölerwinkel zu haben. Wenn Sie jemanden sehen, der es benutzt, hören Sie auf! Sag das und geh weg von der Stelle und leg dich mit deiner Mutter an! Ist geschrieben
Wo ist die Nachfrage nach Quaternionen in Python? Unity ist C #, und ich spreche zunächst davon, die Funktionen von Unity zu verwenden, und Python ist für Roboter zu langsam, was nicht in Frage kommt ...
Recommended Posts