// ============================================================================ // // Copyright (c) 2000 The CGAL Consortium // // This software and related documentation is part of an INTERNAL release // of the Computational Geometry Algorithms Library (CGAL). It is not // intended for general use. // // ---------------------------------------------------------------------------- // // release : $CGAL_Revision $ // release_date : $CGAL_Date $ // // file : include/CGAL/is_degenerate_polygon_2.h // package : $CGAL_Package: Partition_2 $ // maintainer : Susan Hert // chapter : Planar Polygon Partitioning // // revision : $Revision$ // revision_date : $Date$ // // author(s) : Susan Hert // // coordinator : MPI (Susan Hert ) // // implementation: test for degenerate polygon with collinear vertices // ============================================================================ #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