Quaternion Structure 
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
The Quaternion type exposes the following members.
Name  Description  

Quaternion 
Initializes a new quaternion with the provided coefficients.

Name  Description  

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.

Name  Description  

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 nonunique 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(Transform) 
Returns a transformation matrix that performs the rotation defined by the quaternion.
The transformation returned by this method has the property that xform * V = q.Rotate(V).
If the quaternion is not unitized, the rotation of its unitized form is returned.
 
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 a string representation of this Quaternion.
(Overrides ValueTypeToString.)  
Unitize 
Scales the quaternion's coordinates so that a*a + b*b + c*c + d*d = 1.

Name  Description  

Addition 
Adds two quaternions.
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. 