From 4410597e441f38320f095f1b12d03861181f73ce Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 23 Sep 2020 22:23:37 +0300 Subject: [PATCH] Add geom::ray primitive --- libs/geom/include/psemek/geom/ray.hpp | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 libs/geom/include/psemek/geom/ray.hpp diff --git a/libs/geom/include/psemek/geom/ray.hpp b/libs/geom/include/psemek/geom/ray.hpp new file mode 100644 index 00000000..a26a743f --- /dev/null +++ b/libs/geom/include/psemek/geom/ray.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +namespace psemek::geom +{ + + template + struct ray + { + point origin; + vector direction; + + auto operator()(T const & t) const + { + return origin + t * direction; + } + + ray & operator += (vector const & v) + { + origin += v; + return *this; + } + + ray & operator -= (vector const & v) + { + origin -= v; + return *this; + } + }; + + template + ray(point, vector) -> ray; + + template + ray advance(ray r, T const & t) + { + r.origin = r(t); + return r; + } + + template + ray operator + (ray const & r, vector const & v) + { + auto res = r; + res += v; + return res; + } + + template + ray operator - (ray const & r, vector const & v) + { + auto res = r; + res -= v; + return res; + } + +}