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
- quaternion_camera_look - Camera yaw/pitch composition and lock-on blending
- quaternion_turret_tracking - Turret interpolation with angular error monitoring
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
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.
- 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