Crates.io | simple-vectors |
lib.rs | simple-vectors |
version | 0.2.1 |
created_at | 2021-04-12 10:16:57.826084+00 |
updated_at | 2025-09-18 17:00:07.039749+00 |
description | Simple, dimension generic vector math |
homepage | |
repository | https://gitlab.com/porky11/simple-vectors |
max_upload_size | |
id | 382323 |
size | 16,454 |
A simple, dimension-generic vector mathematics library for Rust.
VectorSpace
, DotProduct
, and InnerSpace
from the vector-space
ecosystemparsable
featureAdd this to your Cargo.toml
:
[dependencies]
simple-vectors = "0.2"
use simple_vectors::Vector;
use vector_space::InnerSpace;
// Create vectors
let v = Vector::new([1.0, 2.0, 3.0]);
let w = Vector::new([4.0, 5.0, 6.0]);
// Basic arithmetic
let sum = v + w;
let scaled = v * 2.0;
// Vector operations (require `InnerSpace` trait)
let magnitude = v.magnitude();
let normalized = v.normalize();
use simple_vectors::Vector;
use vector_space::InnerSpace;
struct Particle {
position: Vector<f64, 2>,
velocity: Vector<f64, 2>,
acceleration: Vector<f64, 2>,
}
impl Particle {
fn update(&mut self, dt: f64) {
self.velocity += self.acceleration * dt;
self.position += self.velocity * dt;
self.acceleration = Vector::zero();
}
}
use simple_vectors::Vector;
use vector_space::InnerSpace;
fn angle_between<T: num_traits::real::Real, const N: usize>(
v: Vector<T, N>,
w: Vector<T, N>,
) -> T {
(v.dot(w) / (v.magnitude() * w.magnitude())).acos()
}
let v = Vector::new([1.0, 0.0]);
let w = Vector::new([0.0, 1.0]);
let angle = angle_between(v, w);
This crate implements standard vector space traits, making it compatible with other libraries:
use simple_vectors::Vector;
use vector_space::{distance, InnerSpace};
let point_a = Vector::new([1.0, 2.0]);
let point_b = Vector::new([4.0, 6.0]);
// Calculate distance between points
let dist = distance(point_a, point_b); // 5.0
// Or manually
let diff = point_b - point_a;
let manual_dist = diff.magnitude(); // Also 5.0