hexga_math 0.0.11-beta.42

Math related crate that define number and casting, and support array programming...
Documentation
🚧 **Warning: Experimental Crate!** 🚧

This crate is currently in **beta** and **experimental**.
It is subject to **breaking changes** in future releases.
Use it at your own risk, and keep in mind that the API may change in future versions.

# HexGa Math, a Math library that contains


## N Dimension stuff and Array Programming


This crate define N dimensional math stuff (2d, 3d, 4d, ... nd) like vector/point of any type (float, int, uint, or even user defined) :

- [`Vector`] fixed size array wrapper
- [`Rectangle`]
- [`Grid`]
- [`Matrix`]

The *same* common functions such as [`min`], [`max`], [`mix`],
[`abs`], and [`clamp`] work for
- primitive values(`u32`, `i32`, `f32`, `bool`, ...)
- and on composite types (`Array`, `Vector`, `Color`, `Rectangle`, `Matrix`, `Grid`, ...) that implement the [`Map`] / [`MapWith`] / [`MapIntern`] / [`MapInternWith`] traits.

Any external type implementing these traits automatically gains support for these common functions.

## Useful type like


- [`Angle`]
- [`Time`],

## Generic Casting trait

The crate also provide generic traits for casting with the same behavior as the [as keyword](https://practice.course.rs/type-conversions/as.html) :
- [`CastInto`], [`CastFrom`],

## Generic Remapping trait


Similar traits for casting remapping the range of an primitive to another primitive range also exist :
- [`CastRangeInto`], [`CastRangeFrom`]

## Quick start with the prelude


There are some quick typedef in the prelude :

- [`int`], [`uint`] and [`float`]  : The default primitive precision used in the typedef. (can be change with the feature flags)
- [`Vec2i`], [`Vec3i`], [`Vec4i`] for Vector of [`int`],
- [`Vec2`], [`Vec3`], [`Vec4`] for Vector of [`float`],
- [`Rect2`], [`Rect3`], [`Rect4`] for Rectangle of [`float`],
- [`Rect2i`], [`Rect3i`], [`Rect4i`] for Rectangle of [`int`] `P` for point,
- [`Mat2`], [`Mat3`], [`Mat4`] for Matrix of [`float`], and [`Mat2i`], [`Mat3i`], [`Mat4i`] use [`int`],
- [`Grid2`], [`Grid3`], [`Grid3`]  can only be indexed by `VecXi` by default.

## More advanced type


If you need more control about the precision, each type have another more generic base type :

- [`Grid`] type uses a `VecXi` for the indexing precision, but that can be changed by using with the [`hexga_math::grid::GridBase`] type.
- [`Angle`] and [`Time`] use a [`float`] precision that can be changed using [`AngleOf`] and [`TimeOf`]