Shapely Convex Hull 区域给出与 scipy.ConvexHull 区域截然不同的结果?

Shapely Convex Hull area gives radically different results from scipy.ConvexHull area?

我一定遗漏了一些非常明显的东西,但 scipy.ConvexHull.areashapely.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 here 并编写了代码的最小版本以便于复制。

一位乐于助人的评论者链接了 :它的要点是对于二维点,我们需要 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()