第一次排位赛 I. Farm

2022/3/8 23:19:20

本文主要是介绍第一次排位赛 I. Farm,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第一次排位赛 I. Farm

一道数学二维几何问题,少用高中的方程思维,多用一些math库里的东西,像反三角函数这样,直接计算出角度值进而计算就可。
记得 保留小数位数

#include<bits/stdc++.h>
using namespace std;
signed main()
{
	int t;
	cin>>t;
	int k=0;
	double s1,s2;
	while(t--)
	{
		k++;
		double xc,yc,r;
		double xb,yb,xu,yu;
		cin>>xc>>yc>>r;
		cin>>xb>>yb>>xu>>yu;
		cout<<"Case "<<k<<": ";
		//先为左顶点设上未知数 
		double x0=xb,y0=yu;
		//计算 
		double deta_y=sqrt(r*r-(x0-xc)*(x0-xc));
		double deta_x=sqrt(r*r-(y0-yc)*(y0-yc));
		//计算相交的两个点的横纵坐标 
		double y=yc-deta_y;
		double x=xc+deta_x;
		//应该是  {x0,y}和{x,y0}
		//写出一个三角形的面积 
		s1=(y0-y)*(x-x0)/2.0;
		double x3=x0-xc;
		double y3=y-yc;
		double x4=x-xc;
		double y4=y0-yc;
		//写出圆上弦和半径构成的三角形的面积 
		s2=(x3*y4-x4*y3)/2.0;
//		cout<<"s2:"<<s2<<endl;
		//用反三角函数计算出角度值 后面用扇形面积公式得出结果 
		double sta=acos((x3*x4+y3*y4)/(sqrt(x3*x3+y3*y3)*sqrt(x4*x4+y4*y4)));
		//打印的时候记得 小数点保留位数 
		printf("%.5llf\n",s1+1/2.0*sta*r*r-s2);
	}
}


这篇关于第一次排位赛 I. Farm的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程