Skip to content

quaternion #

Quaternions

The functions provided by this module add support for quaternions. The algorithms take care to avoid unnecessary intermediate underflows and overflows, allowing the functions to be evaluated over as much of the quaternion plane as possible.

Features

  • Quaternion arithmetic: Addition, subtraction, multiplication, division
  • Rotations: Create rotations from axis-angle, Euler angles, spherical coordinates
  • Interpolation: SLERP, NLERP, LERP for smooth rotation animations
  • Mathematical operations: Conjugate, inverse, normalization, exponentiation
  • Distance metrics: Measure distances between rotations

Quick Start

import vsl.quaternion
import math

// Create rotation: 90 degrees around x-axis
q := quaternion.from_axis_anglef3(math.pi / 2.0, 1.0, 0.0, 0.0)

// Rotate a point
p := quaternion.quaternion(0.0, 1.0, 0.0, 0.0) // Point (1, 0, 0)
q_conj := q.conjugate()
rotated := q.multiply(p).multiply(q_conj)
println('Rotated: (${rotated.x}, ${rotated.y}, ${rotated.z})')

Visualization Examples

Check out these examples that combine quaternions with plotting:

Tutorials

Comprehensive tutorials are available in the docs directory:

Integration Examples

Examples combining quaternions with other VSL modules:

API Reference

See the VSL API Documentation for complete API reference.

fn from_axis_anglef3 #

fn from_axis_anglef3(angle f64, x f64, y f64, z f64) Quaternion

from_axis_anglef3 exposes this operation as part of the public API.

fn from_euler_angles #

fn from_euler_angles(alpha f64, beta f64, gamma f64) Quaternion

from_euler_angles exposes this operation as part of the public API.

fn from_spherical_coords #

fn from_spherical_coords(theta f64, phi f64) Quaternion

from_spherical_coords exposes this operation as part of the public API.

fn id #

fn id() Quaternion

id exposes this operation as part of the public API.

fn quaternion #

fn quaternion(w f64, x f64, y f64, z f64) Quaternion

quaternion exposes this operation as part of the public API.

struct Quaternion #

struct Quaternion {
pub:
	w f64
	x f64
	y f64
	z f64
}

Quaternion defines a public data structure for this module.

fn (Quaternion) * #

fn (q1 Quaternion) * (q2 Quaternion) Quaternion
  • exposes this operation as part of the public API.

fn (Quaternion) + #

fn (q1 Quaternion) + (q2 Quaternion) Quaternion
  • exposes this operation as part of the public API.

fn (Quaternion) - #

fn (q1 Quaternion) - (q2 Quaternion) Quaternion
  • exposes this operation as part of the public API.

fn (Quaternion) / #

fn (q1 Quaternion) / (q2 Quaternion) Quaternion

/ exposes this operation as part of the public API.

fn (Quaternion) abs #

fn (q Quaternion) abs() f64

abs exposes this operation as part of the public API.

fn (Quaternion) add #

fn (q1 Quaternion) add(q2 Quaternion) Quaternion

add exposes this operation as part of the public API.

fn (Quaternion) angle #

fn (q Quaternion) angle() f64

angle exposes this operation as part of the public API.

fn (Quaternion) conjugate #

fn (q Quaternion) conjugate() Quaternion

conjugate exposes this operation as part of the public API.

fn (Quaternion) copy #

fn (q Quaternion) copy() Quaternion

copy exposes this operation as part of the public API.

fn (Quaternion) divide #

fn (q1 Quaternion) divide(q2 Quaternion) Quaternion

divide exposes this operation as part of the public API.

fn (Quaternion) equal #

fn (q1 Quaternion) equal(q2 Quaternion) bool

equal exposes this operation as part of the public API.

fn (Quaternion) exp #

fn (q Quaternion) exp() Quaternion

exp exposes this operation as part of the public API.

fn (Quaternion) inverse #

fn (q Quaternion) inverse() Quaternion

inverse exposes this operation as part of the public API.

fn (Quaternion) is_finite #

fn (q Quaternion) is_finite() bool

is_finite exposes this operation as part of the public API.

fn (Quaternion) is_greater #

fn (q1 Quaternion) is_greater(q2 Quaternion) bool

is_greater exposes this operation as part of the public API.

fn (Quaternion) is_greaterequal #

fn (q1 Quaternion) is_greaterequal(q2 Quaternion) bool

is_greaterequal exposes this operation as part of the public API.

fn (Quaternion) is_inf #

fn (q Quaternion) is_inf() bool

is_inf exposes this operation as part of the public API.

fn (Quaternion) is_less #

fn (q1 Quaternion) is_less(q2 Quaternion) bool

is_less exposes this operation as part of the public API.

fn (Quaternion) is_lessequal #

fn (q1 Quaternion) is_lessequal(q2 Quaternion) bool

is_lessequal exposes this operation as part of the public API.

fn (Quaternion) is_nan #

fn (q Quaternion) is_nan() bool

is_nan exposes this operation as part of the public API.

fn (Quaternion) is_zero #

fn (q Quaternion) is_zero() bool

is_zero exposes this operation as part of the public API.

fn (Quaternion) lerp #

fn (start Quaternion) lerp(end Quaternion, tau f64) Quaternion

lerp exposes this operation as part of the public API.

fn (Quaternion) log #

fn (q Quaternion) log() Quaternion

log exposes this operation as part of the public API.

fn (Quaternion) multiply #

fn (q1 Quaternion) multiply(q2 Quaternion) Quaternion

multiply exposes this operation as part of the public API.

fn (Quaternion) nlerp #

fn (start Quaternion) nlerp(end Quaternion, tau f64) Quaternion

nlerp exposes this operation as part of the public API.

fn (Quaternion) norm #

fn (q Quaternion) norm() f64

norm exposes this operation as part of the public API.

fn (Quaternion) normalized #

fn (q Quaternion) normalized() Quaternion

normalized exposes this operation as part of the public API.

fn (Quaternion) opposite #

fn (q Quaternion) opposite() Quaternion

opposite exposes this operation as part of the public API.

fn (Quaternion) parity_antisymmetric_part #

fn (q Quaternion) parity_antisymmetric_part() Quaternion

parity_antisymmetric_part exposes this operation as part of the public API.

fn (Quaternion) parity_conjugate #

fn (q Quaternion) parity_conjugate() Quaternion

parity_conjugate exposes this operation as part of the public API.

fn (Quaternion) parity_symmetric_part #

fn (q Quaternion) parity_symmetric_part() Quaternion

parity_symmetric_part exposes this operation as part of the public API.

fn (Quaternion) pow #

fn (q Quaternion) pow(p Quaternion) Quaternion

pow exposes this operation as part of the public API.

fn (Quaternion) rotation_chordal_distance #

fn (q1 Quaternion) rotation_chordal_distance(q2 Quaternion) f64

rotation_chordal_distance exposes this operation as part of the public API.

fn (Quaternion) rotation_intrinsic_distance #

fn (q1 Quaternion) rotation_intrinsic_distance(q2 Quaternion) f64

rotation_intrinsic_distance exposes this operation as part of the public API.

fn (Quaternion) rotor_chordal_distance #

fn (q1 Quaternion) rotor_chordal_distance(q2 Quaternion) f64

rotor_chordal_distance exposes this operation as part of the public API.

fn (Quaternion) rotor_intrinsic_distance #

fn (q1 Quaternion) rotor_intrinsic_distance(q2 Quaternion) f64

rotor_intrinsic_distance exposes this operation as part of the public API.

fn (Quaternion) scalar_add #

fn (q Quaternion) scalar_add(s f64) Quaternion

scalar_add exposes this operation as part of the public API.

fn (Quaternion) scalar_divide #

fn (q Quaternion) scalar_divide(s f64) Quaternion

scalar_divide exposes this operation as part of the public API.

fn (Quaternion) scalar_multiply #

fn (q Quaternion) scalar_multiply(s f64) Quaternion

scalar_multiply exposes this operation as part of the public API.

fn (Quaternion) scalar_pow #

fn (q Quaternion) scalar_pow(s f64) Quaternion

scalar_pow exposes this operation as part of the public API.

fn (Quaternion) scalar_subtract #

fn (q Quaternion) scalar_subtract(s f64) Quaternion

scalar_subtract exposes this operation as part of the public API.

fn (Quaternion) slerp #

fn (start Quaternion) slerp(end Quaternion, tau f64) Quaternion

slerp exposes this operation as part of the public API.

fn (Quaternion) sqrt #

fn (q Quaternion) sqrt() Quaternion

sqrt exposes this operation as part of the public API.

fn (Quaternion) squad #

fn (qi Quaternion) squad(taui f64, ai Quaternion, bip1 Quaternion, qip1 Quaternion) Quaternion

squad exposes this operation as part of the public API.

fn (Quaternion) str #

fn (q Quaternion) str() string

To String method w + xi + yj + zk

fn (Quaternion) subtract #

fn (q1 Quaternion) subtract(q2 Quaternion) Quaternion

subtract exposes this operation as part of the public API.

fn (Quaternion) x_parity_antisymmetric_part #

fn (q Quaternion) x_parity_antisymmetric_part() Quaternion

x_parity_antisymmetric_part exposes this operation as part of the public API.

fn (Quaternion) x_parity_conjugate #

fn (q Quaternion) x_parity_conjugate() Quaternion

x_parity_conjugate exposes this operation as part of the public API.

fn (Quaternion) x_parity_symmetric_part #

fn (q Quaternion) x_parity_symmetric_part() Quaternion

x_parity_symmetric_part exposes this operation as part of the public API.

fn (Quaternion) y_parity_antisymmetric_part #

fn (q Quaternion) y_parity_antisymmetric_part() Quaternion

y_parity_antisymmetric_part exposes this operation as part of the public API.

fn (Quaternion) y_parity_conjugate #

fn (q Quaternion) y_parity_conjugate() Quaternion

y_parity_conjugate exposes this operation as part of the public API.

fn (Quaternion) y_parity_symmetric_part #

fn (q Quaternion) y_parity_symmetric_part() Quaternion

y_parity_symmetric_part exposes this operation as part of the public API.

fn (Quaternion) z_parity_antisymmetric_part #

fn (q Quaternion) z_parity_antisymmetric_part() Quaternion

z_parity_antisymmetric_part exposes this operation as part of the public API.

fn (Quaternion) z_parity_conjugate #

fn (q Quaternion) z_parity_conjugate() Quaternion

z_parity_conjugate exposes this operation as part of the public API.

fn (Quaternion) z_parity_symmetric_part #

fn (q Quaternion) z_parity_symmetric_part() Quaternion

z_parity_symmetric_part exposes this operation as part of the public API.