如何使用MIConvexHull库

时间:2017-07-01 17:18:45

标签: c# generics nuget-package convex-hull

我目前正在尝试为我的项目实现凸包计算,因此,我安装了https://www.nuget.org/packages/MIConvexHull/ NuGet包。 (该项目是用于2D,3D和更高维度的凸包算法和库。)以下是github页面的链接:https://github.com/DesignEngrLab/MIConvexHull

到目前为止,这是我到目前为止所取得的成就/理解: 要创建凸包,需要顶点列表,然后凸包基本上是顶点列表和面列表。所以这是我目前如何尝试实现它。

List<Vertex> MI_convexHullVertices = new List<Vertex>();

var MI_convexHull = MIConvexHull.ConvexHull.Create<Vertex, Face>(vertices);

对于这段代码,我得到了很多编译器错误,因为没有Vertex和没有Face类。我现在不知道在这里使用什么。

这是ConvexHull.cs中的ConvexHull类的一部分:

    public static ConvexHull<TVertex, TFace> Create<TVertex, TFace>(IList<TVertex> data,
        double PlaneDistanceTolerance = Constants.DefaultPlaneDistanceTolerance)
        where TVertex : IVertex
        where TFace : ConvexFace<TVertex, TFace>, new()
    {
        return ConvexHull<TVertex, TFace>.Create(data, PlaneDistanceTolerance);
    }

现在我的问题出现了:有人可以向我解释一下TVertex和TFace是什么吗?之后,如何使用代码?

我觉得它与通用数据类型有关,比如TVertex不是真正的类型,但究竟是什么以及我可以用什么真正的类/类型来实际实现凸包计算?

问题是,我不知道那里的语法。

2 个答案:

答案 0 :(得分:1)

  

有人可以向我解释一下TVertex和TFace是什么吗?在那之后,   如何使用代码?

TVertexTFaceconstructed types,是的,这与泛型有关。当你调用静态方法ConvexHull时,你必须提供两个实现接口IVertex的实例,它与TVertex和从ConvexFace<TVertex, TFace>继承的另一个实例相关联,这与TFace

相关联

如果您导航到github MIConvexHull中的项目链接,您会找到一个名为 Examples 的文件夹。在那里你会发现如何使用库。例如,here您将找到2D Convex Hull案例的说明性示例。

在粗线中,它创建了一个顶点数组:

var vertices = new Vertex[NumberOfVertices];

并使用Vertex类的构造函数

使用新的Vertex个对象填充它们
new Vertex(size * r.NextDouble(), size * r.NextDouble());

并获得ConvexHull的点数简单如下:

 var convexHull = ConvexHull.Create(vertices).Points;

答案 1 :(得分:0)

我已经完成了许多凸壳算法的基准测试,包括MIConvexHull和我的。如果您浏览提供的代码,您可能会发现如何使用代码进行2D使用:

Fast and improved 2D Convex Hull algorithm and its implementation in O(n log h)