旋转卡(qia)壳 平面最远点对

这个标题我以前一直读错。。。

旋转卡壳最基本应用便是求平面最远点对,被一对卡壳正好卡住的对应点对称为对踵点(Antipodal point),这里有一个结论,最远点对必然属于对踵点集。

引用别人的证明(加些许自己注解):http://purety.jp/akisame/oi/TJU/

                                     

设∠1+∠2≤180°,∠3+∠4≤180°。那么如果∠1≥∠4,则由于∠1+∠2≤180°,一定可过B、E作两条平行线使边AB落在其中一条上;反之,则可过B、E作两条平行线使DE落在其中一条上(相当于旋转卡壳,是其中某个卡壳与某边重合)。也就是说,当一条线段截凸包所成的两组“同旁内角”之和均不超过180°时,这条线段的两个端点是一对对踵点。因此,若一条线段的两个端点不是对踵点,则必有一组同旁内角之和大于180°。

(图二)因为有一组同旁内角之和大于180°,所以这两个角中必有一个角大于90°(不妨设∠ABE>90°)。这种情况下显然有AE>BE,因此BE不是最远距离点对。也就是说,不是对踵点的点对一定不是最远距离点对,所以最远距离点对一定是对踵点。

有了这些结论和证明,我们便可以轻松解题,提供一个远短于官方代码的版本(三点不共线)。

其中,若凸包为顺时针,cross(st[i],st[j],st[i+1])>cross(st[i],st[j+1],st[i+1]) 要改为"<"。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值