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; + } + +}