2018-team4-modules-旋转卡壳
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
{{{
double dis(const Point &p,const Point &l1,const Point &l2){
return fabs((double)((p-l2)*(l1-l2))) / (l1 - l2).length();
}
{
int q = 0;
double ans = R*2;
for(int i = 0;i < m-1;++ i){
while(dis(ch[q],ch[i],ch[i+1]) <= dis(ch[(q+1)%m],ch[i],ch[i+1])){
++ q;
if(q >= m) q -= m;
}
ans = min(ans,dis(ch[q],ch[i],ch[i+1]));
}
while(dis(ch[q],ch[m-1],ch[0]) <= dis(ch[(q+1)%m],ch[m-1],ch[0])){
++ q;
if(q >= m) q -= m;
}
ans = min(ans,dis(ch[q],ch[m-1],ch[0]));
}
}}}
double dis(const Point &p,const Point &l1,const Point &l2){
return fabs((double)((p-l2)*(l1-l2))) / (l1 - l2).length();
}
{
int q = 0;
double ans = R*2;
for(int i = 0;i < m-1;++ i){
while(dis(ch[q],ch[i],ch[i+1]) <= dis(ch[(q+1)%m],ch[i],ch[i+1])){
++ q;
if(q >= m) q -= m;
}
ans = min(ans,dis(ch[q],ch[i],ch[i+1]));
}
while(dis(ch[q],ch[m-1],ch[0]) <= dis(ch[(q+1)%m],ch[m-1],ch[0])){
++ q;
if(q >= m) q -= m;
}
ans = min(ans,dis(ch[q],ch[m-1],ch[0]));
}