Avoid division for bounded side test

This commit is contained in:
Andreas Fabri 2021-03-18 14:14:42 +01:00
parent 06f625a98e
commit ae945cd329
1 changed files with 7 additions and 7 deletions

View File

@ -253,18 +253,18 @@ namespace CartesianKernelFunctors {
result_type result_type
operator()( const Tetrahedron_3& t, const Point_3& p) const operator()( const Tetrahedron_3& t, const Point_3& p) const
{ {
FT alpha, beta, gamma; FT alpha, beta, gamma, denom;
Cartesian_internal::solve(t.vertex(1)-t.vertex(0), Cartesian_internal::solve(t.vertex(1)-t.vertex(0),
t.vertex(2)-t.vertex(0), t.vertex(2)-t.vertex(0),
t.vertex(3)-t.vertex(0), t.vertex(3)-t.vertex(0),
p - t.vertex(0), alpha, beta, gamma); p - t.vertex(0), alpha, beta, gamma, denom);
if ( (alpha < 0) || (beta < 0) || (gamma < 0) if ( (alpha < 0) || (beta < 0) || (gamma < 0)
|| (alpha + beta + gamma > 1) ) || (alpha + beta + gamma > denom) )
return ON_UNBOUNDED_SIDE; return ON_UNBOUNDED_SIDE;
if ( (alpha == 0) || (beta == 0) || (gamma == 0) if ( (alpha == 0) || (beta == 0) || (gamma == 0)
|| (alpha+beta+gamma == 1) ) || (alpha+beta+gamma == denom) )
return ON_BOUNDARY; return ON_BOUNDARY;
return ON_BOUNDED_SIDE; return ON_BOUNDED_SIDE;
@ -3860,10 +3860,10 @@ namespace CartesianKernelFunctors {
v1 = t.vertex(1)-o, v1 = t.vertex(1)-o,
v2 = t.vertex(2)-o; v2 = t.vertex(2)-o;
FT alpha, beta, gamma; FT alpha, beta, gamma, denum;
Cartesian_internal::solve(v0, v1, v2, p-o, alpha, beta, gamma); Cartesian_internal::solve(v0, v1, v2, p-o, alpha, beta, gamma, denum);
return (alpha >= FT(0)) && (beta >= FT(0)) && (gamma >= FT(0)) return (alpha >= FT(0)) && (beta >= FT(0)) && (gamma >= FT(0))
&& ((alpha+beta+gamma == FT(1))); && ((alpha+beta+gamma == denum));
} }
result_type result_type