From ed6a7d7e31e3fa3b23078d55e6a88917ee68c66e Mon Sep 17 00:00:00 2001 From: Keuin Date: Wed, 20 Apr 2022 22:12:17 +0800 Subject: Add vec3::parallel and its test. --- vec.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'vec.h') 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); -- cgit v1.2.3