Quaternion

com.google.type.quaternion.Quaternion
See theQuaternion companion object
final case class Quaternion(x: Double, y: Double, z: Double, w: Double, unknownFields: UnknownFieldSet) extends GeneratedMessage with Updatable[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.

Attributes

w

The scalar component.

x

The x component.

y

The y component.

z

The z component.

Companion:
object
Source:
Quaternion.scala
Graph
Supertypes
trait Updatable[Quaternion]
trait GeneratedMessage
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Members list

Concise view

Value members

Concrete methods

Attributes

Source:
Quaternion.scala
def getField(`__field`: FieldDescriptor): PValue

Attributes

Source:
Quaternion.scala
def getFieldByNumber(`__fieldNumber`: Int): Any

Attributes

Source:
Quaternion.scala
override def serializedSize: Int

Attributes

Definition Classes
GeneratedMessage
Source:
Quaternion.scala

Returns a human-readable ASCII format representation of this message.

Returns a human-readable ASCII format representation of this message.

The original message can be decoded from this format by using fromAscii on the companion object.

Attributes

Returns:

human-readable representation of this message.

Source:
Quaternion.scala
def withUnknownFields(`__v`: UnknownFieldSet): Quaternion

Attributes

Source:
Quaternion.scala
def withW(`__v`: Double): Quaternion

Attributes

Source:
Quaternion.scala
def withX(`__v`: Double): Quaternion

Attributes

Source:
Quaternion.scala
def withY(`__v`: Double): Quaternion

Attributes

Source:
Quaternion.scala
def withZ(`__v`: Double): Quaternion

Attributes

Source:
Quaternion.scala
def writeTo(`_output__`: CodedOutputStream): Unit

Serializes the message into the given coded output stream

Serializes the message into the given coded output stream

Attributes

Source:
Quaternion.scala

Inherited methods

Attributes

Inherited from:
Product

Attributes

Inherited from:
Product
final def toByteArray: Array[Byte]

Serializes the message and returns a byte array containing its raw bytes

Serializes the message and returns a byte array containing its raw bytes

Attributes

Inherited from:
GeneratedMessage
Source:
GeneratedMessageCompanion.scala
final def toByteString: ByteString

Serializes the message and returns a ByteString containing its raw bytes

Serializes the message and returns a ByteString containing its raw bytes

Attributes

Inherited from:
GeneratedMessage
Source:
GeneratedMessageCompanion.scala
final def toPMessage: PMessage

Attributes

Inherited from:
GeneratedMessage
Source:
GeneratedMessageCompanion.scala
def update(ms: Lens[Quaternion, Quaternion] => () => Quaternion*): A

Attributes

Inherited from:
Updatable
Source:
Lenses.scala
final def writeDelimitedTo(output: OutputStream): Unit

Attributes

Inherited from:
GeneratedMessage
Source:
GeneratedMessageCompanion.scala
final def writeTo(output: OutputStream): Unit

Serializes the message into the given output stream

Serializes the message into the given output stream

Attributes

Inherited from:
GeneratedMessage
Source:
GeneratedMessageCompanion.scala