为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2021-04-06 17:17:31
我有扩展多边形的代码,它的工作原理是将xs和ys乘以一个系数,然后将所得的polyon重新居中在原始中心。给定多边形需要达到的一点,我也有代码来找到膨胀系数的值:import numpy as npimport itertools as ITimport copyfrom shapely.geometry import LineString, Pointdef 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."""仅当点与多条线中的一条直接相对时,此代码才有效。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信