summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-08-29 21:39:43 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2022-08-29 21:39:43 +0100
commitcf4d0285daa50cdd6c41925b8e1bed7f85bc79c9 (patch)
treee5aa6b0e5bee898e7855e3499eac459eb4346145 /lib
parentRay function a calculate how close it passes to a line defined by 2 points (diff)
downloadilt-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
Diffstat (limited to 'lib')
-rw-r--r--lib/ray.cpp11
-rw-r--r--lib/ray.hpp2
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;
};