如果我知道我的点总是排列成两个矩形,是否有优化的方法来获得凸包?
我编写了经典的凸包算法(仅通过枚举所有点),但由于我有一堆矩形对象,如果可能有更有效的方法来处理这种特殊情况,我就会徘徊。
这就是我所说的,澄清一下:
我尝试以各种方式对点进行排序,但我找不到优化它的一般规则。基本的凸壳算法是否也是最有效的方法呢?
更新
为了澄清我的最终目标,我已经将~100个矩形分组成两对,以及数千个点,我必须实时检查它们是否位于每个凸包内。现在我已经考虑了一下,我猜凸壳部分不会成为整个操作的瓶颈(但仍有约100个,我的目标是实时60fps处理)所以我不妨用一个简单的ol'算法为@BartKiers建议,然后在分析后再回到这个。
我会暂时搁置这个问题,也许有人会想出一个可能有用的优化。
答案 0 :(得分:7)
如果我是对的,你可以枚举所有相关的配置,注意如果矩形的左边比左边的左边多,那么它的两个左顶点就在凸包上。
在四个基本方向上有相同的推理,有16个不同的案例你可以硬编码。
另一种观察方式是观察凸包是两个矩形中最紧密的边界框,有0,2或4个角“切断”。查找边界框非常简单,您可以决定是否在不属于任何矩形的情况下切割边角。
您可以从此规则轻松获得点包含测试。如果您已经有一个边界框测试,那么添加边角测试就足够了。