From 02dba07f9e86327163462d850ef4c5cc2ffe35c4 Mon Sep 17 00:00:00 2001 From: Pedro Machado Manhaes de Castro Date: Fri, 11 Aug 2006 15:50:03 +0000 Subject: [PATCH] Orientation issues + Has_on_3(Circular_arc_3, {Point_3, Curcular_arc_point_3}) --- .../internal_functions_on_circular_arc_3.h | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_functions_on_circular_arc_3.h b/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_functions_on_circular_arc_3.h index 0c141a5baa0..285a8ecf6a5 100644 --- a/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_functions_on_circular_arc_3.h +++ b/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_functions_on_circular_arc_3.h @@ -26,6 +26,70 @@ namespace CGAL { return c1.rep() == c2.rep(); } + template< class SK> + inline + Sign + compute_sign_of_cross_product(const typename SK::Root_of_2 &x1, + const typename SK::Root_of_2 &y1, + const typename SK::Root_of_2 &z1, + const typename SK::Root_of_2 &x2, + const typename SK::Root_of_2 &y2, + const typename SK::Root_of_2 &z2) { + typedef typename SK::Root_of_2 Root_of_2; + const Root_of_2 cx = y1 * z2 - z1 * y2; + const Root_of_2 cy = z1 * x2 - x1 * z2; + const Root_of_2 cz = x1 * y2 - y1 * x2; + if(!is_zero(cx)) return sign(cx); + if(!is_zero(cy)) return sign(cy); + return sign(cz); + } + + template< class SK> + inline + Sign + compute_sign_of_cross_product(const typename SK::FT &x1, + const typename SK::FT &y1, + const typename SK::FT &z1, + const typename SK::FT &x2, + const typename SK::FT &y2, + const typename SK::FT &z2) { + typedef typename SK::FT FT; + const FT cx = y1 * z2 - z1 * y2; + const FT cy = z1 * x2 - x1 * z2; + const FT cz = x1 * y2 - y1 * x2; + if(!is_zero(cx)) return sign(cx); + if(!is_zero(cy)) return sign(cy); + return sign(cz); + } + + template< class SK> + inline + Sign + compute_sign_of_cross_product(const typename SK::Circular_arc_point_3 &p1, + const typename SK::Circular_arc_point_3 &p2, + const typename SK::Point_3 &c) { + return compute_sign_of_cross_product(p1.x()-c.x(), + p1.y()-c.y(), + p1.z()-c.z(), + p2.x()-c.x(), + p2.y()-c.y(), + p2.z()-c.z()); + } + + template< class SK> + inline + Sign + compute_sign_of_cross_product(const typename SK::Point_3 &p1, + const typename SK::Point_3 &p2, + const typename SK::Point_3 &c) { + return compute_sign_of_cross_product(p1.x()-c.x(), + p1.y()-c.y(), + p1.z()-c.z(), + p2.x()-c.x(), + p2.y()-c.y(), + p2.z()-c.z()); + } + }//SphericalFunctors }//CGAL