Struct JQuaternion
- Namespace
- Jitter2.LinearMath
- Assembly
- Jitter2.dll
A structure representing a Quaternion: Q = xi + yj + z*k + w.
Uses the Hamilton convention where i² = j² = k² = ijk = -1.
public struct JQuaternion : IEquatable<JQuaternion>
- Implements
- Inherited Members
Constructors
JQuaternion(float, in JVector)
Initializes a new instance of the JQuaternion struct.
public JQuaternion(float w, in JVector v)
Parameters
JQuaternion(float, float, float, float)
A structure representing a Quaternion: Q = xi + yj + z*k + w.
Uses the Hamilton convention where i² = j² = k² = ijk = -1.
public JQuaternion(float x, float y, float z, float w)
Parameters
Fields
W
public float W
Field Value
X
public float X
Field Value
Y
public float Y
Field Value
Z
public float Z
Field Value
Properties
Identity
Gets the identity quaternion (0, 0, 0, 1).
public static JQuaternion Identity { get; }
Property Value
Scalar
Gets the scalar part (w) of the quaternion.
public float Scalar { get; }
Property Value
Vector
Gets the vector part (x, y, z) of the quaternion.
public JVector Vector { get; }
Property Value
Methods
Add(in JQuaternion, in JQuaternion)
Adds two quaternions component-wise.
public static JQuaternion Add(in JQuaternion quaternion1, in JQuaternion quaternion2)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
Returns
- JQuaternion
The sum of the two quaternions.
Add(in JQuaternion, in JQuaternion, out JQuaternion)
Adds two quaternions component-wise.
public static void Add(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
resultJQuaternionOutput: The sum of the two quaternions.
Conjugate()
Returns the conjugate of the quaternion.
public readonly JQuaternion Conjugate()
Returns
- JQuaternion
The conjugate of the quaternion.
Remarks
The conjugate is defined as (-x, -y, -z, w).
Conjugate(in JQuaternion)
Returns the conjugate of a quaternion.
public static JQuaternion Conjugate(in JQuaternion value)
Parameters
valueJQuaternionThe quaternion to conjugate.
Returns
- JQuaternion
The conjugate of the quaternion.
Remarks
The conjugate is defined as (-x, -y, -z, w).
For unit quaternions, the conjugate is equivalent to the inverse.
ConjugateMultiply(in JQuaternion, in JQuaternion)
Calculates conjugate(Q1) * Q2.
public static JQuaternion ConjugateMultiply(in JQuaternion quaternion1, in JQuaternion quaternion2)
Parameters
quaternion1JQuaternionThe quaternion to conjugate and then multiply.
quaternion2JQuaternionThe second quaternion.
Returns
ConjugateMultiply(in JQuaternion, in JQuaternion, out JQuaternion)
Calculates conjugate(Q1) * Q2.
public static void ConjugateMultiply(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)
Parameters
quaternion1JQuaternionThe quaternion to conjugate and then multiply.
quaternion2JQuaternionThe second quaternion.
resultJQuaternionOutput: The resulting quaternion.
CreateFromAxisAngle(in JVector, float)
Creates a quaternion from a unit axis and an angle.
public static JQuaternion CreateFromAxisAngle(in JVector axis, float angle)
Parameters
axisJVectorThe unit vector to rotate around (must be normalized).
anglefloatThe angle of rotation in radians.
Returns
- JQuaternion
A unit quaternion representing the rotation.
Remarks
The axis must be normalized.
CreateFromMatrix(in JMatrix)
Creates a quaternion from a rotation matrix.
public static JQuaternion CreateFromMatrix(in JMatrix matrix)
Parameters
matrixJMatrixThe rotation matrix.
Returns
- JQuaternion
The quaternion representing the rotation.
CreateFromMatrix(in JMatrix, out JQuaternion)
Creates a quaternion from a rotation matrix.
public static void CreateFromMatrix(in JMatrix matrix, out JQuaternion result)
Parameters
matrixJMatrixThe rotation matrix.
resultJQuaternionOutput: The quaternion representing the rotation.
CreateFromToRotation(JVector, JVector)
Creates a quaternion that rotates the unit vector from into
the unit vector to.
public static JQuaternion CreateFromToRotation(JVector from, JVector to)
Parameters
fromJVectorSource direction (must be unit length).
toJVectorTarget direction (must be unit length).
Returns
- JQuaternion
A unit quaternion representing the shortest rotation.
Remarks
This calculation relies on the half-angle formula.
If the vectors are parallel (dot ≈ 1), Identity is returned.
If the vectors are opposite (dot ≈ -1), a rotation of 180° (π radians)
around an arbitrary orthogonal axis is returned.
CreateRotationX(float)
Creates a quaternion representing a rotation around the X-axis.
public static JQuaternion CreateRotationX(float radians)
Parameters
radiansfloatThe angle of rotation in radians.
Returns
- JQuaternion
The resulting quaternion.
CreateRotationY(float)
Creates a quaternion representing a rotation around the Y-axis.
public static JQuaternion CreateRotationY(float radians)
Parameters
radiansfloatThe angle of rotation in radians.
Returns
- JQuaternion
The resulting quaternion.
CreateRotationZ(float)
Creates a quaternion representing a rotation around the Z-axis.
public static JQuaternion CreateRotationZ(float radians)
Parameters
radiansfloatThe angle of rotation in radians.
Returns
- JQuaternion
The resulting quaternion.
Dot(in JQuaternion, in JQuaternion)
Calculates the dot product of two quaternions.
public static float Dot(in JQuaternion quaternion1, in JQuaternion quaternion2)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
Returns
- float
The dot product.
Equals(JQuaternion)
Indicates whether the current object is equal to another object of the same type.
public readonly bool Equals(JQuaternion other)
Parameters
otherJQuaternionAn object to compare with this object.
Returns
Equals(object?)
Indicates whether this instance and a specified object are equal.
public override readonly bool Equals(object? obj)
Parameters
objobjectThe object to compare with the current instance.
Returns
- bool
true if
objand this instance are the same type and represent the same value; otherwise, false.
GetBasisX()
Calculates the transformation of the X-axis (1, 0, 0) by this quaternion.
public readonly JVector GetBasisX()
Returns
- JVector
The transformed vector.
Remarks
Mathematically equivalent to q · (1,0,0) · q⁻¹.
Result: [1 - 2(y² + z²), 2(xy + zw), 2(xz - yw)]
GetBasisY()
Calculates the transformation of the Y-axis (0, 1, 0) by this quaternion.
public readonly JVector GetBasisY()
Returns
- JVector
The transformed vector.
Remarks
Mathematically equivalent to q · (0,1,0) · q⁻¹.
Result: [2(xy - zw), 1 - 2(x² + z²), 2(yz + xw)]
GetBasisZ()
Calculates the transformation of the Z-axis (0, 0, 1) by this quaternion.
public readonly JVector GetBasisZ()
Returns
- JVector
The transformed vector.
Remarks
Mathematically equivalent to q · (0,0,1) · q⁻¹.
Result: [2(xz + yw), 2(yz - xw), 1 - 2(x² + y²)]
GetHashCode()
Returns the hash code for this instance.
public override readonly int GetHashCode()
Returns
- int
A 32-bit signed integer that is the hash code for this instance.
Inverse(in JQuaternion)
Returns the inverse of a quaternion.
public static JQuaternion Inverse(in JQuaternion value)
Parameters
valueJQuaternion
Returns
Remarks
Unlike Conjugate(in JQuaternion), this handles non-unit quaternions correctly by dividing by the squared length.
Length()
Calculates the Euclidean length of the quaternion.
public readonly float Length()
Returns
- float
The length (magnitude).
LengthSquared()
Calculates the squared Euclidean length of the quaternion.
public readonly float LengthSquared()
Returns
- float
The squared length.
Lerp(in JQuaternion, in JQuaternion, float)
Linearly interpolates between two quaternions and normalizes the result.
public static JQuaternion Lerp(in JQuaternion quaternion1, in JQuaternion quaternion2, float amount)
Parameters
quaternion1JQuaternionSource quaternion.
quaternion2JQuaternionTarget quaternion.
amountfloatWeight of the interpolation.
Returns
- JQuaternion
The interpolated unit quaternion.
Multiply(in JQuaternion, in JQuaternion)
Multiplies two quaternions (Hamilton Product).
public static JQuaternion Multiply(in JQuaternion quaternion1, in JQuaternion quaternion2)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
Returns
- JQuaternion
The product of the two quaternions.
Remarks
Non-commutative. Q1 * Q2 represents the rotation Q2 followed by Q1 (local frame) or Q1 followed by Q2 (global frame).
Multiply(in JQuaternion, in JQuaternion, out JQuaternion)
Multiplies two quaternions.
public static void Multiply(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
resultJQuaternionOutput: The product of the two quaternions.
Multiply(in JQuaternion, float)
Multiplies a quaternion by a scalar factor.
public static JQuaternion Multiply(in JQuaternion quaternion1, float scaleFactor)
Parameters
quaternion1JQuaternionThe quaternion.
scaleFactorfloatThe scalar factor.
Returns
- JQuaternion
The scaled quaternion.
Multiply(in JQuaternion, float, out JQuaternion)
Multiplies a quaternion by a scalar factor.
public static void Multiply(in JQuaternion quaternion1, float scaleFactor, out JQuaternion result)
Parameters
quaternion1JQuaternionThe quaternion.
scaleFactorfloatThe scalar factor.
resultJQuaternionOutput: The scaled quaternion.
MultiplyConjugate(in JQuaternion, in JQuaternion)
Calculates Q1 * conjugate(Q2).
public static JQuaternion MultiplyConjugate(in JQuaternion quaternion1, in JQuaternion quaternion2)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe quaternion to conjugate.
Returns
MultiplyConjugate(in JQuaternion, in JQuaternion, out JQuaternion)
Calculates Q1 * conjugate(Q2).
public static void MultiplyConjugate(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe quaternion to conjugate.
resultJQuaternionOutput: The resulting quaternion.
Normalize()
Normalizes the quaternion to unit length.
[Obsolete("In-place Normalize() is deprecated; use the static Normalize method or NormalizeInPlace.")]
public void Normalize()
Normalize(in JQuaternion)
Returns a normalized version of the quaternion.
public static JQuaternion Normalize(in JQuaternion value)
Parameters
valueJQuaternionThe source quaternion.
Returns
Normalize(in JQuaternion, out JQuaternion)
Returns a normalized version of the quaternion.
public static void Normalize(in JQuaternion value, out JQuaternion result)
Parameters
valueJQuaternionThe source quaternion.
resultJQuaternionOutput: The normalized unit quaternion.
NormalizeInPlace(ref JQuaternion)
Normalizes the provided quaternion structure in place.
public static void NormalizeInPlace(ref JQuaternion quaternion)
Parameters
quaternionJQuaternionThe quaternion to normalize.
Slerp(in JQuaternion, in JQuaternion, float)
Interpolates between two quaternions using Spherical Linear Interpolation (SLERP).
public static JQuaternion Slerp(in JQuaternion quaternion1, in JQuaternion quaternion2, float amount)
Parameters
quaternion1JQuaternionSource quaternion.
quaternion2JQuaternionTarget quaternion.
amountfloatWeight of the interpolation.
Returns
- JQuaternion
The interpolated quaternion.
Subtract(in JQuaternion, in JQuaternion)
Subtracts the second quaternion from the first component-wise.
public static JQuaternion Subtract(in JQuaternion quaternion1, in JQuaternion quaternion2)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
Returns
- JQuaternion
The difference of the two quaternions.
Subtract(in JQuaternion, in JQuaternion, out JQuaternion)
Subtracts the second quaternion from the first component-wise.
public static void Subtract(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)
Parameters
quaternion1JQuaternionThe first quaternion.
quaternion2JQuaternionThe second quaternion.
resultJQuaternionOutput: The difference of the two quaternions.
ToAxisAngle(JQuaternion, out JVector, out float)
Decomposes a unit quaternion into an axis and an angle.
public static void ToAxisAngle(JQuaternion quaternion, out JVector axis, out float angle)
Parameters
quaternionJQuaternionThe unit quaternion to decompose.
axisJVectorOutput: The unit rotation axis.
anglefloatOutput: The rotation angle (radians).
Remarks
Assumes quaternion is normalized.
Returns the shortest arc (angle in [0, π]).
ToString()
Returns a string representing the quaternion in the format X=..., Y=..., Z=..., W=....
public override readonly string ToString()
Returns
UnsafeAs<T>()
Reinterprets the bits of this JQuaternion as T.
public T UnsafeAs<T>() where T : unmanaged
Returns
- T
The reinterpreted value.
Type Parameters
TThe target unmanaged type.
Remarks
Valid only if T has identical size and compatible layout.
Memory order is X, Y, Z, W (W is last).
UnsafeFrom<T>(in T)
Reinterprets the bits of value as a JQuaternion.
public static JQuaternion UnsafeFrom<T>(in T value) where T : unmanaged
Parameters
valueTThe value to reinterpret.
Returns
- JQuaternion
The reinterpreted quaternion.
Type Parameters
TThe source unmanaged type.
Remarks
Valid only if T has identical size and compatible layout.
Expects memory order X, Y, Z, W (W is last).
Operators
operator +(in JQuaternion, in JQuaternion)
Adds two quaternions component-wise.
public static JQuaternion operator +(in JQuaternion value1, in JQuaternion value2)
Parameters
value1JQuaternionvalue2JQuaternion
Returns
operator ==(JQuaternion, JQuaternion)
public static bool operator ==(JQuaternion left, JQuaternion right)
Parameters
leftJQuaternionrightJQuaternion
Returns
implicit operator Quaternion(in JQuaternion)
public static implicit operator Quaternion(in JQuaternion q)
Parameters
Returns
implicit operator JQuaternion(in Quaternion)
public static implicit operator JQuaternion(in Quaternion q)
Parameters
Returns
implicit operator JQuaternion((float x, float y, float z, float w))
public static implicit operator JQuaternion((float x, float y, float z, float w) tuple)
Parameters
Returns
operator !=(JQuaternion, JQuaternion)
public static bool operator !=(JQuaternion left, JQuaternion right)
Parameters
leftJQuaternionrightJQuaternion
Returns
operator *(in JQuaternion, in JQuaternion)
Multiplies two quaternions (Hamilton Product).
public static JQuaternion operator *(in JQuaternion value1, in JQuaternion value2)
Parameters
value1JQuaternionvalue2JQuaternion
Returns
operator *(in JQuaternion, float)
Scales a quaternion by a factor.
public static JQuaternion operator *(in JQuaternion value1, float value2)
Parameters
value1JQuaternionvalue2float
Returns
operator *(float, in JQuaternion)
Scales a quaternion by a factor.
public static JQuaternion operator *(float value1, in JQuaternion value2)
Parameters
value1floatvalue2JQuaternion
Returns
operator -(in JQuaternion, in JQuaternion)
Subtracts the second quaternion from the first component-wise.
public static JQuaternion operator -(in JQuaternion value1, in JQuaternion value2)
Parameters
value1JQuaternionvalue2JQuaternion
Returns
operator -(in JQuaternion)
Flips the sign of each component of the quaternion.
public static JQuaternion operator -(in JQuaternion value)
Parameters
valueJQuaternion