如何扩展多边形直到其中一个边界达到一个点

我有扩展多边形的代码,它的工作原理是将xs和ys乘以一个系数,然后将所得的polyon重新居中在原始中心。


给定多边形需要达到的一点,我也有代码来找到膨胀系数的值:


import numpy as np

import itertools as IT

import copy

from shapely.geometry import LineString, Point


def getPolyCenter(points):

    """

    http://stackoverflow.com/a/14115494/190597 (mgamba)

    """

    area = area_of_polygon(*zip(*points))

    result_x = 0

    result_y = 0

    N = len(points)

    points = IT.cycle(points)

    x1, y1 = next(points)

    for i in range(N):

        x0, y0 = x1, y1

        x1, y1 = next(points)

        cross = (x0 * y1) - (x1 * y0)

        result_x += (x0 + x1) * cross

        result_y += (y0 + y1) * cross

    result_x /= (area * 6.0)

    result_y /= (area * 6.0)

    return (result_x, result_y)


def expandPoly(points, factor):

    points = np.array(points, dtype=np.float64)

    expandedPoly = points*factor

    expandedPoly -= getPolyCenter(expandedPoly)

    expandedPoly += getPolyCenter(points)

    return np.array(expandedPoly, dtype=np.int64)


def distanceLine2Point(points, point):

    points = np.array(points, dtype=np.float64)

    point = np.array(point, dtype=np.float64)


    points = LineString(points)

    point = Point(point)

    return points.distance(point)


def distancePolygon2Point(points, point):

    distances = []

    for i in range(len(points)):

        if i==len(points)-1:

            j = 0

        else:

            j = i+1

        line = [points[i], points[j]]

        distances.append(distanceLine2Point(line, point))


    minDistance = np.min(distances)

    #index = np.where(distances==minDistance)[0][0]


    return minDistance 


"""

    Returns the distance from a point to the nearest line of the polygon,

    AND the distance from where the normal to the line (to reach the point)

    intersets the line to the center of the polygon.

"""

仅当点与多条线中的一条直接相对时,此代码才有效。


catspeake
浏览 172回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python