43#ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_AABB_2D_TRIANGLE_2D_H
44#define LASS_GUARDIAN_OF_INCLUSION_PRIM_AABB_2D_TRIANGLE_2D_H
63 result += triangle[2];
72template <
typename T,
typename MMP>
80 typedef typename Triangle2D<T>::TPoint TPoint;
81 typedef typename Triangle2D<T>::TVector TVector;
82 typedef typename Triangle2D<T>::TValue TValue;
83 size_t k1 = 1, k2 = 2;
84 for (
size_t k0 = 0; k0 < 3; ++k0)
86 const TPoint& tail = triangle[k0];
87 const TVector edge = triangle[k1] - tail;
88 const TVector min = box.
min() - tail;
89 const TVector max = box.
max() - tail;
94 perpDot(edge, TVector(min.x, max.y)),
95 perpDot(edge, TVector(max.x, min.y))
98 if (t[0] < 0 && t[1] < 0 && t[2] < 0 && t[3] < 0)
103 const TValue tMax = perpDot(edge, triangle[k2] - tail);
104 LASS_ASSERT(tMax >= 0);
105 if (t[0] > tMax && t[1] > tMax && t[2] > tMax && t[3] > tMax)
122template <
typename T,
typename MMP>
125 return intersects(triangle, box);
133template <
typename T,
typename MMP>
136 if (!box.collides(aabb(triangle)))
141 typedef typename Triangle2D<T>::TPoint TPoint;
142 typedef typename Triangle2D<T>::TVector TVector;
143 typedef typename Triangle2D<T>::TValue TValue;
144 size_t k1 = 1, k2 = 2;
145 for (
size_t k0 = 0; k0 < 3; ++k0)
147 const TPoint& tail = triangle[k0];
148 const TVector edge = triangle[k1] - tail;
149 const TVector min = box.min() - tail;
150 const TVector max = box.max() - tail;
152 const TValue t[4] = {
155 perpDot(edge, TVector(min.x, max.y)),
156 perpDot(edge, TVector(max.x, min.y))
159 if (t[0] <= 0 && t[1] <= 0 && t[2] <= 0 && t[3] <= 0)
164 const TValue tMax = perpDot(edge, triangle[k2] - tail);
165 LASS_ASSERT(tMax >= 0);
166 if (t[0] >= tMax && t[1] >= tMax && t[2] >= tMax && t[3] >= tMax)
183template <
typename T,
typename MMP>
186 return collides(triangle, box);
your momma's axis aligned bounding box.
const TPoint & min() const
return corner with smallest component values
bool intersects(const Aabb2D< T, MMP2 > &other) const
Check if two axis-aligned bounding boxes do intersect.
const TPoint & max() const
Return corner with largest component values.
A very simple 2D polygon :)
Aabb2D< T > aabb(const Triangle2D< T > &triangle)
determine axis aligned bounding box of a 2D triangle
set of geometrical primitives
Library for Assembled Shared Sources.