1 条题解

  • 0
    @ 2025-4-10 20:50:40

    解题思路

    首先,将圆锥展开成平面扇形。圆锥展开后扇形的弧长等于圆锥底面的周长2πr2\pi r,扇形的半径l为圆锥的母线长,可根据勾股定理l=r2+h2l = \sqrt{r^2 + h^2}计算。 对于圆锥表面上的点p1和p2,在展开后的扇形中,它们到扇形圆心(即圆锥顶点)的距离分别为d1和d2,对应的圆心角θ1\theta1θ2\theta2可根据圆锥坐标中的角度A1和A2以及扇形的性质计算得到。 然后,在展开后的扇形平面上,根据余弦定理计算两点p1和p2之间的距离。余弦定理公式为c2=a2+b22abcosθc^2 = a^2 + b^2 - 2ab\cos\theta,其中a=d1a = d1b=d2b = d2θ=θ1θ2\theta = |\theta1 - \theta2|θ\theta为两点所对应的圆心角之差)。

    代码

    #include<iostream>
    #include<cmath>
    using namespace std;
    const double pi=acos(-1.0);
     
    int main()
    {
    	double r,h,d1,A1,d2,A2;
    	while(scanf("%lf%lf%lf%lf%lf%lf",&r,&h,&d1,&A1,&d2,&A2)==6){
    		double l=sqrt(h*h+r*r);	
    		double bottomL=2*pi*r;
    		double alpha=bottomL/l;
    		double beta=(A1-A2)*pi/180;
    		if(beta<0)
    			beta+=2*pi;
    		beta=min(beta,2*pi-beta);
    		double gamma=alpha*beta/(2*pi);
    		printf("%.2lf\n",sqrt(d1*d1+d2*d2-2*d1*d2*cos(gamma))+1e-8);
    	}
    	return 0;	
    } 
    
    • 1

    信息

    ID
    1509
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者