Exemplo n.º 1
0
def is_polygon_convex(polygon):
    """Determine if a polygon is convex.

    Parameters
    ----------
    polygon : sequence of sequence of floats
        The XYZ coordinates of the corners of the polygon.

    Notes
    -----
    Use this function for *spatial* polygons.
    If the polygon is in a horizontal plane, use :func:`is_polygon_convex_xy` instead.

    See Also
    --------
    is_polygon_convex_xy

    """
    c = centroid_polygon(polygon)

    for i in range(-1, len(polygon) - 1):
        p0 = polygon[i]
        p1 = polygon[i - 1]
        p2 = polygon[i + 1]
        v0 = subtract_vectors(c, p0)
        v1 = subtract_vectors(p1, p0)
        v2 = subtract_vectors(p2, p0)
        a1 = angle_vectors(v1, v0)
        a2 = angle_vectors(v0, v2)
        if a1 + a2 > pi:
            return False

    return True
Exemplo n.º 2
0
 def center(self):
     """Point: The center (of mass) of the polygon."""
     return Point(*centroid_polygon(self.points))