找出一个点是由一组点产生的凸壳中的一个点

时间:2016-08-15 01:42:07

标签: c++ algorithm computational-geometry

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

点的尺寸通常为10~30D

集合的大小很小,通常为2~10

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

要执行哪些算法,或者我可以使用哪些现有库?

1 个答案:

答案 0 :(得分:1)

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

以下是您的问题的许多可能解决方案之一。

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

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

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

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

注意:该算法的基本思想是通过跟踪点的位置测试来简化平面上的计算凸包。

P.S。当然,你可以得到一些退化情况,其中凸壳可以是线段或只是点。但这些案件可以轻松处理

P.P.S。该算法仅允许检查点是位于凸包内还是位于其边界