第一次排位赛 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);
}
}
标签:Farm,排位赛,xc,cin,第一次,int,double,xu 来源: https://www.cnblogs.com/TimMCBen/p/15982229.html