2508:Conic distance
keyword
空間幾何 C++
概要
円錐の表面上の2点が与えられる。円錐上を通る最小距離を求める問題。
定石どおり、展開図上で考えて直線の距離に落とす。
int main(){ double r, h, l, d1, a1,b1, d2, a2,b2, b3,th; complex<double> p1, p2, p3; while(scanf("%lf%lf%lf%lf%lf%lf",&r,&h,&d1,&a1,&d2,&a2)!=EOF){ l = sqrt(r*r + h*h); th = (2*PI*r)/l; b1 = a1*th/360; b2 = a2*th/360; if(b1 >= b2 && fabs(b2-b1) > fabs(b2-(b1-th))) b1 -= th; else if(b2 >= b1 && fabs(b1-b2) > fabs(b1-(b2-th))) b2 -= th; p1 = polar(d1, b1); p2 = polar(d2, b2); printf("%.2f\n", abs(p2-p1)); } return 0; }