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

📄 td_traits.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 1997  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/Arrangement_2/include/CGAL/Arr_point_location/Td_traits.h $// $Id: Td_traits.h 31554 2006-06-13 09:25:48Z wein $// //// Author(s)	 : Oren Nechushtan <theoren@math.tau.ac.il>#ifndef CGAL_TD_TRAITS_H#define CGAL_TD_TRAITS_H#include <CGAL/Arr_point_location/Td_X_trapezoid.h>CGAL_BEGIN_NAMESPACEtemplate <class Pm_traits_,class X_curve_> class Td_traits : public Pm_traits_{public:  typedef Pm_traits_                      Traits_base;    typedef X_curve_                        X_curve;  typedef Td_traits<Traits_base,X_curve>  Self;  typedef typename Traits_base::Point_2   Point;  typedef X_curve*                        X_curve_ptr;  typedef X_curve&                        X_curve_ref;  typedef const X_curve&                  X_curve_const_ref;  typedef Td_X_trapezoid<Self>            X_trapezoid;  typedef X_trapezoid*                    X_trapezoid_ptr;  typedef X_trapezoid&                    X_trapezoid_ref;  typedef const X_trapezoid&              X_trapezoid_const_ref;    Td_traits(const Traits_base& t)     : Traits_base(t)  {  }  Td_traits()   {  }  ~Td_traits(void)  {    if (POINT_AT_LEFT_TOP_INFINITY) {      delete POINT_AT_LEFT_TOP_INFINITY;      POINT_AT_LEFT_TOP_INFINITY = 0;    }    if (POINT_AT_RIGHT_BOTTOM_INFINITY) {      delete POINT_AT_RIGHT_BOTTOM_INFINITY;      POINT_AT_RIGHT_BOTTOM_INFINITY = 0;    }    if (CURVE_AT_INFINITY) {      delete CURVE_AT_INFINITY;      CURVE_AT_INFINITY = 0;    }  }protected:  typedef X_trapezoid_const_ref           const_ref;  public:  /*    note:    The traits assume that the trapezoid is active,non empty,    and planar, that is no two curves intersect in non degenerate curve.  */  inline bool curve_is_unbounded(const X_curve& cv) const {/* compare curve with static unbounded curve */    return cv.identical(CURVE_AT_INFINITY);  }  inline bool trapezoid_bottom_curve_equal(X_trapezoid_const_ref left,					   X_trapezoid_const_ref right) const  /* returns true if bottom curves of input are the same */  {    if (left.is_bottom_unbounded())      return (right.is_bottom_unbounded());      if (right.is_bottom_unbounded())       return (false);        return (this->equal_2_object()(left.bottom(),right.bottom()));  }  inline bool trapezoid_top_curve_equal(X_trapezoid_const_ref left,					X_trapezoid_const_ref right) const  /* returns true if top curves of input are the same */  {    if (left.is_top_unbounded())       return (right.is_top_unbounded());        if (right.is_top_unbounded())       return (false);        return (this->equal_2_object()(left.top(),right.top()));  }  //returns true if the trapezoid is a point or a curve  bool is_degenerate(const_ref tr) const  {    return (is_degenerate_point(tr) || 	    (!tr.is_top_unbounded() && 	     !tr.is_bottom_unbounded() && 	     this->equal_2_object()(tr.bottom(),tr.top())));  }		    //returns true if the trapezoid is a point   bool is_degenerate_point(const_ref tr) const  {    return (!tr.is_left_unbounded() && 	    !tr.is_right_unbounded() && 	    this->equal_2_object()(tr.left(),tr.right()));  }  //returns true if the trapezoid is a curve   bool is_degenerate_curve(const_ref tr) const  {    return (!tr.is_top_unbounded() && 	    !tr.is_bottom_unbounded() && 	    this->equal_2_object()(tr.bottom(), tr.top()) && 	    !is_degenerate_point(tr));  }  //returns true if the trapezoid is vertical   bool is_vertical(const_ref tr) const  {    return (!tr.is_left_unbounded() && 	    !tr.is_right_unbounded() && 	    (this->compare_x_2_object()(tr.left(),tr.right())== EQUAL));  }    /* Description:     returns whether point is inside trapezoid using lexicographic order */    bool is_inside(const_ref tr,const Point& p) const  {    return	      (tr.is_left_unbounded() ||       (this->compare_xy_2_object()(tr.left(),p)==SMALLER)) &&      (tr.is_right_unbounded() ||       (this->compare_xy_2_object()(tr.right(),p)==LARGER)) &&      (tr.is_bottom_unbounded() ||       this->compare_y_at_x_2_object()(p, tr.bottom()) == LARGER) &&      (tr.is_top_unbounded()||       this->compare_y_at_x_2_object()(p, tr.top()) == SMALLER);  }  // returns true if the point is inside the closure of the trapezoid   // (inlcude all boundaries)  bool is_in_closure(const_ref tr,const Point& p) const  {    // test left and right sides    if ((tr.is_left_unbounded()||         !(this->compare_xy_2_object()(p,tr.left())==SMALLER)) &&        (tr.is_right_unbounded()||         !(this->compare_xy_2_object()(p,tr.right())==LARGER)))      {        // test bottom side        if (!tr.is_bottom_unbounded()) 	{	  if (this->compare_y_at_x_2_object()(p, tr.bottom()) == SMALLER)	    return false;	}        // test top side        if (!tr.is_top_unbounded())	{	  if (this->compare_y_at_x_2_object()(p, tr.top()) == LARGER)	    return false;	}        return true;      }    return false;  }    public:  static const Point& get_point_at_left_top_infinity();  static const Point& get_point_at_right_bottom_infinity();  static const X_curve& get_curve_at_infinity();private:  static Point * POINT_AT_LEFT_TOP_INFINITY;  static Point * POINT_AT_RIGHT_BOTTOM_INFINITY;  static X_curve * CURVE_AT_INFINITY;};CGAL_END_NAMESPACE#include <CGAL/Arr_point_location/Td_traits_functions.h>#endif

⌨️ 快捷键说明

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