Back to Intersection between shapes
#ifndef PASTELGEOMETRY_INTERSECT_ALIGNEDBOX_SEGMENT_HPP
#define PASTELGEOMETRY_INTERSECT_ALIGNEDBOX_SEGMENT_HPP
#include "pastel/geometry/intersect/intersect_alignedbox_segment.h"
#include "pastel/geometry/intersect/intersect_line_alignedbox.h"
#include "pastel/sys/vector/vector_tools.h"
namespace Pastel
{
template <typename Real, integer N>
bool intersect(
const AlignedBox<Real, N>& alignedBox,
const Segment<Real, N>& segment,
Segment<Real, N>& result)
{
Line<Real, N> line(
segment.start(),
segment.end() - segment.start());
Vector<Real, 2> tRange;
if (!intersect(line, alignedBox, tRange))
{
return false;
}
if (tRange[0] > 1 ||
tRange[1] < 0)
{
return false;
}
Real tMin = std::max(tRange[0], Real(0));
Real tMax = std::min(tRange[1], Real(1));
result.set(
segment.at(tMin), segment.at(tMax));
return true;
}
}
#endif