// Copyright (c) 2000 Max-Planck-Institute Saarbruecken (Germany). // 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. // // $Source$ // $Revision$ $Date$ // $Name$ // // Author(s) : Susan Hert #ifndef CGAL_IS_DEGENERATE_POLYGON_2_H #define CGAL_IS_DEGENERATE_POLYGON_2_H namespace CGAL { // tests if a sequence of points represents a degenerate polygon (i.e. // one of zero area) template bool is_degenerate_polygon_2(BidirectionalIterator first, BidirectionalIterator last, const Traits& traits) { if (first == last) return true; BidirectionalIterator prev = last; prev--; BidirectionalIterator curr = first; BidirectionalIterator next = first; next++; // fewer than three vertices if (prev == first) return true; if (next == last) return true; typedef typename Traits::Orientation_2 Orientation_2; Orientation_2 orientation = traits.orientation_2_object(); while (curr != last) { if (orientation(*prev, *curr, *next) != COLLINEAR) return false; prev++; if (prev == last) prev = first; next++; if (next == last) next = first; curr++; } return true; } template bool is_degenerate_polygon_2(InputIterator first, InputIterator last) { if (first == last) return true; typedef typename std::iterator_traits::value_type Point_2; typedef typename Kernel_traits::Kernel K; return is_degenerate_polygon_2(first, last, K()); } } #endif // CGAL_IS_DEGENERATE_POLYGON_2_H