【发布时间】:2016-07-30 17:56:54
【问题描述】:
以下代码 sn-p 取自 here。就是这个问题的解决方案HDU 2823。
#define eps 1e-9
double rc(point pp[],point qq[],int n,int m)
{
int q=0;
int p=0;
for(int i=0;i<n;i++)
if(pp[i].y-pp[p].y<-eps)
p=i;
for(int i=0;i<m;i++)
if(qq[i].y-qq[q].y>eps)
q=i;
pp[n]=pp[0];
qq[m]=qq[0];
double tmp,ans=1e99;
for(int i=0;i<n;i++)
{
while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps)
q=(q+1)%m;
if(tmp<-eps)
ans=min(ans,dist_p_to_seg(qq[q],pp[p],pp[p+1]));
else
ans=min(ans,dist_seg_to_seg(pp[p],pp[p+1],qq[q],qq[q+1]));
p=(p+1)%n;
}
return ans;
}
pp[] 和 qq[] 是两个不同的凸包。 p 是pp 凸包的最高点,q 是qq 凸包的最低点。
我似乎无法理解这一行:
while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps)
q=(q+1)%m;
他想达到什么目的?
【问题讨论】:
-
在询问代码的 sn-ps 时要小心。例如,
eps的值非常重要 - 就像它的使用一样。您熟悉“epsilon 值”的常见用法吗? -
哇!我喜欢数学,但不喜欢这样长的字符串:)
标签: c++ computational-geometry raycasting convex-hull