⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function_objects_polynomial_circular.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
📖 第 1 页 / 共 3 页
字号:
// Copyright (c) 2003-2006  INRIA Sophia-Antipolis (France).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Circular_kernel_2/include/CGAL/Circular_kernel_2/function_objects_polynomial_circular.h $// $Id: function_objects_polynomial_circular.h 39828 2007-08-12 16:21:14Z afabri $//// Author(s)     : Monique Teillaud, Sylvain Pion// Partially supported by the IST Programme of the EU as a Shared-cost// RTD (FET Open) Project under Contract No  IST-2000-26473 // (ECG - Effective Computational Geometry for Curves and Surfaces) // and a STREP (FET Open) Project under Contract No  IST-006413 // (ACS -- Algorithms for Complex Shapes)#ifndef CGAL_CIRCULAR_KERNEL_FUNCTION_OBJECTS_POLYNOMIAL_CIRCULAR_H#define CGAL_CIRCULAR_KERNEL_FUNCTION_OBJECTS_POLYNOMIAL_CIRCULAR_H#include <CGAL/Circular_kernel_2/internal_functions_on_circular_arc_2.h>#include <CGAL/Circular_kernel_2/internal_functions_on_line_arc_2.h>#include <CGAL/Bbox_2.h>#include <CGAL/Object.h>namespace CGAL {namespace CircularFunctors {  template < class CK >  class Compare_x_2#ifndef CGAL_CFG_MATCHING_BUG_6    : public CK::Linear_kernel::Compare_x_2#endif  {    typedef typename CK::Circular_arc_point_2 Circular_arc_point_2;    typedef typename CK::Point_2 Point_2;  public:    typedef CGAL::Comparison_result result_type;    typedef Arity_tag<2>            Arity;#ifndef CGAL_CFG_MATCHING_BUG_6    using CK::Linear_kernel::Compare_x_2::operator();#else    result_type    operator() (const Point_2 &p0,                const Point_2 &p1) const    {      typedef typename CK::Linear_kernel LK;      typedef typename LK::Compare_x_2 LK_Compare_x_2;      return LK_Compare_x_2()(p0, p1);    }#endif    result_type    operator() (const Circular_arc_point_2 &p0,                const Circular_arc_point_2 &p1) const    { return CircularFunctors::compare_x<CK>(p0, p1);}  };  template < class CK >  class Compare_y_2#ifndef CGAL_CFG_MATCHING_BUG_6    : public CK::Linear_kernel::Compare_y_2#endif  {    typedef typename CK::Circular_arc_point_2 Circular_arc_point_2;    typedef typename CK::Point_2 Point_2;  public:    typedef CGAL::Comparison_result result_type;    typedef Arity_tag<2>            Arity;#ifndef CGAL_CFG_MATCHING_BUG_6    using CK::Linear_kernel::Compare_y_2::operator();#else   result_type    operator() (const Point_2 &p0,                const Point_2 &p1) const    {      typedef typename CK::Linear_kernel LK;      typedef typename LK::Compare_y_2 LK_Compare_y_2;      return LK_Compare_y_2()(p0, p1);    }#endif    result_type    operator() (const Circular_arc_point_2 &p0,                const Circular_arc_point_2 &p1) const    {return CircularFunctors::compare_y<CK>(p0, p1);}  };  template < class CK >  class Compare_xy_2#ifndef CGAL_CFG_MATCHING_BUG_6    : public CK::Linear_kernel::Compare_xy_2#endif  {    typedef typename CK::Circular_arc_point_2 Circular_arc_point_2;    typedef typename CK::Point_2 Point_2;      public:    typedef CGAL::Comparison_result result_type;    typedef Arity_tag<2>            Arity;#ifndef CGAL_CFG_MATCHING_BUG_6    using CK::Linear_kernel::Compare_xy_2::operator();#else    result_type    operator() (const Point_2 &p0,                const Point_2 &p1) const    {      typedef typename CK::Linear_kernel LK;      typedef typename LK::Compare_xy_2 LK_Compare_xy_2;      return LK_Compare_xy_2()(p0, p1);    }#endif    result_type    operator() (const Circular_arc_point_2 &p0,                const Circular_arc_point_2 &p1) const    { return CircularFunctors::compare_xy<CK>(p0, p1);}  };  template < class CK >  class In_x_range_2  {    typedef typename CK::Circular_arc_2          Circular_arc_2;    typedef typename CK::Circular_arc_point_2 Circular_arc_point_2;    typedef typename CK::Line_arc_2              Line_arc_2;  public:    typedef bool         result_type;    typedef Arity_tag<2> Arity;        result_type    operator()(const Circular_arc_2 &a, const Circular_arc_point_2 &p) const    { return CircularFunctors::point_in_x_range<CK>(a, p); }    result_type    operator()(const Line_arc_2 &a, const Circular_arc_point_2 &p) const    { return CircularFunctors::point_in_x_range<CK>(a, p); }      };    template < class CK >  class Has_on_2#ifndef CGAL_CFG_MATCHING_BUG_6    : public CK::Linear_kernel::Has_on_2#endif  {    typedef typename CK::Circular_arc_2          Circular_arc_2;    typedef typename CK::Circular_arc_point_2    Circular_arc_point_2;    typedef typename CK::Line_arc_2              Line_arc_2;    typedef typename CK::Circle_2                Circle_2;    typedef typename CK::Line_2                  Line_2;    typedef typename CK::Ray_2                   Ray_2;    typedef typename CK::Segment_2               Segment_2;    typedef typename CK::Point_2                 Point_2;  public:    typedef bool         result_type;    typedef Arity_tag<2> Arity;#ifndef CGAL_CFG_MATCHING_BUG_6    using CK::Linear_kernel::Has_on_2::operator();#else     result_type    operator()( const Line_2& l, const Point_2& p) const    {      typedef typename CK::Linear_kernel LK;      typedef typename LK::Has_on_2 LK_Has_on_2;      return LK_Has_on_2()(l,p);     }    result_type    operator()( const Ray_2& r, const Point_2& p) const    {      typedef typename CK::Linear_kernel LK;      typedef typename LK::Has_on_2 LK_Has_on_2;      return LK_Has_on_2()(r,p); }    result_type    operator()( const Segment_2& s, const Point_2& p) const    {      typedef typename CK::Linear_kernel LK;      typedef typename LK::Has_on_2 LK_Has_on_2;      return LK_Has_on_2()(s,p);     }#endif    result_type    operator()(const Circle_2 &a, const Circular_arc_point_2 &p) const    { return has_on<CK>(a, p); }        result_type    operator()(const Line_2 &a, const Circular_arc_point_2 &p) const    { return has_on<CK>(a, p); }        result_type    operator()(const Circular_arc_2 &a, const Circular_arc_point_2 &p) const    { return has_on<CK>(a, p); }    result_type    operator()(const Line_arc_2 &a, const Circular_arc_point_2 &p) const    { return has_on<CK>(a, p); }      };      template < class CK >  class Compare_y_to_right_2  {    typedef typename CK::Circular_arc_2           Circular_arc_2;    typedef typename CK::Circular_arc_point_2  Circular_arc_point_2;    typedef typename CK::Line_arc_2               Line_arc_2;  public:    typedef CGAL::Comparison_result result_type;    typedef Arity_tag<3>            Arity;        result_type    operator()(const Circular_arc_2 &a1,               const Circular_arc_2 &a2,               const Circular_arc_point_2 &p) const    { return compare_y_to_right<CK>(a1, a2, p); }    result_type    operator()(const Line_arc_2 &a1,               const Line_arc_2 &a2,               const Circular_arc_point_2 &p) const    { return compare_y_to_right<CK>(a1, a2, p); }    result_type    operator()(const Line_arc_2 &a1,               const Circular_arc_2 &a2,               const Circular_arc_point_2 &p) const    { return compare_y_to_right<CK>(a1, a2, p); }    result_type    operator()(const Circular_arc_2 &a1,               const Line_arc_2 &a2,               const Circular_arc_point_2 &p) const    { if (compare_y_to_right<CK>(a2, a1, p) == CGAL::LARGER)	return CGAL::SMALLER;      return CGAL::LARGER;    }    };   template < class CK >  class Compare_y_to_left_2  {    typedef typename CK::Circular_arc_2           Circular_arc_2;    typedef typename CK::Circular_arc_point_2  Circular_arc_point_2;    typedef typename CK::Line_arc_2               Line_arc_2;  public:    typedef CGAL::Comparison_result result_type;    typedef Arity_tag<3>            Arity;        result_type    operator()(const Circular_arc_2 &a1,               const Circular_arc_2 &a2,               const Circular_arc_point_2 &p) const    { return compare_y_to_left<CK>(a1, a2, p); }    result_type    operator()(const Line_arc_2 &a1,               const Line_arc_2 &a2,               const Circular_arc_point_2 &p) const    { return compare_y_to_left<CK>(a1, a2, p); }    result_type    operator()(const Line_arc_2 &a1,               const Circular_arc_2 &a2,               const Circular_arc_point_2 &p) const    { return compare_y_to_left<CK>(a1, a2, p); }    result_type    operator()(const Circular_arc_2 &a1,               const Line_arc_2 &a2,               const Circular_arc_point_2 &p) const    { if (compare_y_to_left<CK>(a2, a1, p) == CGAL::LARGER)	return CGAL::SMALLER;      return CGAL::LARGER;    }    };  template < class CK >  class Equal_2 #ifndef CGAL_CFG_MATCHING_BUG_6  : public CK::Linear_kernel::Equal_2#endif  {    typedef typename CK::Circular_arc_point_2 Circular_arc_point_2;    typedef typename CK::Circular_arc_2          Circular_arc_2;    typedef typename CK::Line_arc_2              Line_arc_2;  public:    typedef bool         result_type;    typedef Arity_tag<2> Arity;    typedef typename  CK::Linear_kernel LK;    typedef typename LK::Equal_2 LK_Equal_2;    typedef typename LK::Point_2 Point_2;    typedef typename LK::Vector_2 Vector_2;    typedef typename LK::Direction_2 Direction_2;    typedef typename LK::Segment_2 Segment_2;    typedef typename LK::Ray_2 Ray_2;    typedef typename LK::Line_2 Line_2;    typedef typename LK::Triangle_2 Triangle_2;    typedef typename LK::Iso_rectangle_2 Iso_rectangle_2;    typedef typename LK::Circle_2 Circle_2;    #ifndef CGAL_CFG_MATCHING_BUG_6    using CK::Linear_kernel::Equal_2::operator();#else      result_type    operator() (const Point_2 &p0,                const Point_2 &p1) const    { return LK_Equal_2()(p0,p1); }          result_type    operator() (const Vector_2 &p0,                const Vector_2 &p1) const    { return LK_Equal_2()(p0,p1); }          result_type    operator() (const Direction_2 &p0,                const Direction_2 &p1) const    { return LK_Equal_2()(p0,p1); }          result_type    operator() (const Segment_2 &p0,                const Segment_2 &p1) const    { return LK_Equal_2()(p0,p1); }        result_type    operator() (const Ray_2 &p0,                const Ray_2 &p1) const    { return LK_Equal_2::operator()(p0,p1); }        result_type    operator() (const Line_2 &p0,                const Line_2 &p1) const    { return LK_Equal_2()(p0,p1); }        result_type    operator() (const Triangle_2 &p0,                const Triangle_2 &p1) const    { return LK_Equal_2()(p0,p1); }        result_type    operator() (const Iso_rectangle_2 &p0,                const Iso_rectangle_2 &p1) const    { return LK_Equal_2()(p0,p1); }        result_type    operator() (const Circle_2 &p0,                const Circle_2 &p1) const    { return LK_Equal_2()(p0,p1); }#endif    result_type    operator() (const Circular_arc_point_2 &p0,                const Circular_arc_point_2 &p1) const    { return equal<CK>(p0, p1); }        result_type    operator() (const Circular_arc_2 &a0, const Circular_arc_2 &a1) const    { return equal<CK>(a0, a1); }    result_type    operator() (const Line_arc_2 &a0, const Line_arc_2 &a1) const    { return equal<CK>(a0, a1); }    result_type      operator() ( const Line_arc_2 &a0, const Circular_arc_2 &a1) const    {return false;}    result_type      operator() ( const Circular_arc_2 &a0, const Line_arc_2 &a1) const    {return false;}       };  template < class CK >  class Compare_y_at_x_2  {    typedef typename CK::Circular_arc_2          Circular_arc_2;    typedef typename CK::Circular_arc_point_2 Circular_arc_point_2;    typedef typename CK::Line_arc_2              Line_arc_2;  public:    typedef CGAL::Comparison_result result_type;    typedef Arity_tag<2>            Arity;        result_type    operator() (const Circular_arc_point_2 &p,                const Circular_arc_2 &A1) const    { return CircularFunctors::compare_y_at_x<CK>(p, A1); }    result_type    operator() (const Circular_arc_point_2 &p,                const Line_arc_2 &A1) const    { return CircularFunctors::compare_y_at_x<CK>(p, A1); }  };  template < class CK >  class Do_overlap_2  {    typedef typename CK::Circular_arc_2 Circular_arc_2;    typedef typename CK::Line_arc_2     Line_arc_2;  public:    typedef bool         result_type;    typedef Arity_tag<2> Arity;        result_type    operator() (const Circular_arc_2 &A1, const Circular_arc_2 &A2) const    { return CircularFunctors::do_overlap<CK>(A1, A2); }        result_type    operator() (const Line_arc_2 &A1, const Line_arc_2 &A2) const    { return CircularFunctors::do_overlap<CK>(A1, A2); }  };  template < class CK >  class Make_x_monotone_2  {    typedef typename CK::Circular_arc_2 Circular_arc_2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -