How to get list of points inside a polygon in python?

前端 未结 5 2049
春和景丽
春和景丽 2020-12-08 05:18

I searched a lot and cant find any practical answer to my question. I have a polygon. For example:

    [(86, 52), (85, 52), (81, 53), (80, 52), (79, 48), (81         


        
5条回答
  •  遥遥无期
    2020-12-08 05:56

    Building upon RemcoGerlich's answer here's a validated function:

    import numpy as np
    import mahotas
    
    def render(poly):
        """Return polygon as grid of points inside polygon.
    
        Input : poly (list of lists)
        Output : output (list of lists)
        """
        xs, ys = zip(*poly)
        minx, maxx = min(xs), max(xs)
        miny, maxy = min(ys), max(ys)
    
        newPoly = [(int(x - minx), int(y - miny)) for (x, y) in poly]
    
        X = maxx - minx + 1
        Y = maxy - miny + 1
    
        grid = np.zeros((X, Y), dtype=np.int8)
        mahotas.polygon.fill_polygon(newPoly, grid)
    
        return [(x + minx, y + miny) for (x, y) in zip(*np.nonzero(grid))]
    

    Example:

    poly = [
        [0, 0],
        [0, 10],
        [10, 10],
        [10, 0]
    ]
    
    plt.figure(None, (5, 5))
    x, y = zip(*render(poly))
    plt.scatter(x, y)
    x, y = zip(*poly)
    plt.plot(x, y, c="r")
    plt.show()
    

提交回复
热议问题