summaryrefslogtreecommitdiff
path: root/vec.h
diff options
context:
space:
mode:
Diffstat (limited to 'vec.h')
-rw-r--r--vec.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/vec.h b/vec.h
index 84cbaa3..11b9bd3 100644
--- a/vec.h
+++ b/vec.h
@@ -109,6 +109,15 @@ struct vec3 {
return std::isfinite(x) && std::isfinite(y) && std::isfinite(z);
}
+ // Determine if this vector is parallel with another one.
+ bool parallel(const vec3 &other) const {
+ const auto dt = dot(other);
+ const auto dot2 = dt * dt;
+ const auto sqlp = mod2() * other.mod2(); // squared length product
+ const auto d = dot2 - sqlp;
+ return d > -1e-6 && d < 1e-6;
+ }
+
// Get the reflected vector. Current vector is the normal vector (length should be 1), v is the incoming vector.
vec3 reflect(const vec3 &v) const {
assert(fabs(mod2() - 1.0) < 1e-8);