0

scipy.ConvexHull.area我一定遗漏了一些非常明显的东西,但与 相比,计算的面积似乎存在巨大差异shapely.convex_hull.area。我明白了

Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528

from shapely.geometry import MultiPoint
from scipy.spatial import ConvexHull
import json


def convex_hull_compare():
    with open("./test_points.json", 'r') as f:
        points = json.load(f)
        print(points)
        hull = ConvexHull(points)
        ch_area = MultiPoint(points).convex_hull.area

        print(
            f"Scipy Convex Hull Area: {hull.area}, Shapely Convex Hull Area: {ch_area}")
        # Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528


if __name__ == "__main__":
    convex_hull_compare()

我在这里test_points.json上传了 Github Gist并编写了代码的最小版本以便于复制。

4

1 回答 1

1

一位有用的评论者链接了以下问题:它的要点是,对于 2D 点,我们想要ConvexHull.volume,而不是ConvexHull.area

这确实给了我们正确的答案,但这确实令人困惑,因为文档根本没有提到这一点。

from shapely.geometry import MultiPoint
from scipy.spatial import ConvexHull
import json


def convex_hull_compare():
    with open("./test_points.json", 'r') as f:
        points = json.load(f)
        print(points)
        hull = ConvexHull(points)
        ch_area = MultiPoint(points).convex_hull.area

        print(
            f"Scipy Convex Hull Area: {hull.area}, Shapely Convex Hull Area: {ch_area}")
        # Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528

        print(
            f"Scipy Convex Hull Area: {hull.volume}, Shapely Convex Hull Area: {ch_area}")
        #Scipy Convex Hull Area: 13192154623.865295, Shapely Convex Hull Area: 13192154623.86528


if __name__ == "__main__":
    convex_hull_compare()
于 2020-02-17T13:29:12.097 回答