Skip to content

Commit

Permalink
Add ray intersection benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
lbirkert committed Aug 13, 2023
1 parent 48bfb13 commit 24cf36a
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 0 deletions.
23 changes: 23 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions crates/kelocam-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ edition = "2021"
[dependencies]
nalgebra = "0.32.3"
stl = "0.2.1"

[dev-dependencies]
nalgebra = { version = "0.32.3", features = [ "rand" ] }
73 changes: 73 additions & 0 deletions crates/kelocam-core/benches/ray_intersection.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#![feature(test)]

extern crate test;
use kelocam_core::{Plane, Ray, Square, Triangle};
use nalgebra::{UnitVector3, Vector3};
use test::Bencher;

#[bench]
pub fn ray_triangle_intersection(bencher: &mut Bencher) {
bencher.iter(|| {
let triangle: Triangle;
{
let a = Vector3::new_random();
let b = Vector3::new_random();
let c = Vector3::new_random();
let normal = UnitVector3::new_normalize((a - b).cross(&(a - c)));
triangle = Triangle::new(a, b, c, normal);
}

let ray: Ray;
{
let origin = Vector3::new_random();
let normal = UnitVector3::new_normalize(Vector3::new_random());
ray = Ray::new(origin, normal);
}

ray.intersect(&triangle)
})
}

#[bench]
pub fn ray_plane_intersection(bencher: &mut Bencher) {
bencher.iter(|| {
let plane: Plane;
{
let origin = Vector3::new_random();
let normal = UnitVector3::new_normalize(Vector3::new_random());
plane = Plane::new(origin, normal);
}

let ray: Ray;
{
let origin = Vector3::new_random();
let normal = UnitVector3::new_normalize(Vector3::new_random());
ray = Ray::new(origin, normal);
}

ray.intersect(&plane)
})
}

#[bench]
pub fn ray_square_intersection(bencher: &mut Bencher) {
bencher.iter(|| {
let square: Square;
{
let a = Vector3::new_random();
let ab = Vector3::new_random();
let ac = Vector3::new_random();
let normal = UnitVector3::new_normalize(ab.cross(&ac));
square = Square::new(a, ab, ac, normal);
}

let ray: Ray;
{
let origin = Vector3::new_random();
let normal = UnitVector3::new_normalize(Vector3::new_random());
ray = Ray::new(origin, normal);
}

ray.intersect(&square)
})
}

0 comments on commit 24cf36a

Please sign in to comment.