可能是重复问题:
二维点集的最大线性尺寸
我可以计算每个点之间的距离,然后取最大值,但是当有大量(> 1000)的点时,这并不像一种非常有效的方法。
注意:这是为iPhone设计的,因此我没有太多的处理能力。
可能是重复问题:
二维点集的最大线性尺寸
我可以计算每个点之间的距离,然后取最大值,但是当有大量(> 1000)的点时,这并不像一种非常有效的方法。
注意:这是为iPhone设计的,因此我没有太多的处理能力。
从x坐标最低的点开始(称其为点X),构建一组“边界点”,从点x开始,垂直于该点的线段上,没有其他点在PointX左侧。缓慢逆时针(或顺时针)旋转该线段,直到该线段接触到另一个点(见下文),将该点添加到集合中,并重复使用该下一个点获得下一个点,直到最终回到原点x。现在您拥有一组点形成完整集合的边界。比较减少集合中每对之间的距离,找出距离最远的一对。
要“旋转该线段”(以查找每个连续边界点),请沿着垂直于用于上一个边界点的线段的方向“最远”的点,并构建一条新的线段,在最后一个边界点和那个“下一个”点之间。然后验证在由该新线形成的新垂直方向或上一个线段的垂直方向中是否有更远的其他点。如果在与该线段或上一个线段垂直的方向上没有其他“更远”的点,则这是下一个边界点的正确选择。如果有这样一个点,请切换到该点并重新测试。
O(log n)
,因此检查这些点的期望运行时间为O(log^2 n)
。 - Jesse Beder