我目前正在尝试为我的项目实现凸包计算,因此,我安装了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
不是真正的类型,但究竟是什么以及我可以用什么真正的类/类型来实际实现凸包计算?
问题是,我不知道那里的语法。
答案 0 :(得分:1)
有人可以向我解释一下TVertex和TFace是什么吗?在那之后, 如何使用代码?
TVertex
和TFace
是constructed 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)