Quaternion Structure

Structure that represents a rotation in three dimensions.

Namespace:  System.Windows.Media.Media3D
Assembly:  PresentationCore (in PresentationCore.dll)
XMLNS for XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

[SerializableAttribute]
[TypeConverterAttribute(typeof(QuaternionConverter))]
public struct Quaternion : IFormattable
<Quaternion .../>
<object property="x,y,z,w"/>
-or-
<object property="x y z w"/>

XAML Values

x

The X component of this Quaternion structure.

y

The Y component of this Quaternion structure.

z

The Z component of this Quaternion structure.

w

The W component of this Quaternion structure.

The Quaternion type exposes the following members.

  NameDescription
Public methodQuaternion(Vector3D, Double)Initializes a new instance of the Quaternion structure.
Public methodQuaternion(Double, Double, Double, Double)Initializes a new instance of the Quaternion structure.
Top

  NameDescription
Public propertyAngleGets the quaternion's angle, in degrees.
Public propertyAxisGets the quaternion's axis.
Public propertyStatic memberIdentityGets the Identity quaternion
Public propertyIsIdentityGets a value that indicates whether the specified quaternion is an Identity quaternion.
Public propertyIsNormalizedGets a value that indicates whether the quaternion is normalized.
Public propertyWGets the W component of the quaternion.
Public propertyXGets the X component of the quaternion.
Public propertyYGets the Y component of the quaternion.
Public propertyZGets the Z component of the quaternion.
Top

  NameDescription
Public methodStatic memberAddAdds the specified quaternions.
Public methodConjugateReplaces a quaternion with its conjugate.
Public methodEquals(Object)Compares two Quaternion instances for equality. (Overrides ValueType.Equals(Object).)
Public methodEquals(Quaternion)Compares two Quaternion instances for equality.
Public methodStatic memberEquals(Quaternion, Quaternion)Compares two Quaternion instances for equality.
Public methodGetHashCodeReturns the hash code for the Quaternion. (Overrides ValueType.GetHashCode().)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodInvertReplaces the specified quaternion with its inverse
Public methodStatic memberMultiplyMultiplies the specified Quaternion values.
Public methodNormalizeReturns a normalized quaternion.
Public methodStatic memberParseConverts a string representation of a Quaternion into the equivalent Quaternion structure.
Public methodStatic memberSlerp(Quaternion, Quaternion, Double)Interpolates between two orientations using spherical linear interpolation.
Public methodStatic memberSlerp(Quaternion, Quaternion, Double, Boolean)Interpolates between orientations, represented as Quaternion structures, using spherical linear interpolation.
Public methodStatic memberSubtractSubtracts a Quaternion from another.
Public methodToString()Creates a string representation of the object. (Overrides ValueType.ToString().)
Public methodToString(IFormatProvider)Creates a string representation of the object.
Top

  NameDescription
Public operatorStatic memberAdditionAdds the specified Quaternion values.
Public operatorStatic memberEqualityCompares two Quaternion instances for exact equality.
Public operatorStatic memberInequalityCompares two Quaternion instances for exact inequality.
Public operatorStatic memberMultiplyMultiplies the specified quaternion by another.
Public operatorStatic memberSubtractionSubtracts a specified quaternion from another.
Top

  NameDescription
Explicit interface implemetationPrivate methodIFormattable.ToStringThis member supports the Windows Presentation Foundation (WPF) infrastructure and is not intended to be used directly from your code. For a description of this member, see ToString.
Top

Quaternions allow you to interpolate between rotation transformations applied to an object, thereby making it easier to compute smooth animations of rotations. A quaternion represents an axis of rotation and a rotation around that axis. It's possible to individually define the axis and angle of rotation of the starting and ending positions of a rotated object ,but the intermediate positions of that object during an animation are computationally uncertain. By determining a quaternion that represents the original orientation of a 3-D object and one that represents its destination orientation, you can smoothly interpolate between those orientations.

In XAML, the delimiter between the values of a Quaternion can be either a comma or a space.

Some cultures might use the comma character as the decimal delimiter instead of the period character. XAML processing for invariant culture defaults to en-US in most XAML processor implementations, and expects the period to be the decimal delimiter. You should avoid using the comma character as the decimal delimiter if specifying a Quaternion in XAML, because that will clash with the string type conversion of a Quaternion attribute value into its components.

<!-- Trigger the rotation animation when the 3D object loads. -->
<Viewport3D.Triggers>
  <EventTrigger RoutedEvent="Viewport3D.Loaded">
    <BeginStoryboard>
      <Storyboard>

        <!-- This animation animates the Rotation property of the RotateTransform3D
             causing the 3D shape to rotate. -->
        <QuaternionAnimation
         Storyboard.TargetName="myQuaternionRotation3D"
         Storyboard.TargetProperty="Quaternion" From="0,0,1,0" To="0.3, 0.3, 1, 0" 
         Duration="0:0:2" />

      </Storyboard>
    </BeginStoryboard>
  </EventTrigger>
</Viewport3D.Triggers>
//Read new settings 
try
{
    Double WValue = System.Convert.ToDouble(QuaternionWText.Text);
    Double XValue = System.Convert.ToDouble(QuaternionXText.Text);
    Double YValue = System.Convert.ToDouble(QuaternionYText.Text);
    Double ZValue = System.Convert.ToDouble(QuaternionZText.Text);

    endQuaternion = new Quaternion(XValue, YValue, ZValue, WValue);
}
catch
{
    MessageBox.Show("Set non-null values for the quaternion.");
}

myQuaternionRotation3D = new QuaternionRotation3D(endQuaternion);
myRotateTransform3D.Rotation = myQuaternionRotation3D;

//update matrix display
qrotationMatrix3D = myRotateTransform3D.Value;

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2015 Microsoft