使用Julia获取一组点的alpha形状(凹壳)

时间:2019-03-11 14:52:57

标签: julia computational-geometry concave-hull pycall

我想使用Julia计算一组点的Alpha形状(甚至只计算凹壳)。在其他问题中,他们使用Delaunay tesselation Boundary enclosing a given set of points解决了python中的这个问题。

Julia中的此程序包可以获得Delaunay镶嵌https://github.com/JuliaGeometry/VoronoiDelaunay.jl(尽管我不确定是否已针对julia v0.7更新了该包)。 我想知道是否已经有julia v0.7的实现可以获取eh alpha形状,甚至只是一组点的凹包。

或者,有没有一种方法可以有效地调用python(scipy.spatial.Delaunay)来完成这项工作?

1 个答案:

答案 0 :(得分:2)

VoronoiDelaunay.jl适用于Julia 1.0和1.1。它也应该与Julia 0.7一起使用。

VoronoiDelaunay.jl在坐标上有一些数字限制,即(1.0+eps(), 2.0-eps()),因此您可能需要重新缩放数据点。

要创建具有自己的点类型的DelaunayTesselation,请确保您的类型是AbstractPoint2D的子类型,即<: AbstractPoint2D,并定义getx和{{ 1}}方法。

我相信下面的示例代码使用gety找到您称为点集的凹壳并绘制结果。它基本上在this answer中使用相同的算法。您可以轻松地编辑代码以获得alpha形状。

我没有将一些代码片段包装到一个函数中。如果需要高性能,请这样做。我在检查点是否相等时使用了DelaunayTesselation,实际上检查了两个点是否是同一对象(即内存中的地址)。如果您最终以某种方式破坏了这一部分的代码,则可以扩展===并使用它而不是==

===