#include "geom/aabb.hpp" #include "geom/plane.hpp" #include "geom/ray.hpp" #include "geom/iostream.hpp" #include "tap.hpp" using util::geom::ray2f; using util::geom::ray3f; //----------------------------------------------------------------------------- void test_intersect_plane (util::TAP::logger &tap) { // trivial case: origin ray facing z, plane at unit z facing -z. const util::geom::ray3f l { .origin = 0, .direction = {0, 0, 1} }; const util::geom::plane3f p (util::point3f {0,0,1}, util::vector3f {0,0,-1}); tap.expect_eq (distance (l, p), 1.f, "ray-plane intersect"); } //----------------------------------------------------------------------------- void test_intersect_aabb (util::TAP::logger &tap) { using util::geom::aabb2f; // trivial case: unit aabb at origin, ray from (0.5,-0.5) upwards const aabb2f box { { 0.f, 0.f }, { 1.f, 1.f } }; const ray2f forward { util::point2f { 0.5f, -0.5f }, util::vector2f { 0.0f, 1.0f } }; tap.expect_eq (distance (forward, box), 0.5f, "ray-aabb intersect"); const ray2f behind { util::point2f { 0.5f, 2.0f }, util::vector2f { 0.0f, 1.0f } }; tap.expect_eq (distance (behind, box), -1.f, "ray-aabb intersect behind"); } //----------------------------------------------------------------------------- int main (void) { util::TAP::logger tap; test_intersect_plane (tap); test_intersect_aabb (tap); return tap.status (); }