mirror of https://github.com/CGAL/cgal
Misc minor changes (don't build FT from doubles & fix some comments)
This commit is contained in:
parent
b688291c9f
commit
f2b1124095
|
|
@ -34,8 +34,8 @@ namespace Surface_mesh_parameterization {
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
// -> ->
|
// -> ->
|
||||||
// Return cotangent of (P,Q,R) corner (i.e. cotan of QP, QR angle).
|
// Returns the cotangent of the corner (P,Q,R) (i.e. the cotan of the angle (QP, QR) ).
|
||||||
template<typename K>
|
template<typename K>
|
||||||
typename K::FT cotangent(const typename K::Point_3& P,
|
typename K::FT cotangent(const typename K::Point_3& P,
|
||||||
const typename K::Point_3& Q,
|
const typename K::Point_3& Q,
|
||||||
|
|
@ -46,18 +46,17 @@ typename K::FT cotangent(const typename K::Point_3& P,
|
||||||
|
|
||||||
Vector_3 u = P - Q;
|
Vector_3 u = P - Q;
|
||||||
Vector_3 v = R - Q;
|
Vector_3 v = R - Q;
|
||||||
// (u . v) / ((u x v).len)
|
NT dot = (u * v);
|
||||||
NT dot = (u*v);
|
Vector_3 cross_vector = CGAL::cross_product(u, v);
|
||||||
Vector_3 cross_vector = CGAL::cross_product(u,v);
|
|
||||||
NT cross_norm = CGAL::sqrt(cross_vector * cross_vector);
|
NT cross_norm = CGAL::sqrt(cross_vector * cross_vector);
|
||||||
if(cross_norm != 0.0)
|
if(cross_norm != NT(0))
|
||||||
return (dot / cross_norm);
|
return (dot / cross_norm);
|
||||||
else
|
else
|
||||||
return 0.0; // undefined
|
return 0; // undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
// -> ->
|
// -> ->
|
||||||
// Return tangent of (P,Q,R) corner (i.e. tangent of QP, QR angle).
|
// Returns the tangent of the corner (P,Q,R) (i.e. the tangent of angle (QP, QR) ).
|
||||||
template<typename K>
|
template<typename K>
|
||||||
typename K::FT tangent(const typename K::Point_3& P,
|
typename K::FT tangent(const typename K::Point_3& P,
|
||||||
const typename K::Point_3& Q,
|
const typename K::Point_3& Q,
|
||||||
|
|
@ -68,17 +67,16 @@ typename K::FT tangent(const typename K::Point_3& P,
|
||||||
|
|
||||||
Vector_3 u = P - Q;
|
Vector_3 u = P - Q;
|
||||||
Vector_3 v = R - Q;
|
Vector_3 v = R - Q;
|
||||||
// (u . v) / ((u x v).len)
|
|
||||||
NT dot = (u * v);
|
NT dot = (u * v);
|
||||||
Vector_3 cross_vector = CGAL::cross_product(u, v);
|
Vector_3 cross_vector = CGAL::cross_product(u, v);
|
||||||
NT cross_norm = CGAL::sqrt(cross_vector * cross_vector);
|
NT cross_norm = CGAL::sqrt(cross_vector * cross_vector);
|
||||||
if(dot != 0.0)
|
if(dot != NT(0))
|
||||||
return (cross_norm / dot);
|
return (cross_norm / dot);
|
||||||
else
|
else
|
||||||
return 0.0; // undefined
|
return 0; // undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix sine to be within [-1;1].
|
// Fixes the sine to be within [-1;1].
|
||||||
template<typename K>
|
template<typename K>
|
||||||
typename K::FT fix_sine(typename K::FT sine)
|
typename K::FT fix_sine(typename K::FT sine)
|
||||||
{
|
{
|
||||||
|
|
@ -90,8 +88,8 @@ typename K::FT fix_sine(typename K::FT sine)
|
||||||
return sine;
|
return sine;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -> ->
|
// -> ->
|
||||||
// Return angle (in radians) of of (P,Q,R) corner (i.e. QP, QR angle).
|
// Returns the angle (in radians) of the corner (P,Q,R) (i.e. the angle (QP, QR) ).
|
||||||
template<typename K>
|
template<typename K>
|
||||||
typename K::FT compute_angle_rad(const typename K::Point_3& P,
|
typename K::FT compute_angle_rad(const typename K::Point_3& P,
|
||||||
const typename K::Point_3& Q,
|
const typename K::Point_3& Q,
|
||||||
|
|
@ -103,10 +101,9 @@ typename K::FT compute_angle_rad(const typename K::Point_3& P,
|
||||||
Vector_3 u = P - Q;
|
Vector_3 u = P - Q;
|
||||||
Vector_3 v = R - Q;
|
Vector_3 v = R - Q;
|
||||||
|
|
||||||
// check
|
|
||||||
NT product = CGAL::sqrt(u * u) * CGAL::sqrt(v * v);
|
NT product = CGAL::sqrt(u * u) * CGAL::sqrt(v * v);
|
||||||
if(product == 0)
|
if(product == NT(0))
|
||||||
return 0.0;
|
return 0;
|
||||||
|
|
||||||
// cosine
|
// cosine
|
||||||
NT dot = (u * v);
|
NT dot = (u * v);
|
||||||
|
|
@ -116,7 +113,7 @@ typename K::FT compute_angle_rad(const typename K::Point_3& P,
|
||||||
Vector_3 w = CGAL::cross_product(u, v);
|
Vector_3 w = CGAL::cross_product(u, v);
|
||||||
NT abs_sine = CGAL::sqrt(w * w) / product;
|
NT abs_sine = CGAL::sqrt(w * w) / product;
|
||||||
|
|
||||||
if(cosine >= 0)
|
if(cosine >= NT(0))
|
||||||
return std::asin(fix_sine<K>(abs_sine));
|
return std::asin(fix_sine<K>(abs_sine));
|
||||||
else
|
else
|
||||||
return CGAL_PI - std::asin(fix_sine<K>(abs_sine));
|
return CGAL_PI - std::asin(fix_sine<K>(abs_sine));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue