mirror of https://github.com/CGAL/cgal
Add a solve that 'returns' the denominator instead of making the division
This commit is contained in:
parent
9c28a543c1
commit
be39ec02fa
|
|
@ -29,13 +29,13 @@ void solve (const VectorC3<R> &v0,
|
||||||
const VectorC3<R> &v1,
|
const VectorC3<R> &v1,
|
||||||
const VectorC3<R> &v2,
|
const VectorC3<R> &v2,
|
||||||
const VectorC3<R> &d,
|
const VectorC3<R> &d,
|
||||||
typename R::FT &alpha, typename R::FT &beta, typename R::FT &gamma)
|
typename R::FT &alpha, typename R::FT &beta, typename R::FT &gamma, typename R::FT &denom)
|
||||||
{
|
{
|
||||||
CGAL::solve(v0.x(), v0.y(), v0.z(),
|
CGAL::solve(v0.x(), v0.y(), v0.z(),
|
||||||
v1.x(), v1.y(), v1.z(),
|
v1.x(), v1.y(), v1.z(),
|
||||||
v2.x(), v2.y(), v2.z(),
|
v2.x(), v2.y(), v2.z(),
|
||||||
d.x(), d.y(), d.z(),
|
d.x(), d.y(), d.z(),
|
||||||
alpha, beta, gamma);
|
alpha, beta, gamma, denom);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Cartesian_internal
|
} // namespace Cartesian_internal
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,37 @@ void solve (const FT &a1, const FT &a2, const FT &a3,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class FT>
|
||||||
|
void solve (const FT &a1, const FT &a2, const FT &a3,
|
||||||
|
const FT &b1, const FT &b2, const FT &b3,
|
||||||
|
const FT &c1, const FT &c2, const FT &c3,
|
||||||
|
const FT &d1, const FT &d2, const FT &d3,
|
||||||
|
FT &x, FT &y, FT &z, FT& denom)
|
||||||
|
{
|
||||||
|
FT ab23 = a3*b2 - a2*b3;
|
||||||
|
FT ab13 = a3*b1 - a1*b3;
|
||||||
|
FT ab12 = a2*b1 - a1*b2;
|
||||||
|
|
||||||
|
denom = ab23*c1 - ab13*c2 + ab12*c3;
|
||||||
|
|
||||||
|
FT cd23 = c3*d2 - c2*d3;
|
||||||
|
FT cd13 = c3*d1 - c1*d3;
|
||||||
|
FT cd12 = c2*d1 - c1*d2;
|
||||||
|
|
||||||
|
x = (b3*cd12 - b2*cd13 + b1*cd23);
|
||||||
|
|
||||||
|
y = (a2*cd13 - cd12*a3 - cd23*a1);
|
||||||
|
|
||||||
|
z = (ab23*d1 + ab12*d3 - ab13*d2);
|
||||||
|
if(denom < 0){
|
||||||
|
denom = -denom;
|
||||||
|
x = -x;
|
||||||
|
y = -y;
|
||||||
|
z = -z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// this is for a parabola c1, c2, c3 are equal to 1
|
// this is for a parabola c1, c2, c3 are equal to 1
|
||||||
template <class FT>
|
template <class FT>
|
||||||
void solve_quadratic (const FT &a1, const FT &a2, const FT &a3,
|
void solve_quadratic (const FT &a1, const FT &a2, const FT &a3,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue