summaryrefslogtreecommitdiff
path: root/ray.h
diff options
context:
space:
mode:
Diffstat (limited to 'ray.h')
-rw-r--r--ray.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/ray.h b/ray.h
new file mode 100644
index 0000000..3281c6e
--- /dev/null
+++ b/ray.h
@@ -0,0 +1,36 @@
+//
+// Created by Keuin on 2022/4/11.
+//
+
+#ifndef RT_RAY_H
+#define RT_RAY_H
+
+#include "vec.h"
+
+// A ray is a half-line, starts from a 3d point, along the direction of a unit vector, to the infinity
+template<typename T>
+class ray3 {
+ const vec3<T> source_;
+ const vec3<T> direction_; // unit vector
+
+public:
+ ray3() = delete;
+ ray3(const vec3<T> &source, const vec3<T> &direction) : source_(source), direction_(direction.unit_vec()) {}
+
+ vec3<T> source() const {
+ return source_;
+ }
+
+ vec3<T> direction() const {
+ return direction_;
+ }
+
+ template<typename U>
+ vec3<T> at(U t) const {
+ return source_ + direction_ * t;
+ }
+};
+
+using ray3d = ray3<double>;
+
+#endif //RT_RAY_H