我肯定遗漏了一些非常明显的东西,但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上传到了Gist 这里上,并编写了代码的最小版本,以便于复制。
发布于 2020-02-17 13:29:12
一个有用的注释链接了以下问题:它的要点是对于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()https://stackoverflow.com/questions/60241306
复制相似问题