额
就是相似+对勾函数
如图
然后附上代码
#include<bits/stdc++.h>
using namespace std;
int n;
double H,h,D,a;
int main(){
scanf("%d",&n);
while(n--){
scanf("%lf%lf%lf",&H,&h,&D);
a=H-sqrt(D*H-D*h);
if(a<0)printf("%.3f\n",D*h/H);
else if(a>=h)printf("%.3f\n",h);
else printf("%.3f\n",H+D-2*sqrt(D*H-D*h));
}
}
/*
3
2 1 0.5
2 0.5 3
4 3 4
*/