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]));
}