找出一个点是否在由一组点生成的凸包中

Finding Whether A Point Is In The Convex Hull Generated By A Set Of Points

本文关键字:一组 凸包 是否 一个      更新时间:2023-10-16

我需要从一组点计算凸壳。

点的尺寸通常为10 ~ 30D

集合大小较小,一般为2 ~ 10

我需要的任务是判断一个点是否在由点集构造的凸包内。

有哪些算法可以做到这一点,或者是否有任何现有的库可以使用?

注意:此算法的原始草图,需要修改。它可以输出错误的结果(见下面的注释)

下面是你的问题的一些可能的解决方案之一。

取空间的D维数,N -点的个数。您可以使用以下算法:

你应该为你的空间的每个坐标平面计算投影凸壳。你会得到D个凸包。这一步的复杂度为D * N * log N

然后你应该测试,你的每个点的投影是否位于每个适当的凸包内。该步骤的复杂度为D * N(使用本地算法)

总执行复杂度= D * N * Log N

注:本算法的基本思想是将平面上凸壳的计算归结为对点位置的后续测试。

注:当然,也有退化的情况,凸包可以是线段,也可以是点。但这些情况很容易治疗

P.P.S.该算法只允许检查点是否在凸包内或在凸包边界