旋转卡壳凸包间最小距离

来源:互联网 发布:数据挖掘技术与应用 编辑:程序博客网 时间:2024/04/27 19:03

Solution

输入两个分别有 m 和 n 个顺时针给定顶点的凸多边形 P 和 Q
计算 P 上 y 坐标值最小的顶点(称为 yminP ) 和 Q 上 y 坐标值最大的顶点(称为 ymaxQ)。
为多边形在 yminP 和 ymaxQ 处构造两条切线 LP 和 LQ 使得他们对应的多边形位于他们的右侧。 此时 LP和 LQ 拥有不同的方向, 并且 yminP 和 ymaxQ 成为了多边形间的一个对踵点对。
计算距离(yminP,ymaxQ) 并且将其维护为当前最小值。
顺时针同时旋转平行线直到其中一个与其所在的多边形的边重合
1.只有一条线与边重合, 那么只需要计算“顶点-边”对踵点对和“顶点-顶点”对踵点对距离。 都将他们与当前最小值比较, 如果小于当前最小值则进行替换更新。
2.两条切线都与边重合, 那么情况就更加复杂了。 如果边“交叠”, 也就是可以构造一条与两条边都相交的公垂线(但不是在顶点处相交), 那么就计算“边-边”距离。 否则计算三个新的“顶点-顶点”对踵点对距离。 所有的这些距离都与当前最小值进行比较, 若小于当前最小值则更新替换。
重复执行步骤4和步骤5, 直到新的点对为(yminP,ymaxQ)
输出最大距离。

Tips

1.点乘与叉乘
2.计算几何长到怀疑人生==

Code

AC

0 0