![]() |
http://www.sim.no http://www.coin3d.org |
The SbRotation class represents a rotation in 3D space.SbRotation is used extensively throughout the Coin library. More...
#include <Inventor/SbLinear.h>
Public Member Functions | |
SbRotation (void) | |
SbRotation (const SbVec3f &axis, const float radians) | |
SbRotation (const float q[4]) | |
SbRotation (const float q0, const float q1, const float q2, const float q3) | |
SbRotation (const SbMatrix &m) | |
SbRotation (const SbVec3f &rotateFrom, const SbVec3f &rotateTo) | |
const float * | getValue (void) const |
void | getValue (float &q0, float &q1, float &q2, float &q3) const |
SbRotation & | setValue (const float q0, const float q1, const float q2, const float q3) |
void | getValue (SbVec3f &axis, float &radians) const |
void | getValue (SbMatrix &matrix) const |
SbRotation & | invert (void) |
SbRotation | inverse (void) const |
SbRotation & | setValue (const float q[4]) |
SbRotation & | setValue (const SbMatrix &m) |
SbRotation & | setValue (const SbVec3f &axis, const float radians) |
SbRotation & | setValue (const SbVec3f &rotateFrom, const SbVec3f &rotateTo) |
SbRotation & | operator*= (const SbRotation &q) |
SbRotation & | operator*= (const float s) |
SbBool | equals (const SbRotation &r, const float tolerance) const |
void | multVec (const SbVec3f &src, SbVec3f &dst) const |
void | scaleAngle (const float scaleFactor) |
void | print (FILE *fp) const |
Static Public Member Functions | |
static SbRotation | slerp (const SbRotation &rot0, const SbRotation &rot1, float t) |
static SbRotation | identity (void) |
Friends | |
int | operator== (const SbRotation &q1, const SbRotation &q2) |
int | operator!= (const SbRotation &q1, const SbRotation &q2) |
SbRotation | operator* (const SbRotation &q1, const SbRotation &q2) |
The SbRotation class represents a rotation in 3D space.
SbRotation is used extensively throughout the Coin library.
An SbRotation is stored internally as a quaternion for speed and storage reasons, but inquiries can be done to get and set axis and angle values for convenience.
Note that there is one very common mistake that is easy to make when setting the value of an SbRotation, and that is to inadvertently use the wrong SbRotation constructor. This example should clarify the problem:
The programmer clearly tries to set a PI/2 rotation around the Z axis, but this will fail, as the SbRotation constructor invoked above is the one that takes as arguments the 4 floats of a quaternion. What the programmer almost certainly wanted to do was to use the SbRotation constructor that takes a rotation vector and a rotation angle, which is invoked like this:
Another common problem is to set the rotation value to exactly 0.0, while wanting to store just the information about a rotation angle: rotations are internally handled as quaternions, and when converting from an angle and a rotation value to a quaternion representation, the information about the angle "gets lost" if there is no actual rotation.
SbRotation::SbRotation | ( | void | ) |
The default constructor just initializes a valid rotation. The actual value is unspecified, and you should not depend on it.
Referenced by identity(), and slerp().
SbRotation::SbRotation | ( | const SbVec3f & | axis, |
const float | radians | ||
) |
Construct a new SbRotation object initialized with the given axis-of-rotation and rotation angle.
References SbVec3f::length(), SoDebugError::postWarning(), and setValue().
SbRotation::SbRotation | ( | const float | q[4] | ) |
Construct a new SbRotation object initialized with the given quaternion components.
The array must be ordered as follows:
q[0] = x, q[1] = y, q[2] = z and q[3] = w, where the quaternion is specified by q=w+xi+yj+zk.
References setValue().
SbRotation::SbRotation | ( | const float | q0, |
const float | q1, | ||
const float | q2, | ||
const float | q3 | ||
) |
Construct a new SbRotation object initialized with the given quaternion components.
References setValue().
SbRotation::SbRotation | ( | const SbMatrix & | m | ) |
Construct a new SbRotation object initialized with the given rotation matrix.
References setValue().
Construct a rotation which is the minimum rotation necessary to make vector rotateFrom point in the direction of vector rotateTo.
Example:
References setValue().
const float * SbRotation::getValue | ( | void | ) | const |
Return pointer to an array with the rotation expressed as four quaternion values.
Referenced by SoVRMLSound::audioRender(), SoTrackballDragger::dragFinish(), SoTransformerDragger::dragFinish(), SoRotation::getMatrix(), SoRotationXYZ::getMatrix(), SbCylinderSheetProjector::getRotation(), SbCylinderSectionProjector::getRotation(), SbCylinderPlaneProjector::getRotation(), SoSFRotation::getValue(), operator*=(), SbViewVolume::rotateCamera(), scaleAngle(), and SbMatrix::setRotate().
void SbRotation::getValue | ( | float & | q0, |
float & | q1, | ||
float & | q2, | ||
float & | q3 | ||
) | const |
Return the four quaternion components representing the rotation.
SbRotation & SbRotation::setValue | ( | const float | q0, |
const float | q1, | ||
const float | q2, | ||
const float | q3 | ||
) |
Set the rotation.
References SbVec4f::normalize(), and SoDebugError::postWarning().
Referenced by SoClipPlaneManip::fieldSensorCB(), SoSpotLightManip::fieldSensorCB(), SoDirectionalLightManip::fieldSensorCB(), operator*=(), SbRotation(), scaleAngle(), and setValue().
void SbRotation::getValue | ( | SbVec3f & | axis, |
float & | radians | ||
) | const |
Return the rotation in the form of an axis-of-rotation and a rotation angle.
References SbVec3f::setValue().
void SbRotation::getValue | ( | SbMatrix & | matrix | ) | const |
Return this rotation in the form of a matrix.
SbRotation & SbRotation::invert | ( | void | ) |
Invert the rotation. Returns reference to self.
References SbVec4f::length(), and SoDebugError::postWarning().
SbRotation SbRotation::inverse | ( | void | ) | const |
Non-destructively inverses the rotation and returns the result.
References SbVec4f::length(), and SoDebugError::postWarning().
Referenced by SoVRMLSound::audioRender(), SoVRMLProximitySensor::doAction(), SoRotation::getMatrix(), SoRotationXYZ::getMatrix(), SoVRMLTransform::getRotationSpaceMatrix(), SoTransform::getRotationSpaceMatrix(), SoVRMLTransform::getScaleSpaceMatrix(), SoTransform::getScaleSpaceMatrix(), SoVRMLTransform::getTranslationSpaceMatrix(), SoTransform::getTranslationSpaceMatrix(), SoVRMLBackground::GLRender(), SbMatrix::setTransform(), SoCenterballDragger::transferCenterDraggerMotion(), SoDirectionalLightDragger::valueChangedCB(), and SoSpotLightDragger::valueChangedCB().
SbRotation & SbRotation::setValue | ( | const float | q[4] | ) |
Reset the rotation by the four quaternions in the array.
References SbVec4f::normalize(), and SoDebugError::postWarning().
SbRotation & SbRotation::setValue | ( | const SbMatrix & | m | ) |
Set the rotation from the components of the given matrix. Returns reference to self.
References operator*=().
SbRotation & SbRotation::setValue | ( | const SbVec3f & | axis, |
const float | radians | ||
) |
Reset rotation with the given axis-of-rotation and rotation angle. Returns reference to self.
Make sure axis is not the null vector when calling this method.
References SbVec3f::length(), SbVec3f::normalize(), and SoDebugError::postWarning().
SbRotation & SbRotation::setValue | ( | const SbVec3f & | rotateFrom, |
const SbVec3f & | rotateTo | ||
) |
Construct a rotation which is the minimum rotation necessary to make vector rotateFrom point in the direction of vector rotateTo.
Returns reference to self.
See SbRotation constructor with corresponding input arguments for a simple code example.
References SbVec3f::cross(), SbVec3f::dot(), SbVec3f::length(), SbVec3f::normalize(), SoDebugError::postWarning(), and setValue().
SbRotation & SbRotation::operator*= | ( | const SbRotation & | q | ) |
Multiplies the quaternions.
Note that order is important when combining quaternions with the multiplication operator.
References getValue(), and setValue().
Referenced by setValue().
SbRotation & SbRotation::operator*= | ( | const float | s | ) |
Multiplies components of quaternion with scalar value s. Returns reference to self.
SbBool SbRotation::equals | ( | const SbRotation & | r, |
const float | tolerance | ||
) | const |
Check the internal quaternion representation vectors for equality within the given tolerance.
References SbVec4f::equals().
Rotate the src vector and put the result in dst.
It is safe to let src and dst be the same SbVec3f instance.
References SbMatrix::multVecMatrix(), and SbMatrix::setRotate().
Referenced by SoVRMLSound::audioRender(), SoTrackballDragger::dragStart(), SoOrthographicCamera::viewBoundingBox(), SoPerspectiveCamera::viewBoundingBox(), and SoFrustumCamera::viewBoundingBox().
void SbRotation::scaleAngle | ( | const float | scaleFactor | ) |
Scale the angle of rotation by scaleFactor.
References getValue(), and setValue().
|
static |
Interpolates along the shortest path between the two rotation positions (from rot0 to rot1).
Returns the SbRotation which will rotate rot0 the given part t of the spherical distance towards rot1, where t=0 will yield rot0 and t=1 will yield rot1.
t should be in the interval [0, 1].
References SbVec4f::dot(), SbVec4f::negate(), SoDebugError::postWarning(), and SbRotation().
|
static |
Returns an identity rotation.
References SbRotation().
Referenced by SoVRMLSphereSensor::dragStart(), SoTransformerDragger::dragStart(), SbSpherePlaneProjector::getRotation(), SoTrackballDragger::setDefaultOnNonWritingFields(), SoDragger::setDefaultOnNonWritingFields(), SbMatrix::setTransform(), SoMotion3Event::SoMotion3Event(), SoVRMLExtrusion::SoVRMLExtrusion(), and SoVRMLViewpoint::SoVRMLViewpoint().
void SbRotation::print | ( | FILE * | fp | ) | const |
Dump the state of this object to the fp file stream. Only works in debug version of library, method does nothing in an optimized compile.
References SbVec4f::print().
|
friend |
Check if the two rotations are equal.
|
friend |
Check if the two rotations are unequal.
|
friend |
Multiplies the two rotations and returns the result.
Note that order is important when combining quaternions with the multiplication operator.
Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.
Generated on Fri Jul 20 2018 for Coin by Doxygen. 1.8.14