A simple and flexible data structure for modelling points on an axis
No matter how a PointND is constructed, the second generic arg must be filled with the number of dimensions it needs to have
If a point of zero dimensions is constructed, it will panic
```rust use point_nd::PointND;
// Creates a 2D point from values of a given vector or array
let vec: Vec
// Creates a 3D point with all values set to 5
// When using this function, complete type annotation is necessary
let p: PointND
// ERROR: Can't create a point with zero dimensions // let p: PointND<_, 0> = PointND::fill(9);
// If you don't like writing PointND twice, use this syntax instead // Note: The second generic must still be specified let p = PointND::<_, 2>::from(&vec); ```
It is recommended to use the convenience getters if the dimensions of the point are from 1..=4
```rust use point_nd::PointND;
// A 2D point let arr: [i32; 2] = [0,1]; let p: PointND<_, 2> = PointND::from(&arr);
// As the point has 2 dimensions, we can access it's values with the x() and y() methods let x: &i32 = p.x(); let y = p.y();
assert_eq!(*y, arr[1]);
// If the point had 3 dimensions, we could use the above and: // let z = p.z();
// Or 4: // ... // let w = p.w(); ```
Otherwise indexing or the get()
method can be used
```rust use point_nd::PointND;
let arr: [i32; 2] = [0,1]; let p: PointND<_, 2> = PointND::from(&arr);
// Safely getting // Returns None if index is out of bounds let x: Option<&i32> = p.get(0); assert_eq!(*x.unwrap(), arr[0]);
// Unsafely indexing // If the index is out of bounds, this will panic // Note that unlike other accessing methods, this will return a copy of the value let y: i32 = p[1]; assert_eq!(y, arr[1]); ```
The number of dimensions can be retrieved using the dims()
method (short for dimensions)
```rust use point_nd::PointND;
let p: PointND
Any suggestions for the codebase, documentation, README (or anything) are more than welcome!