MnZn求助简单计算几何
查看原帖
MnZn求助简单计算几何
285617
黑影洞人楼主2022/11/14 10:48
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int T;
const double pi=3.14159265;
double a,l1,l2,l3; 
signed main(){
	scanf("%d",&T);
	while(T--){
		scanf("%lf%lf%lf%lf",&a,&l1,&l2,&l3);
		double b=a*l1/l2,c=a*l1/l3;
		double p=(a+b+c)/2;
		printf("%.3lf ",sqrt(p*(p-a)*(p-b)*(p-c)));
		double xt=acos((a*a+b*b-c*c)/(2*a*b));
		double zxj=acos((a*a+c*c-b*b)/(2*a*c));
		double yxj=acos((b*b+c*c-a*a)/(2*b*c));
      //余弦定理求出三个夹角
		double zxt=pi/2-xt,bzxj=zxj-zxt;
        //指向b的中线与a,c分别的夹角
		//垂心坐标 
		double zbx=c-b*cos(yxj);
		double zby=tan(bzxj)*zbx;
		//重心坐标
		double cmidx=c/2,cmidy=0;
        //c的中点坐标
		double upx=zbx,upy=b*sin(yxj);
        //c边的所对的顶点的坐标
		double k1=(upy-cmidy)/(upx-cmidx);
        //两直线的斜率
		double b1=cmidy-cmidx*k1;
        //两直线的截距
		double zxx=l3*k1+cmidx,zxy=zxx*k1+b1;
        //重心坐标
		printf("%.3lf\n",sqrt((zxx-zbx)*(zxx-zbx)+(zxy-zby)*(zxy-zby))); 
        //勾股定理求出直线距离
	}
	return 0;
}



2022/11/14 10:48
加载中...