python - 凸包和 SciPy

标签 python geometry scipy computational-geometry convex-hull

我正在尝试使用 scipy (0.10.1) 快速破解以可视化凸包。

我可以使用下面的代码得到凸包:

vecs = [[-0.094218, 51.478927], [-0.09348,  51.479364], [-0.094218, 51.478927],
        ...
        [-0.094218, 51.478927], [-0.094321, 51.479918], [-0.094218, 51.478927],
        [-0.094222, 51.478837], [-0.094241, 51.478388], [-0.094108, 51.478116],
        [-0.09445,  51.480279], [-0.094256, 51.478028], [-0.094326, 51.500511]]
hull = scipy.spatial.Delaunay(vecs).convex_hull

结果数组如下所示:

[[56,  9], [16,  1], [56,  1], [55,  9], [53, 55], [53, 16]]

数字是顶点索引。我的问题是它们没有被排序。我需要它们按 CW 或 CCW 顺序排列,以便在 KML 中轻松可视化它们。

有没有简单的方法让 scipy.spatial 计算正确的顺时针顺序?

最佳答案

所以这段代码似乎可以解决问题,但还可以更简单... 本质上,我首先从船体中收集顶点编号。然后我计算均值,将数据集重新居中并按与均值的角度对其进行排序。

ps = set()
for x, y in hull:
    ps.add(x)
    ps.add(y)
ps = numpy.array(list(ps))
center = vecs[ps].mean(axis=0)
A = vecs[ps] - center
h = vecs[ps[numpy.argsort(numpy.arctan2(A[:,1], A[:,0]))]]

关于python - 凸包和 SciPy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724933/

相关文章:

python - 从 Scipy 稀疏矩阵中获取唯一行

python - 使用 Ajax 验证并提交 Django 表单 (django-crispy-forms)

java - 我的几何程序有问题

Python约束线性优化

python - 将函数与 numpy 数组的每个元素集成为集成限制

python - 如何使用 python 2.7 替换字符串中的当前单词?

Python Config Parser 找不到部分?

css - 根据 div 宽度动态对齐 CSS 三 Angular 形

javascript - 计算 fitBounds() 为给定边界和 map 大小返回的视口(viewport)

python - Scipy.interpolate 获取产生特定 y 值的 x 值 2 个数字列表