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

📄 function_objects_polynomial_circular.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
📖 第 1 页 / 共 3 页
字号:
    typedef typename CK::Line_arc_2 Line_arc_2;  public:         typedef void         result_type;   //!!!     typedef Arity_tag<2> Arity;       template < class OutputIterator >    OutputIterator    operator()(const Circular_arc_2 &A, OutputIterator res) const    {       return    CircularFunctors::make_x_monotone<CK> (A, res);    }    template < class OutputIterator >    OutputIterator    operator()(const Line_arc_2 &A, OutputIterator res) const    {       return CircularFunctors::make_x_monotone<CK>(A,res);    }  }; template < class CK >  class Make_xy_monotone_2  {    typedef typename CK::Circular_arc_2 Circular_arc_2;    typedef typename CK::Line_arc_2 Line_arc_2;  public:     typedef void         result_type;   //!!!     typedef Arity_tag<2> Arity;    template < class OutputIterator >    OutputIterator    operator()(const Circular_arc_2 &A, OutputIterator res) const      {        typedef std::pair<bool, bool>                  relat_pos;        typedef std::pair< CGAL::Object, relat_pos>    Obj_descr_2;        std::vector<Obj_descr_2> vec;        CircularFunctors::advanced_make_xy_monotone<CK> (A, std::back_inserter(vec));        for(int i=0;i<vec.size();++i)          *res++=vec.at(i).first;        return res;      }    template < class OutputIterator >    OutputIterator    operator()(const Line_arc_2 &A, OutputIterator res) const    { *res++ = make_object(A);      return res;    }  }; template < class CK >  class Advanced_make_x_monotone_2  {    typedef typename CK::Circular_arc_2 Circular_arc_2;    typedef typename CK::Line_arc_2 Line_arc_2;  public:     typedef void         result_type;   //!!!     typedef Arity_tag<2> Arity;    template < class OutputIterator >    OutputIterator    operator()(const Circular_arc_2 &A, OutputIterator res) const      {  return CircularFunctors::advanced_make_x_monotone<CK> (A, res);} // No extra information is meant to be returned for line arcs (should it?) // So attention on the fact that the second part of the pair contains dummy  // info. Maybe there shouldn't be such an operator for line arcs after all    template < class OutputIterator >    OutputIterator    operator()(const Line_arc_2 &A, OutputIterator res) const    { *res++ = std::make_pair(make_object(A),false); //      return res;    }  };template < class CK >  class Advanced_make_xy_monotone_2  {    typedef typename CK::Circular_arc_2 Circular_arc_2;    typedef typename CK::Line_arc_2 Line_arc_2;  public:     typedef void         result_type;   //!!!     typedef Arity_tag<2> Arity;    template < class OutputIterator >    OutputIterator    operator()(const Circular_arc_2 &A, OutputIterator res) const      {  return CircularFunctors::advanced_make_xy_monotone<CK> (A, res);} // No extra information is meant to be returned for line arcs (should it?) // So attention on the fact that the second part of the pair contains dummy  // info. Maybe there shouldn't be such an operator for line arcs after all    template < class OutputIterator >    OutputIterator    operator()(const Line_arc_2 &A, OutputIterator res) const    { *res++ = std::make_pair(make_object(A),std::make_pair(false,false));      return res;    }  };    template < class CK >  class Intersect_2    : public CK::Linear_kernel::Intersect_2  {      typedef typename CK::Circle_2                 Circle;    typedef typename CK::Circular_arc_2           Circular_arc;    typedef typename CK::Line_arc_2               Line_arc;        public:    typedef void         result_type;     typedef Arity_tag<3> Arity;        using CK::Linear_kernel::Intersect_2::operator();    template < class OutputIterator >    OutputIterator    operator()(const Circle & c1, const Circle & c2, OutputIterator res) const      { return CircularFunctors::intersect_2<CK> (c1,c2,res); }    template < class OutputIterator >    OutputIterator    operator()(const Circular_arc & c1, const Circular_arc & c2, 	       OutputIterator res) const      { return CircularFunctors::intersect_2<CK> (c1,c2,res); }      template < class OutputIterator >    OutputIterator    operator()(const Line_arc & c1, const Line_arc & c2, 	       OutputIterator res) const      {	return CircularFunctors::intersect_2<CK> (c1,c2,res); }      template < class OutputIterator >    OutputIterator    operator()(const Line_arc & c1, const Circle & c2, 	       OutputIterator res) const    { return CircularFunctors::intersect_2<CK> (c1,c2,res); }    template < class OutputIterator >    OutputIterator    operator()(const Circle & c1, const Line_arc & c2, 	       OutputIterator res) const    { return CircularFunctors::intersect_2<CK> (c2,c1,res); }    template < class OutputIterator >    OutputIterator    operator()(const Line_arc & c1, const Circular_arc & c2, 	       OutputIterator res) const    { return CircularFunctors::intersect_2<CK> (c1,c2,res); }    template < class OutputIterator >    OutputIterator    operator()(const Circular_arc & c1, const Line_arc & c2, 	       OutputIterator res) const    { return CircularFunctors::intersect_2<CK> (c2,c1,res); }  };  template < class CK >  class Split_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 void         result_type;    typedef Arity_tag<4> Arity;    result_type    operator()(const Circular_arc_2 &A, 	       const Circular_arc_point_2 &p,	       Circular_arc_2 &ca1, Circular_arc_2 &ca2) const    { return CircularFunctors::split<CK>(A, p, ca1, ca2); }    result_type    operator()(const Line_arc_2 &A, 	       const Circular_arc_point_2 &p,	       Line_arc_2 &ca1, Line_arc_2 &ca2) const    { return CircularFunctors::split<CK>(A, p, ca1, ca2); }  };  template < class CK >  class Is_vertical_2#ifndef CGAL_CFG_MATCHING_BUG_6    : public CK::Linear_kernel::Is_vertical_2#endif  {    typedef typename CK::Linear_kernel           LK;    typedef typename LK::Is_vertical_2           LK_Is_vertical_2;    typedef typename CK::Circular_arc_2          Circular_arc_2;    typedef typename CK::Line_arc_2              Line_arc_2;    typedef typename LK::Line_2                  Line_2;    typedef typename LK::Segment_2               Segment_2;    typedef typename LK::Ray_2                   Ray_2;  public:    typedef bool         result_type;    typedef Arity_tag<1> Arity;    #ifndef CGAL_CFG_MATCHING_BUG_6    using CK::Linear_kernel::Is_vertical_2::operator();#else     result_type    operator()( const Line_2& l) const    { return LK_Is_vertical_2()(l); }    result_type    operator()( const Segment_2& s) const    { return LK_Is_vertical_2()(s); }    result_type    operator()( const Ray_2& r) const    { return LK_Is_vertical_2()(r); }#endif    result_type    operator()(const Circular_arc_2 &A) const    { return CircularFunctors::is_vertical<CK>(A); }    result_type    operator()(const Line_arc_2 &A) const    { return CircularFunctors::is_vertical<CK>(A); }  };  template < class CK >  class Construct_circular_arc_2  {    typedef typename CK::FT                           FT;    typedef typename CK::RT                           RT;    typedef typename CK::Point_2                      Point_2;    typedef typename CK::Line_2                       Line_2;    typedef typename CK::Circle_2                     Circle_2;    typedef typename CK::Circular_arc_2               Circular_arc_2;    typedef typename CK::Kernel_base::Circular_arc_2  RCircular_arc_2;    typedef typename Circular_arc_2::Rep              Rep;    typedef typename CK::Circular_arc_point_2         Circular_arc_point_2;  public:    typedef  Circular_arc_2 result_type;    typedef  Arity_tag<3>   Arity;        result_type    operator()(void)     { return Rep(); }    result_type    operator()(const Circle_2 &c) const    { return Rep(c); }    result_type    operator()(const Circle_2 &support,               const Circular_arc_point_2 &source,                const Circular_arc_point_2 &target) const    { return Rep(support,source,target); }    result_type    operator()(const Circle_2 &support,               const Line_2 &l1, bool b1,               const Line_2 &l2, bool b2) const    { return Rep(support,l1,b1,l2,b2); }    result_type    operator()(const Circle_2 &c,               const Circle_2 &c1, bool b_1,               const Circle_2 &c2, bool b_2) const    { return Rep(c,c1,b_1,c2,b_2); }    result_type    operator()(const Circular_arc_2 &A,               bool b,               const Circle_2 &ccut, bool b_cut) const    { return Rep(A,b,ccut,b_cut); }    result_type    operator()(const Point_2 &begin,               const Point_2 &middle,                const Point_2 &end) const    { return Rep(begin,middle,end); }    result_type    operator()(const Point_2 &begin,               const Point_2 &end,	       const FT& bulge) const    { return Rep(begin,end,bulge); }  };  template < class CK >  class Construct_line_arc_2  {    typedef typename CK::Point_2                   Point_2;    typedef typename CK::Line_2                    Line_2;    typedef typename CK::Circle_2                  Circle_2;    typedef typename CK::Circular_arc_point_2      Circular_arc_point_2;    typedef typename CK::Segment_2                 Segment_2;    typedef typename CK::Line_arc_2                Line_arc_2;    typedef typename CK::Kernel_base::Line_arc_2   RLine_arc_2;    typedef typename Line_arc_2::Rep               Rep;  public:    typedef Line_arc_2   result_type;    typedef Arity_tag<3> Arity;        result_type    operator()(void)     { return Rep(); }    result_type    operator()(const Line_2 &support,	       const Circle_2 &c1,const bool b1,	       const Circle_2 &c2,const bool b2) const    { return Rep(support,c1,b1,c2,b2); }    result_type    operator()(const Line_2 &support,	       const Line_2 &l1,	       const Line_2 &l2) const    { return Rep(support,l1,l2); }    result_type    operator()(const Line_2 &support,	       const Circular_arc_point_2 &p1,	       const Circular_arc_point_2 &p2) const    { return Rep(support,p1,p2); }//     result_type//     operator()(const Line_2 &support,// 	       const Point_2 &p1,// 	       const Point_2 &p2) const//     { return Rep(support,p1,p2); }    result_type    operator()(const Segment_2 &s) const    { return Rep(s); }    result_type    operator()(const Point_2 &p1,	       const Point_2 &p2) const    { return Rep(p1,p2); }  };  template < class CK >  class Construct_circular_arc_point_2  {    typedef typename CK::Point_2               Point_2;    typedef typename CK::Circular_arc_point_2  Circular_arc_point_2;    typedef typename CK::Kernel_base::Circular_arc_point_2                                                 RCircular_arc_point_2;    typedef typename Circular_arc_point_2::Rep Rep;    typedef typename Circular_arc_point_2::Root_for_circles_2_2                                                 Root_for_circles_2_2;  public:    typedef Circular_arc_point_2 result_type;    typedef Arity_tag<1>         Arity;    result_type    operator()(void)     { return Rep(); }    result_type    operator()(const Root_for_circles_2_2 & np) const    { return Rep(np); }    result_type    operator()(const Point_2 & p) const    { return Rep(p); }  };  template <class CK>  class Compute_Circular_x_2: Has_qrt  {    typedef typename CK::Circular_arc_point_2   Circular_arc_point_2;    typedef typename CK::Root_of_2                 Root_of_2;  public:    typedef Root_of_2            result_type;    typedef const result_type &  qualified_result_type;    typedef Arity_tag<1>         Arity;    qualified_result_type operator() (const Circular_arc_point_2 & a) const    {      return (a.rep().x());    }  };  template <class CK>  class Compute_Circular_y_2: Has_qrt  {    typedef typename CK::Circular_arc_point_2   Circular_arc_point_2;    typedef typename CK::Root_of_2                 Root_of_2;  public:    typedef Root_of_2            result_type;    typedef const result_type &  qualified_result_type;    typedef Arity_tag<1>         Arity;        qualified_result_type operator() (const Circular_arc_point_2 & a) const    {      return (a.rep().y());    }  };  template <class CK>  class Construct_circular_min_vertex_2 : Has_qrt  {    typedef typename CK::Circular_arc_2            Circular_arc_2;    typedef typename CK::Line_arc_2                Line_arc_2;    typedef typename CK::Circular_arc_point_2      Circular_arc_point_2;  public:    typedef Circular_arc_point_2 result_type;    typedef const result_type &  qualified_result_type;    typedef Arity_tag<1>         Arity;    qualified_result_type operator() (const Circular_arc_2 & a) const    {//       if (a.rep().Cache_minmax == 't')// 	return (a.rep().source());//       if (a.rep().Cache_minmax == 's')// 	return (a.rep().target());

⌨️ 快捷键说明

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