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

📄 gps_traits_adaptor.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2005  Tel-Aviv University (Israel).// 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/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_traits_adaptor.h $// $Id: Gps_traits_adaptor.h 28831 2006-02-27 14:28:18Z baruchzu $// //// Author(s)     : Baruch Zukerman <baruchzu@post.tau.ac.il>#ifndef CGAL_GPS_TRAITS_ADAPTOR_H#define CGAL_GPS_TRAITS_ADAPTOR_HCGAL_BEGIN_NAMESPACEtemplate <class Traits_>class Gps_traits_adaptor : public Traits_{  typedef Traits_                     Base;  typedef Gps_traits_adaptor<Base>    Self;public:  typedef typename Base::X_monotone_curve_2      X_monotone_curve_2;  typedef typename Base::Point_2                 Point_2;  typedef typename Base::Compare_xy_2            Compare_xy_2;  typedef typename Base::Compare_y_at_x_right_2  Compare_y_at_x_right_2;  typedef typename Base::Compare_endpoints_xy_2  Compare_endpoints_xy_2;  typedef typename Base::Construct_min_vertex_2  Construct_min_vertex_2;  typedef typename Base::Construct_max_vertex_2  Construct_max_vertex_2;  /*! Default constructor. */  Gps_traits_adaptor () : Base()  {}  /*! Constructor from a base-traits class. */  Gps_traits_adaptor (const Base& traits) : Base (traits)  {}  class Construct_vertex_2   {  public:    Point_2 operator()(const X_monotone_curve_2& cv, int i)    {      Base tr;      Compare_endpoints_xy_2 cmp_endpoints =         tr.compare_endpoints_xy_2_object();      Construct_min_vertex_2 ctr_min_v = tr.construct_min_vertex_2_object();      Construct_max_vertex_2 ctr_max_v = tr.construct_max_vertex_2_object();      i %= 2;      if(i==0)      {        // return the source        if(cmp_endpoints(cv) == SMALLER)          return (ctr_min_v(cv));                return (ctr_max_v(cv));      }      // else i==1 (return the target)      if(cmp_endpoints(cv) == SMALLER)        return (ctr_max_v(cv));            return (ctr_min_v(cv));    }  };  Construct_vertex_2 construct_vertex_2_object() const  {    return Construct_vertex_2();  }  class Orientation_2  {  public:    template <class CurveInputIteraor>    Orientation operator()(CurveInputIteraor begin,                           CurveInputIteraor end) const    {      Self tr;      Compare_xy_2 cmp_xy = tr.compare_xy_2_object();      Compare_y_at_x_right_2 cmp_y_at_x_right =         tr.compare_y_at_x_right_2_object();      Construct_vertex_2 ctr_v = tr.construct_vertex_2_object();      CurveInputIteraor from_left_most = begin;      CurveInputIteraor into_left_most = end;      Point_2 left_most_v = ctr_v(*from_left_most, 0);            --into_left_most;      CurveInputIteraor ci = from_left_most;      for(++ci ; ci != end; ++ci)      {        Comparison_result res_xy = cmp_xy( ctr_v(*ci, 0), left_most_v);        if(res_xy == LARGER)          continue;        if(res_xy == SMALLER)        {          left_most_v =  ctr_v(*ci, 0);          from_left_most = into_left_most = ci;          --into_left_most;        }        else        {          // res_xy == EQUAL          CurveInputIteraor tmp_from_left_most = ci;          CurveInputIteraor tmp_into_left_most = ci;          --tmp_into_left_most;          Comparison_result res_from = cmp_y_at_x_right(*from_left_most,                                                        *tmp_from_left_most,                                                        left_most_v);          Comparison_result res_to = cmp_y_at_x_right(*into_left_most,                                                       *tmp_into_left_most,                                                      left_most_v);                    CGAL_assertion(res_from != EQUAL && res_to != EQUAL);          if(res_from == LARGER && res_to == SMALLER)          {            if(cmp_y_at_x_right(*tmp_from_left_most,                                *into_left_most,                                left_most_v) == LARGER)            {              from_left_most = tmp_from_left_most;              into_left_most = tmp_into_left_most;            }          }          else            if(res_from == SMALLER && res_to == LARGER)            {              if(cmp_y_at_x_right(*tmp_into_left_most,                                  *from_left_most,                                  left_most_v) == LARGER)              {                from_left_most = tmp_from_left_most;                into_left_most = tmp_into_left_most;              }            }        }      }// end for      Comparison_result res = cmp_y_at_x_right(*into_left_most,                                               *from_left_most,                                              left_most_v);      CGAL_assertion(res != EQUAL);      if(res == SMALLER)        return (CLOCKWISE);      return (COUNTERCLOCKWISE);    }  };  Orientation_2 orientation_2_object() const  {    return Orientation_2();  }};CGAL_END_NAMESPACE#endif

⌨️ 快捷键说明

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