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:
- quaternion_rotation_3d - Visualize 3D rotations
- quaternion_interpolation_animation - Animated interpolation
- quaternion_julia_fractal - Quaternion Julia sets
- quaternion_orientation_tracking - Track orientations over time
- quaternion_rotation_composition - Compose multiple rotations
Tutorials
Comprehensive tutorials are available in the docs directory:
- Introduction - Quaternion basics
- Rotations - Rotating 3D points
- Interpolation - Smooth rotation animations
- Visualization - Visualizing quaternions
Integration Examples
Examples combining quaternions with other VSL modules:
- ml_quaternion_features - Quaternions as ML features
- fft_quaternion_signal - Quaternion signal processing
- noise_quaternion_fractal - Fractals with noise
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
fn from_euler_angles #
fn from_euler_angles(alpha f64, beta f64, gamma f64) Quaternion
fn from_spherical_coords #
fn from_spherical_coords(theta f64, phi f64) Quaternion
fn id #
fn id() Quaternion
fn quaternion #
fn quaternion(w f64, x f64, y f64, z f64) Quaternion
struct Quaternion #
struct Quaternion {
pub:
w f64
x f64
y f64
z f64
}
fn (Quaternion) * #
fn (q1 Quaternion) * (q2 Quaternion) Quaternion
fn (Quaternion) + #
fn (q1 Quaternion) + (q2 Quaternion) Quaternion
fn (Quaternion) - #
fn (q1 Quaternion) - (q2 Quaternion) Quaternion
fn (Quaternion) / #
fn (q1 Quaternion) / (q2 Quaternion) Quaternion
fn (Quaternion) abs #
fn (q Quaternion) abs() f64
fn (Quaternion) add #
fn (q1 Quaternion) add(q2 Quaternion) Quaternion
fn (Quaternion) angle #
fn (q Quaternion) angle() f64
fn (Quaternion) conjugate #
fn (q Quaternion) conjugate() Quaternion
fn (Quaternion) copy #
fn (q Quaternion) copy() Quaternion
fn (Quaternion) divide #
fn (q1 Quaternion) divide(q2 Quaternion) Quaternion
fn (Quaternion) equal #
fn (q1 Quaternion) equal(q2 Quaternion) bool
fn (Quaternion) exp #
fn (q Quaternion) exp() Quaternion
fn (Quaternion) inverse #
fn (q Quaternion) inverse() Quaternion
fn (Quaternion) is_finite #
fn (q Quaternion) is_finite() bool
fn (Quaternion) is_greater #
fn (q1 Quaternion) is_greater(q2 Quaternion) bool
fn (Quaternion) is_greaterequal #
fn (q1 Quaternion) is_greaterequal(q2 Quaternion) bool
fn (Quaternion) is_inf #
fn (q Quaternion) is_inf() bool
fn (Quaternion) is_less #
fn (q1 Quaternion) is_less(q2 Quaternion) bool
fn (Quaternion) is_lessequal #
fn (q1 Quaternion) is_lessequal(q2 Quaternion) bool
fn (Quaternion) is_nan #
fn (q Quaternion) is_nan() bool
fn (Quaternion) is_zero #
fn (q Quaternion) is_zero() bool
fn (Quaternion) lerp #
fn (start Quaternion) lerp(end Quaternion, tau f64) Quaternion
fn (Quaternion) log #
fn (q Quaternion) log() Quaternion
fn (Quaternion) multiply #
fn (q1 Quaternion) multiply(q2 Quaternion) Quaternion
fn (Quaternion) nlerp #
fn (start Quaternion) nlerp(end Quaternion, tau f64) Quaternion
fn (Quaternion) norm #
fn (q Quaternion) norm() f64
fn (Quaternion) normalized #
fn (q Quaternion) normalized() Quaternion
fn (Quaternion) opposite #
fn (q Quaternion) opposite() Quaternion
fn (Quaternion) parity_antisymmetric_part #
fn (q Quaternion) parity_antisymmetric_part() Quaternion
fn (Quaternion) parity_conjugate #
fn (q Quaternion) parity_conjugate() Quaternion
fn (Quaternion) parity_symmetric_part #
fn (q Quaternion) parity_symmetric_part() Quaternion
fn (Quaternion) pow #
fn (q Quaternion) pow(p Quaternion) Quaternion
fn (Quaternion) rotation_chordal_distance #
fn (q1 Quaternion) rotation_chordal_distance(q2 Quaternion) f64
fn (Quaternion) rotation_intrinsic_distance #
fn (q1 Quaternion) rotation_intrinsic_distance(q2 Quaternion) f64
fn (Quaternion) rotor_chordal_distance #
fn (q1 Quaternion) rotor_chordal_distance(q2 Quaternion) f64
fn (Quaternion) rotor_intrinsic_distance #
fn (q1 Quaternion) rotor_intrinsic_distance(q2 Quaternion) f64
fn (Quaternion) scalar_add #
fn (q Quaternion) scalar_add(s f64) Quaternion
fn (Quaternion) scalar_divide #
fn (q Quaternion) scalar_divide(s f64) Quaternion
fn (Quaternion) scalar_multiply #
fn (q Quaternion) scalar_multiply(s f64) Quaternion
fn (Quaternion) scalar_pow #
fn (q Quaternion) scalar_pow(s f64) Quaternion
fn (Quaternion) scalar_subtract #
fn (q Quaternion) scalar_subtract(s f64) Quaternion
fn (Quaternion) slerp #
fn (start Quaternion) slerp(end Quaternion, tau f64) Quaternion
fn (Quaternion) sqrt #
fn (q Quaternion) sqrt() Quaternion
fn (Quaternion) squad #
fn (qi Quaternion) squad(taui f64, ai Quaternion, bip1 Quaternion, qip1 Quaternion) Quaternion
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
fn (Quaternion) x_parity_antisymmetric_part #
fn (q Quaternion) x_parity_antisymmetric_part() Quaternion
fn (Quaternion) x_parity_conjugate #
fn (q Quaternion) x_parity_conjugate() Quaternion
fn (Quaternion) x_parity_symmetric_part #
fn (q Quaternion) x_parity_symmetric_part() Quaternion
fn (Quaternion) y_parity_antisymmetric_part #
fn (q Quaternion) y_parity_antisymmetric_part() Quaternion
fn (Quaternion) y_parity_conjugate #
fn (q Quaternion) y_parity_conjugate() Quaternion
fn (Quaternion) y_parity_symmetric_part #
fn (q Quaternion) y_parity_symmetric_part() Quaternion
fn (Quaternion) z_parity_antisymmetric_part #
fn (q Quaternion) z_parity_antisymmetric_part() Quaternion
fn (Quaternion) z_parity_conjugate #
fn (q Quaternion) z_parity_conjugate() Quaternion
fn (Quaternion) z_parity_symmetric_part #
fn (q Quaternion) z_parity_symmetric_part() Quaternion
- README
- fn from_axis_anglef3
- fn from_euler_angles
- fn from_spherical_coords
- fn id
- fn quaternion
- struct Quaternion
- fn *
- fn +
- fn -
- fn /
- fn abs
- fn add
- fn angle
- fn conjugate
- fn copy
- fn divide
- fn equal
- fn exp
- fn inverse
- fn is_finite
- fn is_greater
- fn is_greaterequal
- fn is_inf
- fn is_less
- fn is_lessequal
- fn is_nan
- fn is_zero
- fn lerp
- fn log
- fn multiply
- fn nlerp
- fn norm
- fn normalized
- fn opposite
- fn parity_antisymmetric_part
- fn parity_conjugate
- fn parity_symmetric_part
- fn pow
- fn rotation_chordal_distance
- fn rotation_intrinsic_distance
- fn rotor_chordal_distance
- fn rotor_intrinsic_distance
- fn scalar_add
- fn scalar_divide
- fn scalar_multiply
- fn scalar_pow
- fn scalar_subtract
- fn slerp
- fn sqrt
- fn squad
- fn str
- fn subtract
- fn x_parity_antisymmetric_part
- fn x_parity_conjugate
- fn x_parity_symmetric_part
- fn y_parity_antisymmetric_part
- fn y_parity_conjugate
- fn y_parity_symmetric_part
- fn z_parity_antisymmetric_part
- fn z_parity_conjugate
- fn z_parity_symmetric_part