| Crates.io | tma_engine |
| lib.rs | tma_engine |
| version | 0.2.0 |
| created_at | 2025-08-15 17:55:41.114849+00 |
| updated_at | 2025-11-15 17:34:48.436312+00 |
| description | A lightweight crate for defining, composing, and applying 2D affine transformations. |
| homepage | |
| repository | https://github.com/Neil-Crago/tma_engine |
| max_upload_size | |
| id | 1797235 |
| size | 55,835 |
A lightweight and ergonomic Rust crate for defining, composing, and applying 2D affine transformations.
TMA stands for Transformation, Matrix, Affine. This engine provides the core algebraic structures for working with Iterated Function Systems (IFS), which are the mathematical foundation for generating a wide variety of fractals, including the Sierpinski Gasket and Barnsley's Fern.
TMA struct cleanly represents the transformation T(v) = A*v + c.* operator to naturally compose transformations (TMA * TMA) or apply them to points (TMA * Point).probability field in the TMA struct, essential for algorithms like the Chaos Game.Add this crate to your Cargo.toml:
[dependencies]
tma_engine = "0.1.8" # Or the latest version
use tma_engine::{TMA, Point};
fn main() {
let scale_half = TMA::from_scale(0.5);
let rotate_90_deg = TMA::from_rotation(std::f64::consts::FRAC_PI_2);
let translate_up = TMA::from_translation(0.0, 1.0);
// Compose transformations using the multiplication operator.
// The right-most operation is applied first.
let composite_tma = translate_up * rotate_90_deg * scale_half;
let my_point: Point = [2.0, 0.0];
// Apply the composed transformation to a point.
let new_point = composite_tma * my_point;
println!("Transformed point: {:?}", new_point);
assert_eq!(new_point[0], 0.0);
assert_eq!(new_point[1], 2.0);
}
This crate is a foundational component of the FractalAlgebra workspace. It provides the geometric building blocks for generating and exploring fractals and other systems based on affine transformations
This crate is part of a collection of crates by the same author: These include:-