fixed32-math 0.0.19

Geometric types
Documentation
# Fixed32 Math

`fixed32_math` is a Rust crate that provides efficient 2D vector and rectangle operations
using fixed-point arithmetic. Designed for applications where fixed precision is preferred,
this crate is ideal for scenarios such as graphics programming,
game development, and embedded systems where deterministic results are crucial.

## Overview

### Vector

The `Vector` struct represents a 2D vector and supports various operations including addition,
subtraction, scaling, normalization, and more. The vector components use fixed-point arithmetic
via the `fixed32` crate.

#### Example Usage

```rust
use fixed32::Fp;
use fixed32_math::Vector;

// Create vectors using the `From` trait
let v1 = Vector::from((2, 3));  // Automatically converts (2, 3) to Vector with Fp::from
let v2 = Vector::from((1, 4));

// Vector operations
let sum = v1 + v2;
let dot_product = v1.dot(&v2);
let normalized = v1.normalize().unwrap();
let rotated = v1.rotate(Fp::from(90).to_radians());
```

### Rect

The `Rect` struct represents an axis-aligned rectangle defined by its lower left position and size.
It supports operations such as intersection, union, expansion, and contraction, as well as checking
if a point or another rectangle is contained within it.

#### Example Usage

```rust
use fixed32::Fp;
use fixed32_math::{Vector, Rect};

// Create Rect instances using `From` trait
let rect1 = Rect::from((0, 0, 10, 10));
let rect2 = Rect::from((5, 5, 15, 15));

// Rectangle operations
let intersection = rect1.intersection(&rect2);
let union = rect1.union(&rect2);
let contains_point = rect1.contains_point(&Vector::from((2, 2)));
let expanded_rect = rect1.expanded(Vector::from((2, 2)));
```

#### Using `From` Trait

The `From` trait is implemented for convenient creation of `Rect` and `Vector` from tuples of integers:

```rust
// Create a Rect from a tuple of integers
let rect = Rect::from((1, 2, 3, 4));

let rect2 = Rect::from((1.24, 2.34, 3.98, 4.01));

// Create a Vector from a tuple of integers
let vector = Vector::from((2, 2));
```

This feature allows you to create `Rect` and `Vector` instances in a more concise manner without needing to
manually convert integer and float values to fixed-point numbers (`fixed32::Fp`).

## Features

- **Fixed-Point Arithmetic**: Uses `fixed32::Fp` for all calculations, avoiding floating-point inaccuracies.
- **Comprehensive Operations**: Includes basic arithmetic operations, normalization, rotation, and more for vectors.
- **Rectangle Operations**: Includes area, perimeter, intersection, union, and containment checks for rectangles.

## Installation

Add the following to your `Cargo.toml`:

```toml
[dependencies]
fixed32_math = "0.0.16"
```

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.