# RayX

`rayx` is a small Rust ray intersection library using **Baldwin-Weber's Fast Ray-Triangle Intersections by Coordinate Transformation** ([JCGT 2016](https://jcgt.org/published/0005/03/03/)).

<p>
    <a href="https://opensource.org/license/BSD-3-clause" style="text-decoration:none">
        <img src="https://img.shields.io/badge/License-BSD--3--Clause-brightgreen.svg" alt="License">
    </a>
    <a href="https://crates.io/crates/rayx" style="text-decoration:none">
        <img src="https://img.shields.io/crates/v/rayx" alt="Crate">
    </a>
    <a href="https://docs.rs/rayx" style="text-decoration:none">
        <img src="https://img.shields.io/badge/Docs-docs.rs-blue" alt="Documentation">
    </a>
</p>

## Usage

Install `rayx` with

```bash
cargo add rayx
```

Example:

```rust
use rayx::{Ray, Triangle};

let tri = Triangle::new([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]).unwrap();

let ray = Ray::new([0.25, 0.25, 1.0], [0.0, 0.0, -1.0]);
let hit = tri.intersect(ray, 0.0, 10.0).unwrap();

assert!((hit.t - 1.0).abs() < 1e-12);
assert!((hit.u - 0.25).abs() < 1e-12);
assert!((hit.v - 0.25).abs() < 1e-12);
```
