def _iterate_PointCollection(self, start, stop, step): """ Iterate over the reflexive polytopes. INPUT: - ``start``, ``stop``, ``step`` -- integers specifying the range to iterate over. OUTPUT: A generator for PPL-based lattice polyhedra. EXAMPLES:: sage: from sage.geometry.polyhedron.palp_database import PALPreader sage: polygons = PALPreader(2) sage: iter = polygons._iterate_PointCollection(0,4,2) sage: next(iter) [ 1, 0], [ 0, 1], [-1, -1] in Ambient free module of rank 2 over the principal ideal domain Integer Ring """ from sage.modules.free_module import FreeModule N = FreeModule(ZZ, self._dim) from sage.geometry.point_collection import PointCollection for vertices in self._iterate_list(start, stop, step): yield PointCollection(vertices, module=N)
def fan_2d_cyclically_ordered_rays(fan): """ Return the rays of a 2-dimensional ``fan`` in cyclic order. INPUT: - ``fan`` -- a 2-dimensional fan. OUTPUT: A :class:`~sage.geometry.point_collection.PointCollection` containing the rays in one particular cyclic order. EXAMPLES:: sage: rays = ((1, 1), (-1, -1), (-1, 1), (1, -1)) sage: cones = [(0,2), (2,1), (1,3), (3,0)] sage: fan = Fan(cones, rays) sage: fan.rays() N( 1, 1), N(-1, -1), N(-1, 1), N( 1, -1) in 2-d lattice N sage: from sage.geometry.fan_isomorphism import fan_2d_cyclically_ordered_rays sage: fan_2d_cyclically_ordered_rays(fan) N(-1, -1), N(-1, 1), N( 1, 1), N( 1, -1) in 2-d lattice N TESTS:: sage: fan = Fan(cones=[], rays=[], lattice=ZZ^2) sage: from sage.geometry.fan_isomorphism import fan_2d_cyclically_ordered_rays sage: fan_2d_cyclically_ordered_rays(fan) Empty collection in Ambient free module of rank 2 over the principal ideal domain Integer Ring """ assert fan.lattice_dim() == 2 import math rays = [(math.atan2(r[0], r[1]), r) for r in fan.rays()] rays = [r[1] for r in sorted(rays)] from sage.geometry.point_collection import PointCollection return PointCollection(rays, fan.lattice())