模板
旋转卡壳就是使用一对平行线卡着凸包进行旋转,正好被卡住的一对点称为对踵点对。
逆时针枚举边的时候,对踵点对的变化也是逆时针的,所以当前边所对应的最远点可以紧接着上一次的继续计算。
旋转卡壳可以计算凸包的直径,时间复杂度为O(n)。
double rotatingCalipers(P* qs,int n){
double ans=0;
qs[n]=qs[0];
int q=1;
for(int i=0;i<n;i++){
while(Cross(qs[q]-qs[i+1],qs[i]-qs[i+1])<Cross(qs[q+1]-qs[i+1],qs[i]-qs[i+1])){
q=(q+1)%n;
}
ans=max(ans,max(dis(qs[q],qs[i]),dis(qs[q+1],qs[i+1])));
}
return ans;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步