1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//! Low-dimensional vector algebra.
//!
//! ## Usage example
//!
//! ```
//! use vecmat::{prelude::*, Vector, Matrix};
//!
//! // Create vectors
//! let mut va = Vector::<f64, 3>::zero(); // filled with zeros
//! let vb = Vector::<f64, 3>::from([1.0, 2.0, 3.0]); // from values
//! println!("{}, {}", va, vb);
//!
//! // Vector access
//! va[1] = vb[0]; // read and write
//! va[0] += 3.0; // add-assign
//! *va.z_mut() = -vb.z(); // access by `xyz`
//! println!("{}", va);
//!
//! // Vector products
//! println!("{}", vb * 2.0); // scalar-by-vector
//! println!("{}", va * vb); // component-wise
//! println!("{}", va.dot(vb)); // dot
//! println!("{}", va.cross(vb)); // cross
//!
//! // Distance between two vectors
//! println!("{}", (va - vb).length());
//!
//! // Create matrices
//! let mut ma = Matrix::<f64, 3, 3>::one(); // identity 3x3 matrix
//! let mb = Matrix::<f64, 2, 3>::from([ // 3x2 matrix from values
//!     [1.0, 2.0, 0.0],
//!     [0.0,-1.0, 1.0],
//! ]);
//! println!("{},\n{}", ma, mb);
//!
//! // Access matrix components
//! ma[(1, 1)] = 2.0; // access by (i, j) indices
//! ma[(0, 2)] = -3.0;
//! ma[(2, 0)] = -1.0;
//! println!("{}", ma);
//!
//! // Transpose matrix
//! println!("{}", mb.transpose());
//!
//! // Matrix-vector product
//! println!("{}", mb.dot(vb));
//! println!("{}", va.dot(ma));
//!
//! // Matrix-matrix product
//! println!("{}", mb.dot(ma));
//!
//! // Outer product of vectors
//! println!("{}", va.outer(vb));
//!
//! // Determinant and inverse matrix
//! println!("{}", ma.det());
//! println!("{}", ma.inv());
//! ```

#![no_std]
#[cfg(feature = "std")]
extern crate std;

pub mod complex;
#[cfg(feature = "rand")]
pub mod distr;
pub mod matrix;
pub mod traits;
pub mod transform;
pub mod vector;

pub use complex::{Complex, Quaternion};
pub use matrix::Matrix;
pub use transform::Transform;
pub use vector::Vector;

pub mod prelude {
    pub use crate::{traits::*, Transform};
    pub use core::convert::TryFrom;
    pub use num_traits::{One, Zero};
}