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

📄 polygon_2_impl.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 1997  Utrecht University (The Netherlands),// ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany),// INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg// (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria),// and Tel-Aviv University (Israel).  All rights reserved.//// This file is part of CGAL (www.cgal.org); you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public License as// published by the Free Software Foundation; version 2.1 of the License.// See the file LICENSE.LGPL 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/Polygon/include/CGAL/Polygon_2/Polygon_2_impl.h $// $Id: Polygon_2_impl.h 31310 2006-05-29 07:28:42Z wein $// //// Author(s)     : Wieger Wesselink <wieger@cs.ruu.nl>//-----------------------------------------------------------------------////                          operator==//-----------------------------------------------------------------------//CGAL_BEGIN_NAMESPACEnamespace i_polygon {template <class Equal_2, class Point_2>class Equal_pred {    Equal_2 m_equal_2;    Point_2 m_pt;public:    Equal_pred(Equal_2 equal_2, Point_2 const &pt)    : m_equal_2(equal_2), m_pt(pt) {}    bool operator()(Point_2 const &pt) const    { return m_equal_2(m_pt, pt); }};}template <class Traits_P, class Container1_P, class Container2_P>bool operator==( const Polygon_2<Traits_P,Container1_P> &x,                 const Polygon_2<Traits_P,Container2_P> &y ){  if (&x == &y)    return true;  typedef typename Traits_P::Equal_2 Equal_2;  typedef typename Traits_P::Point_2 Point_2;//  CGAL_polygon_precondition( (x.size() != 0) || (y.size() != 0));  if ((x.size() == 0) && (y.size() == 0)) return true;  if (x.size() != y.size()) return false;  Equal_2 equal_2 = x.traits_member().equal_2_object();  typename Polygon_2<Traits_P,Container1_P>::Vertex_const_iterator x_iter =    x.vertices_begin();  typename Polygon_2<Traits_P,Container2_P>::Vertex_const_iterator y_iter =    std::find_if(y.vertices_begin(), y.vertices_end(),    i_polygon::Equal_pred<Equal_2, Point_2>(equal_2, *x.vertices_begin()));  // if y doesn't contain the first point of x ...  if (y_iter == y.vertices_end()) return false;  ++x_iter;  ++y_iter;  while (y_iter != y.vertices_end()) {    if (!equal_2(*x_iter, *y_iter)) return false;    ++x_iter;    ++y_iter;  }  y_iter = y.vertices_begin();  while (x_iter != x.vertices_end()) {    if (!equal_2(*x_iter, *y_iter)) return false;    ++x_iter;    ++y_iter;  }  return true;}//-----------------------------------------------------------------------////                          operator>>//-----------------------------------------------------------------------//template <class Traits_P, class Container_P>std::istream &operator>>(std::istream &is, Polygon_2<Traits_P,Container_P>& p){  int n; // number of vertices  is >> n;  typename Traits_P::Point_2 point;   if (is) {      p.erase(p.vertices_begin(),p.vertices_end());      for (int i=0; i<n; i++) {        is >> point;        p.push_back(point);      }  }   return is;}//-----------------------------------------------------------------------////                          operator<<//-----------------------------------------------------------------------//template <class Traits_P, class Container_P>std::ostream&operator<<(std::ostream &os, const Polygon_2<Traits_P,Container_P>& p){  typename Polygon_2<Traits_P,Container_P>::Vertex_const_iterator i;  switch(os.iword(IO::mode)) {    case IO::ASCII :      os << p.size() << ' ';      for (i = p.vertices_begin(); i != p.vertices_end(); ++i) {        os << *i << ' ';      }      return os;    case IO::BINARY :      os << p.size();      for (i = p.vertices_begin(); i != p.vertices_end(); ++i) {        os << *i;      }      return os;    default:      os << "Polygon_2(" << std::endl;      for (i = p.vertices_begin(); i != p.vertices_end(); ++i) {        os << "  " << *i << std::endl;      }      os << ")" << std::endl;      return os;  }}CGAL_END_NAMESPACE//-----------------------------------------------------------------------////                          transform//-----------------------------------------------------------------------//#ifdef CGAL_REP_CLASS_DEFINEDCGAL_BEGIN_NAMESPACEtemplate <class Transformation, class Traits_P, class Container_P>Polygon_2<Traits_P,Container_P>transform(const Transformation& t, const Polygon_2<Traits_P,Container_P>& p){  typedef typename Polygon_2<Traits_P,Container_P>::Vertex_const_iterator VI;  Polygon_2<Traits_P,Container_P> result;  for (VI i = p.vertices_begin(); i != p.vertices_end(); ++i)    result.push_back(t(*i));  return result;}CGAL_END_NAMESPACE#endif // CGAL_REP_CLASS_DEFINED

⌨️ 快捷键说明

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