Show / Hide Table of Contents

Class Quaternion

A quaternion is defined as the quotient of two directed lines in a three-dimensional space or equivalently as the quotient of two Euclidean vectors (https://en.wikipedia.org/wiki/Quaternion).

Quaternions are often used in calculations involving three-dimensional rotations (https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation), as they provide greater mathematical robustness by avoiding the gimbal lock problems that can be encountered when using Euler angles (https://en.wikipedia.org/wiki/Gimbal_lock).

Quaternions are generally represented in this form:

w + xi + yj + zk

where x, y, z, and w are real numbers, and i, j, and k are three imaginary numbers.

Our naming choice (x, y, z, w) comes from the desire to avoid confusion for those interested in the geometric properties of the quaternion in the 3D Cartesian space. Other texts often use alternative names or subscripts, such as (a, b, c, d), (1, i, j, k), or (0, 1, 2, 3), which are perhaps better suited for mathematical interpretations.

To avoid any confusion, as well as to maintain compatibility with a large number of software libraries, the quaternions represented using the protocol buffer below must follow the Hamilton convention, which defines ij = k (i.e. a right-handed algebra), and therefore:

i^2 = j^2 = k^2 = ijk = −1 ij = −ji = k jk = −kj = i ki = −ik = j

Please DO NOT use this to represent quaternions that follow the JPL convention, or any of the other quaternion flavors out there.

Definitions:

  • Quaternion norm (or magnitude): sqrt(x^2 + y^2 + z^2 + w^2).
  • Unit (or normalized) quaternion: a quaternion whose norm is 1.
  • Pure quaternion: a quaternion whose scalar component (w) is 0.
  • Rotation quaternion: a unit quaternion used to represent rotation.
  • Orientation quaternion: a unit quaternion used to represent orientation.

A quaternion can be normalized by dividing it by its norm. The resulting quaternion maintains the same direction, but has a norm of 1, i.e. it moves on the unit sphere. This is generally necessary for rotation and orientation quaternions, to avoid rounding errors: https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions

Note that (x, y, z, w) and (-x, -y, -z, -w) represent the same rotation, but normalization would be even more useful, e.g. for comparison purposes, if it would produce a unique representation. It is thus recommended that w be kept positive, which can be achieved by changing all the signs when w is negative.

Next available tag: 5

Inheritance
System.Object
Quaternion
Implements
IMessage<Quaternion>
IMessage
System.IEquatable<Quaternion>
IDeepCloneable<Quaternion>
Inherited Members
System.Object.Equals(System.Object, System.Object)
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.GetType()
System.Object.MemberwiseClone()
Namespace: Google.Type
Assembly: Google.Api.CommonProtos.dll
Syntax
public sealed class Quaternion : IMessage<Quaternion>, IMessage, IEquatable<Quaternion>, IDeepCloneable<Quaternion>

Constructors

Quaternion()

Declaration
public Quaternion()

Quaternion(Quaternion)

Declaration
public Quaternion(Quaternion other)
Parameters
Type Name Description
Quaternion other

Fields

WFieldNumber

Field number for the "w" field.

Declaration
public const int WFieldNumber = 4
Field Value
Type Description
System.Int32

XFieldNumber

Field number for the "x" field.

Declaration
public const int XFieldNumber = 1
Field Value
Type Description
System.Int32

YFieldNumber

Field number for the "y" field.

Declaration
public const int YFieldNumber = 2
Field Value
Type Description
System.Int32

ZFieldNumber

Field number for the "z" field.

Declaration
public const int ZFieldNumber = 3
Field Value
Type Description
System.Int32

Properties

Descriptor

Declaration
public static MessageDescriptor Descriptor { get; }
Property Value
Type Description
MessageDescriptor

Parser

Declaration
public static MessageParser<Quaternion> Parser { get; }
Property Value
Type Description
MessageParser<Quaternion>

W

The scalar component.

Declaration
public double W { get; set; }
Property Value
Type Description
System.Double

X

The x component.

Declaration
public double X { get; set; }
Property Value
Type Description
System.Double

Y

The y component.

Declaration
public double Y { get; set; }
Property Value
Type Description
System.Double

Z

The z component.

Declaration
public double Z { get; set; }
Property Value
Type Description
System.Double

Methods

CalculateSize()

Declaration
public int CalculateSize()
Returns
Type Description
System.Int32
Implements
IMessage.CalculateSize()

Clone()

Declaration
public Quaternion Clone()
Returns
Type Description
Quaternion
Implements
IDeepCloneable<T>.Clone()

Equals(Quaternion)

Declaration
public bool Equals(Quaternion other)
Parameters
Type Name Description
Quaternion other
Returns
Type Description
System.Boolean
Implements
System.IEquatable<T>.Equals(T)

Equals(Object)

Declaration
public override bool Equals(object other)
Parameters
Type Name Description
System.Object other
Returns
Type Description
System.Boolean
Overrides
System.Object.Equals(System.Object)

GetHashCode()

Declaration
public override int GetHashCode()
Returns
Type Description
System.Int32
Overrides
System.Object.GetHashCode()

MergeFrom(CodedInputStream)

Declaration
public void MergeFrom(CodedInputStream input)
Parameters
Type Name Description
CodedInputStream input
Implements
IMessage.MergeFrom(CodedInputStream)

MergeFrom(Quaternion)

Declaration
public void MergeFrom(Quaternion other)
Parameters
Type Name Description
Quaternion other
Implements
IMessage<T>.MergeFrom(T)

ToString()

Declaration
public override string ToString()
Returns
Type Description
System.String
Overrides
System.Object.ToString()

WriteTo(CodedOutputStream)

Declaration
public void WriteTo(CodedOutputStream output)
Parameters
Type Name Description
CodedOutputStream output
Implements
IMessage.WriteTo(CodedOutputStream)

Explicit Interface Implementations

IMessage.Descriptor

Declaration
MessageDescriptor IMessage.Descriptor { get; }
Returns
Type Description
MessageDescriptor
Implements
IMessage.Descriptor
Back to top