scipy 下船体

q9rjltbz  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(97)

目前我正在实现一个算法来计算Python中的[Newton-Polygon]。(https://en.wikipedia.org/wiki/Newton_polygon
在Scipy中已经有一个函数来计算给定点集的船体,但我不知道如何取其下边界,有人有想法吗?
我已经应用了Scipy中的船体函数,并尝试只取前几个条目,直到右边的点,但有时它会导致上凸包。

g6baxovj

g6baxovj1#

我会通过找到x的极值来解决这个问题,并得到两者之间的点。SciPy保证以逆时针顺序为一组2D点的船体发出坐标,因此您可以从最小x值的位置读取到最大x值的位置,并获得较低的凸包。
代码:

def get_lower(polygon):
    minx = np.argmin(polygon[:, 0])
    maxx = np.argmax(polygon[:, 0]) + 1
    if minx >= maxx:
        lower_curve = np.concatenate([polygon[minx:], polygon[:maxx]])
    else:
        lower_curve = polygon[minx:maxx]
    return lower_curve

字符串
如何使用此示例:

import scipy.spatial
import matplotlib.pyplot as plt
import numpy as np

rng = np.random.default_rng()
points = rng.random((10, 2))
hull = scipy.spatial.ConvexHull(points)

plt.plot(points[:,0], points[:,1], 'o')
for simplex in hull.simplices:
    plt.plot(points[simplex, 0], points[simplex, 1], 'k-')

lower_curve = get_lower(points[hull.vertices])
plt.plot(lower_curve[:, 0], lower_curve[:, 1])

相关问题