Rhino C++ API
7.26
|
#include <opennurbs_quaternion.h>
Public Member Functions | |
ON_Quaternion () | |
ON_Quaternion (const ON_3dVector &v) | |
(a,b,c,d) = (0,v.x,v.y,v.z) More... | |
ON_Quaternion (double qa, double qb, double qc, double qd) | |
ON_Quaternion | Conjugate () const |
double | DistanceTo (const ON_Quaternion &q) const |
bool | GetRotation (double &angle, ON_3dVector &axis) const |
bool | GetRotation (ON_Plane &plane) const |
bool | GetRotation (ON_Xform &xform) const |
ON_Quaternion | Inverse () const |
bool | Invert () |
bool | IsNotZero () const |
bool | IsScalar () const |
bool | IsValid () const |
bool | IsVector () const |
bool | IsZero () const |
double | Length () const |
double | LengthSquared () const |
ON_Xform | MatrixForm () const |
ON_Quaternion | operator* (const ON_Quaternion &) const |
quaternion multiplication is not commutative More... | |
ON_Quaternion | operator* (double) const |
ON_Quaternion | operator* (float) const |
ON_Quaternion | operator* (int) const |
arithmetic operators More... | |
ON_Quaternion | operator+ (const ON_Quaternion &) const |
ON_Quaternion | operator- (const ON_Quaternion &) const |
ON_Quaternion | operator/ (double) const |
ON_Quaternion | operator/ (float) const |
ON_Quaternion | operator/ (int) const |
ON_Quaternion & | operator= (const ON_3dVector &v) |
(a,b,c,d) = (0,v.x,v.y,v.z) More... | |
ON_3dVector | Rotate (ON_3dVector v) const |
double | Scalar () const |
void | Set (double qa, double qb, double qc, double qd) |
void | SetRotation (const ON_Plane &plane0, const ON_Plane &plane1) |
void | SetRotation (double angle, const ON_3dVector &axis) |
bool | Unitize () |
ON_3dVector | Vector () const |
Static Public Member Functions | |
static double | Distance (const ON_Quaternion &p, const ON_Quaternion &q) |
static ON_Quaternion | Exp (ON_Quaternion q) |
static ON_Quaternion | Log (ON_Quaternion q) |
static ON_Quaternion | Pow (ON_Quaternion q, double t) |
static ON_Quaternion | Rotation (const ON_Plane &plane0, const ON_Plane &plane1) |
static ON_Quaternion | Rotation (double angle, const ON_3dVector &axis) |
static ON_Quaternion | Slerp (ON_Quaternion q0, ON_Quaternion q1, double t) |
Public Attributes | |
double | a |
quaternion = a + bi + cj + dk More... | |
double | b |
double | c |
double | d |
Static Public Attributes | |
static const ON_Quaternion | I |
"i" = (0,1,0,0) More... | |
static const ON_Quaternion | Identity |
1 = (1,0,0,0) More... | |
static const ON_Quaternion | J |
"j" = (0,0,1,0) More... | |
static const ON_Quaternion | K |
"k" = (0,0,0,1) More... | |
static const ON_Quaternion | Zero |
0 = (0,0,0,0 More... | |
/ / Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved. / OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert / McNeel & Associates. / / THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. / ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF / MERCHANTABILITY ARE HEREBY DISCLAIMED. /
/ For complete openNURBS copyright information see http://www.opennurbs.org. / //////////////////////////////////////////////////////////////
|
inline |
ON_Quaternion::ON_Quaternion | ( | double | qa, |
double | qb, | ||
double | qc, | ||
double | qd | ||
) |
ON_Quaternion::ON_Quaternion | ( | const ON_3dVector & | v | ) |
(a,b,c,d) = (0,v.x,v.y,v.z)
ON_Quaternion ON_Quaternion::Conjugate | ( | ) | const |
Description: Returns the conjugate of the quaternion = (a,-b,-c,-d).
|
static |
Returns: The distance or norm of the difference between the two quaternions. = (p - q).Length().
double ON_Quaternion::DistanceTo | ( | const ON_Quaternion & | q | ) | const |
Returns: The distance or norm of the difference between the two quaternions. = ("this" - q).Length().
|
static |
Returns: exp(q) = e^a*( cos(|V|) + V/|V|*sin(|V|) ), where V = b*i + c*j + d*k.
bool ON_Quaternion::GetRotation | ( | double & | angle, |
ON_3dVector & | axis | ||
) | const |
Parameters: angle - [out] in radians axis - [out] unit axis of rotation of 0 if (b,c,d) is the zero vector. Returns: The rotation defined by the quaternion. Remarks: If the quaternion is not unitized, the rotation of its unitized form is returned.
bool ON_Quaternion::GetRotation | ( | ON_Plane & | plane | ) | const |
Parameters: plane - [out] Returns: The frame created by applying the quaternion's rotation to the canonical world frame (1,0,0),(0,1,0),(0,0,1).
bool ON_Quaternion::GetRotation | ( | ON_Xform & | xform | ) | const |
Description: The transformation returned by this function has the property that xform*V = q.Rotate(V). Parameters: xform - [out] Returns: A transformation matrix that performs the rotation defined by the quaternion. Remarks: If the quaternion is not unitized, the rotation of its unitized form is returned. Do not confuse the result of this function the matrix returned by ON_Quaternion::MatrixForm(). The transformation returned by this function has the property that xform*V = q.Rotate(V).
ON_Quaternion ON_Quaternion::Inverse | ( | ) | const |
Returns: Sets the quaternion to a/L2, -b/L2, -c/L2, -d/L2, where L2 = length squared = (a*a + b*b + c*c + d*d). This is the multiplicative inverse, i.e., (a,b,c,d)*(a/L2, -b/L2, -c/L2, -d/L2) = (1,0,0,0). If "this" is the zero quaternion, then the zero quaternion is returned.
bool ON_Quaternion::Invert | ( | ) |
Description: Sets the quaternion to a/L2, -b/L2, -c/L2, -d/L2, where L2 = length squared = (a*a + b*b + c*c + d*d). This is the multiplicative inverse, i.e., (a,b,c,d)*(a/L2, -b/L2, -c/L2, -d/L2) = (1,0,0,0). Returns: True if successful. False if the quaternion is zero and cannot be inverted.
bool ON_Quaternion::IsNotZero | ( | ) | const |
Returns: True if a, b, c, and d are all valid, finite and at least one is non-zero.
bool ON_Quaternion::IsScalar | ( | ) | const |
Returns: True if b, c, and d are all zero.
bool ON_Quaternion::IsValid | ( | ) | const |
Returns: True if a, b, c, and d are valid finite IEEE doubles.
bool ON_Quaternion::IsVector | ( | ) | const |
Returns: True if a = 0 and at least one of b, c, or d is not zero.
bool ON_Quaternion::IsZero | ( | ) | const |
Returns: True if a, b, c, and d are all zero.
double ON_Quaternion::Length | ( | ) | const |
Returns: Returns the length or norm of the quaternion sqrt(a*a + b*b + c*c + d*d).
double ON_Quaternion::LengthSquared | ( | ) | const |
Returns: Returns a*a + b*b + c*c + d*d.
|
static |
Returns: log(q) = log(|q|) + V/|V|*acos(a/|q|), where V = b*i + c*j + d*k.
ON_Xform ON_Quaternion::MatrixForm | ( | ) | const |
Returns: 4x4 real valued matrix form of the quaternion
a b c d -b a -d c -c d a -b -d -c b a
which has the same arithmetic properties in as the quaternion. Remarks: Do not confuse this with the rotation defined by the quaternion. This function will only be interesting to math nerds and is not useful in rendering or animation applications.
ON_Quaternion ON_Quaternion::operator* | ( | const ON_Quaternion & | ) | const |
quaternion multiplication is not commutative
ON_Quaternion ON_Quaternion::operator* | ( | double | ) | const |
ON_Quaternion ON_Quaternion::operator* | ( | float | ) | const |
ON_Quaternion ON_Quaternion::operator* | ( | int | ) | const |
arithmetic operators
ON_Quaternion ON_Quaternion::operator+ | ( | const ON_Quaternion & | ) | const |
ON_Quaternion ON_Quaternion::operator- | ( | const ON_Quaternion & | ) | const |
ON_Quaternion ON_Quaternion::operator/ | ( | double | ) | const |
ON_Quaternion ON_Quaternion::operator/ | ( | float | ) | const |
ON_Quaternion ON_Quaternion::operator/ | ( | int | ) | const |
ON_Quaternion& ON_Quaternion::operator= | ( | const ON_3dVector & | v | ) |
(a,b,c,d) = (0,v.x,v.y,v.z)
|
static |
Returns: q^t = Exp(t*Log(q))
ON_3dVector ON_Quaternion::Rotate | ( | ON_3dVector | v | ) | const |
Description Rotate a 3d vector. This operation is also called conjugation, because the result is the same as
(q.Conjugate()*(0,x,y,x)*q/q.LengthSquared()).Vector()
Parameters: v - [in] Returns: R*v, where R is the rotation defined by the unit quaternion. This is mathematically the same as the values (Inverse(q)*(0,x,y,z)*q).Vector() and (q.Conjugate()*(0,x,y,x)*q/q.LengthSquared()).Vector() Remarks: If you need to rotate more than a dozen or so vectors, it will be more efficient to call GetRotation(ON_Xform& xform) and multiply the vectors by xform.
|
static |
Parameters: plane0 - [in] plane1 - [in] Returns: The unit quaternion that represents the the rotation that maps plane0.xaxis to plane1.xaxis, plane0.yaxis to plane1.yaxis, and plane0.zaxis to plane1.zaxis. Remarks: The plane origins are ignored.
|
static |
Parameters: angle - [in] in radians axis - [in] axis of rotation Returns: The unit quaternion
cos(angle/2), sin(angle/2)*x, sin(angle/2)*y, sin(angle/2)*z
where (x,y,z) is the unit vector parallel to axis. This is the unit quaternion that represents the rotation of angle about axis.
double ON_Quaternion::Scalar | ( | ) | const |
Returns: The "real" or "scalar" part of the quaternion = a.
void ON_Quaternion::Set | ( | double | qa, |
double | qb, | ||
double | qc, | ||
double | qd | ||
) |
Descriptin: Sets the quaternion to the unit quaternion which rotates plane0.xaxis to plane1.xaxis, plane0.yaxis to plane1.yaxis, and plane0.zaxis to plane1.zaxis. Parameters: plane0 - [in] plane1 - [in] Remarks: The plane origins are ignored.
void ON_Quaternion::SetRotation | ( | double | angle, |
const ON_3dVector & | axis | ||
) |
Description: Sets the quaternion to
cos(angle/2), sin(angle/2)*x, sin(angle/2)*y, sin(angle/2)*z
where (x,y,z) is the unit vector parallel to axis. This is the unit quaternion that represents the rotation of angle about axis. Parameters: angle - [in] in radians axis - [in] axis of rotation Returns:
|
static |
bool ON_Quaternion::Unitize | ( | ) |
Description: Scales the quaternion's coordinates so that a*a + b*b + c*c + d*d = 1. Returns: True if successful. False if the quaternion is zero and cannot be unitized.
ON_3dVector ON_Quaternion::Vector | ( | ) | const |
Returns: The "vector" or "imaginary" part of the quaternion = (b,c,d)
double ON_Quaternion::a |
quaternion = a + bi + cj + dk
double ON_Quaternion::b |
double ON_Quaternion::c |
double ON_Quaternion::d |
|
static |
"i" = (0,1,0,0)
|
static |
1 = (1,0,0,0)
|
static |
"j" = (0,0,1,0)
|
static |
"k" = (0,0,0,1)
|
static |
0 = (0,0,0,0