From cf4d0285daa50cdd6c41925b8e1bed7f85bc79c9 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 29 Aug 2022 21:39:43 +0100 Subject: Ray function to test if it passes close to a sequence of edges defined by nodes along the path --- lib/ray.cpp | 11 +++++++++++ lib/ray.hpp | 2 ++ 2 files changed, 13 insertions(+) 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 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 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 +#include 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 positions, float distance) const; }; -- cgit v1.2.3