# 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.