找出一个点是否在由一组点生成的凸包中
Finding Whether A Point Is In The Convex Hull Generated By A Set Of Points
我需要从一组点计算凸壳。
点的尺寸通常为10 ~ 30D
集合大小较小,一般为2 ~ 10
我需要的任务是判断一个点是否在由点集构造的凸包内。
有哪些算法可以做到这一点,或者是否有任何现有的库可以使用?
注意:此算法的原始草图,需要修改。它可以输出错误的结果(见下面的注释)
下面是你的问题的一些可能的解决方案之一。
取空间的D维数,N -点的个数。您可以使用以下算法:
你应该为你的空间的每个坐标平面计算投影凸壳。你会得到D个凸包。这一步的复杂度为D * N * log N
然后你应该测试,你的每个点的投影是否位于每个适当的凸包内。该步骤的复杂度为D * N(使用本地算法)
总执行复杂度= D * N * Log N
注:本算法的基本思想是将平面上凸壳的计算归结为对点位置的后续测试。
注:当然,也有退化的情况,凸包可以是线段,也可以是点。但这些情况很容易治疗
P.P.S.该算法只允许检查点是否在凸包内或在凸包边界
相关文章:
- 在 c++ 中拥有一组结构的正确方法是什么?
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 一组值的零开销下标运算符
- 使用一组结构,避免在一组结构中出现重复的结构
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 合并一组模板专用化
- 如何更好地检查两个 char 变量是否在一组值中?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 给定一个枢轴点,按照它们与枢轴点构成的角度递增顺序对一组点进行排序
- 如何从一组变量中查找最低值
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何通过查找迭代器结果分配给一组对的元素
- 读取一组用户输入,按升序排序,然后打印结果
- 如何从一组具有从左到右优先级的整数值创建有序整数键?
- 在 c++ 中定义一组 set 的迭代器
- 使用 C++20 概念强制类实现一组方法
- 这是定义一组递归规则的正确方法吗?
- 如何解包在mixins宿主类中传递的一组元组(最终被转发给mixins)
- 找出一个点是否在由一组点生成的凸包中