inline calls to circumcenterC3() in the functors to avoid

dummy default ctors.
This commit is contained in:
Sylvain Pion
2006-08-07 11:54:41 +00:00
parent af3779804d
commit f9c1159ed4
2 changed files with 75 additions and 105 deletions
@@ -1775,14 +1775,51 @@ namespace CartesianKernelFunctors {
}
Point_3
operator()(const Point_3& p, const Point_3& q, const Point_3& r) const
operator()(const Point_3& p, const Point_3& q, const Point_3& s) const
{
typename K::Construct_point_3 construct_point_3;
FT x, y, z;
circumcenterC3(p.x(), p.y(), p.z(),
q.x(), q.y(), q.z(),
r.x(), r.y(), r.z(),
x, y, z);
// Translate s to origin to simplify the expression.
FT psx = p.x()-s.x();
FT psy = p.y()-s.y();
FT psz = p.z()-s.z();
FT ps2 = CGAL_NTS square(psx) + CGAL_NTS square(psy) + CGAL_NTS square(psz);
FT qsx = q.x()-s.x();
FT qsy = q.y()-s.y();
FT qsz = q.z()-s.z();
FT qs2 = CGAL_NTS square(qsx) + CGAL_NTS square(qsy) + CGAL_NTS square(qsz);
FT rsx = psy*qsz-psz*qsy;
FT rsy = psz*qsx-psx*qsz;
FT rsz = psx*qsy-psy*qsx;
// The following determinants can be developped and simplified.
//
// FT num_x = det3x3_by_formula(psy,psz,ps2,
// qsy,qsz,qs2,
// rsy,rsz,0);
// FT num_y = det3x3_by_formula(psx,psz,ps2,
// qsx,qsz,qs2,
// rsx,rsz,0);
// FT num_z = det3x3_by_formula(psx,psy,ps2,
// qsx,qsy,qs2,
// rsx,rsy,0);
FT num_x = ps2 * det2x2_by_formula(qsy,qsz,rsy,rsz)
- qs2 * det2x2_by_formula(psy,psz,rsy,rsz);
FT num_y = ps2 * det2x2_by_formula(qsx,qsz,rsx,rsz)
- qs2 * det2x2_by_formula(psx,psz,rsx,rsz);
FT num_z = ps2 * det2x2_by_formula(qsx,qsy,rsx,rsy)
- qs2 * det2x2_by_formula(psx,psy,rsx,rsy);
FT den = det3x3_by_formula(psx,psy,psz,
qsx,qsy,qsz,
rsx,rsy,rsz);
CGAL_kernel_assertion( den != 0 );
FT inv = 1 / (2 * den);
FT x = s.x() + num_x*inv;
FT y = s.y() - num_y*inv;
FT z = s.z() + num_z*inv;
return construct_point_3(x, y, z);
}
@@ -1797,12 +1834,38 @@ namespace CartesianKernelFunctors {
const Point_3& r, const Point_3& s) const
{
typename K::Construct_point_3 construct_point_3;
FT x, y, z;
circumcenterC3(p.x(), p.y(), p.z(),
q.x(), q.y(), q.z(),
r.x(), r.y(), r.z(),
s.x(), s.y(), s.z(),
x, y, z);
// Translate p to origin to simplify the expression.
FT qpx = q.x()-p.x();
FT qpy = q.y()-p.y();
FT qpz = q.z()-p.z();
FT qp2 = CGAL_NTS square(qpx) + CGAL_NTS square(qpy) + CGAL_NTS square(qpz);
FT rpx = r.x()-p.x();
FT rpy = r.y()-p.y();
FT rpz = r.z()-p.z();
FT rp2 = CGAL_NTS square(rpx) + CGAL_NTS square(rpy) + CGAL_NTS square(rpz);
FT spx = s.x()-p.x();
FT spy = s.y()-p.y();
FT spz = s.z()-p.z();
FT sp2 = CGAL_NTS square(spx) + CGAL_NTS square(spy) + CGAL_NTS square(spz);
FT num_x = det3x3_by_formula(qpy,qpz,qp2,
rpy,rpz,rp2,
spy,spz,sp2);
FT num_y = det3x3_by_formula(qpx,qpz,qp2,
rpx,rpz,rp2,
spx,spz,sp2);
FT num_z = det3x3_by_formula(qpx,qpy,qp2,
rpx,rpy,rp2,
spx,spy,sp2);
FT den = det3x3_by_formula(qpx,qpy,qpz,
rpx,rpy,rpz,
spx,spy,spz);
CGAL_kernel_assertion( ! CGAL_NTS is_zero(den) );
FT inv = 1 / (2 * den);
FT x = p.x() + num_x*inv;
FT y = p.y() - num_y*inv;
FT z = p.z() + num_z*inv;
return construct_point_3(x, y, z);
}