viva_math/vector
Vector operations for 3D space (PAD model).
Vec3 is the fundamental type for emotional state in VIVA:
- Pleasure (x): [-1, 1] - sadness ↔ joy
- Arousal (y): [-1, 1] - calm ↔ excitement
- Dominance (z): [-1, 1] - submission ↔ control
Types
Values
pub fn distance_squared(a: Vec3, b: Vec3) -> Float
Squared distance between two vectors (avoids sqrt).
pub fn div(v: Vec3, s: Float) -> Result(Vec3, Nil)
Divide vector by scalar. Returns Error if scalar is zero.
pub fn from_list(values: List(Float)) -> Result(Vec3, Nil)
Create a Vec3 from a list of 3 floats. Returns Error if list doesn’t have exactly 3 elements.
pub fn is_close(a: Vec3, b: Vec3, tolerance: Float) -> Bool
Check if two vectors are approximately equal.
pub fn length_squared(v: Vec3) -> Float
Squared length of a vector (avoids sqrt for comparisons).
pub fn normalize(v: Vec3) -> Vec3
Normalize a vector to unit length. Returns zero vector if input has zero length.
pub fn pad(
pleasure: Float,
arousal: Float,
dominance: Float,
) -> Vec3
Create a PAD vector (Pleasure, Arousal, Dominance).
pub fn splat(value: Float) -> Vec3
Create a vector with all components set to the same value.