다음 코드 단편은 here에서 가져 왔습니다. 이 문제의 해결책은 HDU 2823입니다.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;
그가 달성하려고하는 무엇 :이 라인을 이해할 수없는 것
?
하는 것은 조심 투생 G. -
같은 아이디어 뒤에 직관
멋지게 본 논문 "Solving Geometric Problems with the Rotating Calipers" 에 예시되어있다. 예를 들어'eps '의 가치는 - 그것의 사용과 마찬가지로 - 매우 중요합니다. 당신은 "엡실론 가치"의 일반적인 사용에 익숙합니까? – usr2564301와우! 나는 수학을 좋아하지만 그런 긴 문자열에있을 때는 그렇지 않다. –