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