diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-08-29 21:39:43 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-08-29 21:39:43 +0100 |
commit | cf4d0285daa50cdd6c41925b8e1bed7f85bc79c9 (patch) | |
tree | e5aa6b0e5bee898e7855e3499eac459eb4346145 | |
parent | Ray function a calculate how close it passes to a line defined by 2 points (diff) | |
download | ilt-cf4d0285daa50cdd6c41925b8e1bed7f85bc79c9.tar.bz2 ilt-cf4d0285daa50cdd6c41925b8e1bed7f85bc79c9.tar.xz ilt-cf4d0285daa50cdd6c41925b8e1bed7f85bc79c9.zip |
Ray function to test if it passes close to a sequence of edges defined by nodes along the path
-rw-r--r-- | lib/ray.cpp | 11 | ||||
-rw-r--r-- | lib/ray.hpp | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/ray.cpp b/lib/ray.cpp index 1e30ae4..acbb807 100644 --- a/lib/ray.cpp +++ b/lib/ray.cpp @@ -1,4 +1,5 @@ #include "ray.hpp" +#include <algorithm> float Ray::distanceToLine(const glm::vec3 & p1, const glm::vec3 & e1) const @@ -16,3 +17,13 @@ Ray::distanceToLine(const glm::vec3 & p1, const glm::vec3 & e1) const } return glm::abs(glm::dot(n, p1 - p2)); } + +bool +Ray::passesCloseToEdges(const std::span<const glm::vec3> positions, float distance) const +{ + return std::adjacent_find(positions.begin(), positions.end(), + [this, distance](const glm::vec3 & a, const glm::vec3 & b) { + return distanceToLine(a, b) <= distance; + }) + != positions.end(); +} diff --git a/lib/ray.hpp b/lib/ray.hpp index bce4a30..8bef1c8 100644 --- a/lib/ray.hpp +++ b/lib/ray.hpp @@ -1,6 +1,7 @@ #pragma once #include <glm/glm.hpp> +#include <span> class Ray { public: @@ -10,4 +11,5 @@ public: glm::vec3 direction; float distanceToLine(const glm::vec3 & a, const glm::vec3 & b) const; + bool passesCloseToEdges(const std::span<const glm::vec3> positions, float distance) const; }; |