﻿Quaternion Structure

# Quaternion Structure

Represents the four coefficient values in a quaternion.

The first value a is the real part, while the rest multiplies i, j and k, that are imaginary.

quaternion = a + bi + cj + dk

Namespace:  Rhino.Geometry
Assembly:  RhinoCommon (in RhinoCommon.dll)
Syntax
```[SerializableAttribute]
public struct Quaternion : IEquatable<Quaternion>,
IEpsilonComparable<Quaternion>```

The Quaternion type exposes the following members.

Constructors
NameDescription
Quaternion
Initializes a new quaternion with the provided coefficients.
Top
Properties
NameDescription
A
Gets or sets the real part of the quaternion.
B
Gets or sets the first imaginary coefficient of the quaternion.
C
Gets or sets the second imaginary coefficient of the quaternion.
Conjugate
Gets a new quaternion that is the conjugate of this quaternion.

This is (a,-b,-c,-d)

D
Gets or sets the third imaginary coefficient of the quaternion.
I
Returns the (0,1,0,0) quaternion.
Identity
Returns the (1,0,0,0) quaternion.
Inverse
Computes a new inverted quaternion,

(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.
IsScalar
true if b, c, and d are all zero.
IsValid
Determines if the four coefficients are valid numbers within RhinoCommon.
IsVector
true if a = 0 and at least one of b, c, or d is not zero.
IsZero
true if a, b, c, and d are all zero.
J
Returns the (0,0,1,0) quaternion.
K
Returns the (0,0,0,1) quaternion.
Length
Returns the length or norm of the quaternion.
LengthSquared
Gets the result of (a^2 + b^2 + c^2 + d^2).
Scalar
The real (scalar) part of the quaternion

This is A.

Vector
The imaginary part of the quaternion

(B,C,D)

Zero
Returns the default quaternion, where all coefficients are 0.
Top
Methods
NameDescription
CrossProduct
Computes the vector cross product of p and q = (0,x,y,z),

where (x,y,z) = CrossProduct(p.Vector,q.Vector).

This is not the same as the quaternion product p*q.

Distance
Returns the distance or norm of the difference between two quaternions.
DistanceTo
Computes the distance or norm of the difference between this and another quaternion.
EpsilonEquals
Check that all values in other are within epsilon of the values in this
Equals(Object)
Determines whether an object is a quaternion and has the same value of this quaternion.
(Overrides ValueTypeEquals(Object).)
Equals(Quaternion)
Determines whether this quaternion has the same value of another quaternion.
GetHashCode
Gets a non-unique but repeatable hashing code for this quaternion.
(Overrides ValueTypeGetHashCode.)
GetRotation(Plane)
Returns the frame created by applying the quaternion's rotation to the canonical world frame (1,0,0),(0,1,0),(0,0,1).
GetRotation(Double, Vector3d)
Returns the rotation defined by the quaternion.
GetType
Gets the Type of the current instance.
(Inherited from Object.)
Invert
Modifies this quaternion to become

(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).

MatrixForm
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 as the quaternion.
Product
The quaternion product of p and q. This is the same value as p*q.
Rotate
Rotates 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.
Rotation(Double, Vector3d)
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.
Rotation(Plane, Plane)
Returns the unit quaternion that represents the rotation that maps plane0.xaxis to plane1.xaxis, plane0.yaxis to plane1.yaxis, and plane0.zaxis to plane1.zaxis.
Set
Sets all coefficients of the quaternion.
SetRotation(Double, Vector3d)
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.
SetRotation(Plane, Plane)
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.
ToString
Returns the fully qualified type name of this instance.
(Inherited from ValueType.)
Unitize
Scales the quaternion's coordinates so that a*a + b*b + c*c + d*d = 1.
Top
Operators
NameDescription

This sums each quaternion coefficient with its correspondent and returns a new result quaternion.

Division
Divides all quaternion coefficients by a factor and returns a new quaternion with the result.
Equality
Determines whether two quaternions have the same value.
Inequality
Determines whether two quaternions have different values.
Multiply(Quaternion, Quaternion)
Multiplies a quaternion with another one.

Quaternion multiplication (Hamilton product) is not commutative.

Multiply(Quaternion, Double)
Multiplies (scales) all quaternion coefficients by a factor and returns a new quaternion with the result.
Multiply(Quaternion, Int32)
Multiplies (scales) all quaternion coefficients by a factor and returns a new quaternion with the result.
Multiply(Quaternion, Single)
Multiplies (scales) all quaternion coefficients by a factor and returns a new quaternion with the result.
Subtraction
Subtracts a quaternion from another one.

This computes the difference of each quaternion coefficient with its correspondent and returns a new result quaternion.

Top