### 3 releases

Uses new Rust 2021

0.1.2 | Dec 22, 2021 |
---|---|

0.1.1 | Dec 20, 2021 |

0.1.0 | Dec 20, 2021 |

#**110** in #geometry

**Unlicense**

22KB

511 lines

# Description

ndmath is a Rust library for doing vector arithmetic on built-in types.

You can find usage information in the documentation;

###
`lib.rs`

:

This crate provides traits for working with builtin Rust types as geometric primitives.

# Usage

## Vectors

[

] provides basic vector math operations. [`VecN`

] adds some extra methods that only apply to real-valued vectors.`FloatingVecN`

These traits are implemented for all applicable array types.

### Example

`use` `ndmath``::``*``;`
`let` a `=` `[``2``,` `5``]``;`
`let` b `=` `[``3``,` `-``7``]``;`
`let` c `=` a`.``add``(`b`)``;`
`let` d `=` a`.``neg``(``)``;`
`assert_eq!``(`c`,` `[``5``,` `-``2``]``)``;`
`assert_eq!``(`d`,` `[``-``2``,` `-``5``]``)``;`
`let` a `=` `[``1``,` `2``,` `3``,` `4``,` `5``,` `6``,` `7``]``;`
`let` b `=` `[``9``,` `8``,` `7``,` `6``,` `5``,` `4``,` `3``]``;`
`let` c `=` a`.``add``(`b`)``;`
`let` d `=` a`.``sub``(`b`)``;`
`let` e `=` a`.``mul``(``2``)``;`
`assert_eq!``(`c`,` `[``10``;` `7``]``)``;`
`assert_eq!``(`d`,` `[``-``8``,` `-``6``,` `-``4``,` `-``2``,` `0``,` `2``,` `4``]``)``;`
`assert_eq!``(`e`,` `[``2``,` `4``,` `6``,` `8``,` `10``,` `12``,` `14``]``)``;`
`let` a `=` `[``3.``0``,` `4.``0``]``;`
`let` b `=` `[``3.``0``,` `6.``0``]``;`
`assert_eq!``(`a`.``mag``(``)``,` `5.``0``)``;`
`assert_eq!``(`a`.``dist``(`b`)``,` `2.``0``)``;`

## Axis-aligned bounding boxes

[

] provides operations for axis-aligned bounding boxes. They consist of an origin and a size.`Aabb`

This trait is implemented for all even-sized scalar arrays up to size 16 and all size 2 arrays of scalar arrays.

### Example

`use` `ndmath``::``*``;`
`let` aabb `=` `[``1``,` `0``,` `4``,` `5``]``;`
`assert!``(`aabb`.``contains``(``[``2``,` `2``]``)``)``;`
`assert!``(`aabb`.``contains``(``[``1``,` `0``]``)``)``;`
`assert!``(`aabb`.``contains``(``[``5``,` `5``]``)``)``;`
`assert!``(``!`aabb`.``contains``(``[``5``,` `6``]``)``)``;`

## Named dimension traits

There are traits to provide accessors for named dimensional values.

There are 4 traits for vector dimensions:

- [

]`XVec` - [

]`YVec` - [

]`ZVec` - [

]`WVec`

There are 3 traits for axis-aligned bounding box dimensions:

- [

]`XAabb` - [

]`YAabb` - [

]`ZAabb`

### Example

`use` `ndmath``::``*``;`
`let` a `=` `[``1``,` `2``]``;`
`let` b `=` `[``3``,` `4``,` `5``]``;`
`let` c `=` `[``6``,` `7``,` `8``,` `9``]``;`
`assert_eq!``(`a`.``x``(``)``,` `1``)``;`
`assert_eq!``(`a`.``y``(``)``,` `2``)``;`
`assert_eq!``(`b`.``z``(``)``,` `5``)``;`
`assert_eq!``(`c`.``w``(``)``,` `9``)``;`
`let` aabb `=` `[``[``0``,` `1``,` `2``]``,` `[``3``,` `4``,` `5``]``]``;`
`assert_eq!``(`aabb`.``left``(``)``,` `0``)``;`
`assert_eq!``(`aabb`.``top``(``)``,` `1``)``;`
`assert_eq!``(`aabb`.``back``(``)``,` `2``)``;`
`assert_eq!``(`aabb`.``right``(``)``,` `3``)``;`
`assert_eq!``(`aabb`.``bottom``(``)``,` `5``)``;`
`assert_eq!``(`aabb`.``front``(``)``,` `7``)``;`
`assert_eq!``(`aabb`.``width``(``)``,` `3``)``;`
`assert_eq!``(`aabb`.``height``(``)``,` `4``)``;`
`assert_eq!``(`aabb`.``depth``(``)``,` `5``)``;`