Added point_in_triangle function.
This commit is contained in:
parent
9ac3c1a394
commit
b91d4411b5
@ -375,6 +375,29 @@ interpolate(T tau, const SGVec2<T>& v1, const SGVec2<T>& v2)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is the first point inside the triangle formed by the other three points?
|
||||||
|
// Helper function
|
||||||
|
template <typename T>
|
||||||
|
inline
|
||||||
|
T
|
||||||
|
pt_determine(const SGVec2<T>& pt1, const SGVec2<T>& pt2, const SGVec2<T>& pt3)
|
||||||
|
{
|
||||||
|
return (pt1.x()-pt3.x()) * (pt2.y()-pt3.y()) - (pt2.x() - pt3.x()) * (pt1.y() - pt3.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline
|
||||||
|
bool
|
||||||
|
point_in_triangle(const SGVec2<T>& testpt, const SGVec2<T>& pt1, const SGVec2<T>& pt2, const SGVec2<T>& pt3)
|
||||||
|
{
|
||||||
|
T d1 = pt_determine(testpt,pt1,pt2);
|
||||||
|
T d2 = pt_determine(testpt,pt2,pt3);
|
||||||
|
T d3 = pt_determine(testpt,pt3,pt1);
|
||||||
|
bool has_neg = (d1 < 0) || (d2 < 0) || (d3 < 0);
|
||||||
|
bool has_pos = (d1 > 0) || (d2 > 0) || (d3 > 0);
|
||||||
|
return !(has_neg && has_pos);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline
|
inline
|
||||||
|
Loading…
Reference in New Issue
Block a user