天天看點

[藍橋杯2018決賽]三角形面積

Submit clink~

[藍橋杯2018決賽]三角形面積

給出三點坐标,求面積!

法一:通過餘弦定理   

[藍橋杯2018決賽]三角形面積

  、正弦定理 

[藍橋杯2018決賽]三角形面積

 求面積~ 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))

double a[10][10];
int main() {
//	for(int i=1; i<=3; i++)
//		cin>>a[i][0]>>a[i][1];
	a[1][0]=2.3,a[1][1]=2.5;
	a[2][0]=6.4,a[2][1]=3.1;
	a[3][0]=5.1,a[3][1]=7.2;
	double q1=pow(fabs(a[1][0]-a[2][0]),2)+pow(fabs(a[1][1]-a[2][1]),2);
	double q2=pow(fabs(a[1][0]-a[3][0]),2)+pow(fabs(a[1][1]-a[3][1]),2);
	double q3=pow(fabs(a[2][0]-a[3][0]),2)+pow(fabs(a[2][1]-a[3][1]),2);
//	cout<<q1<<" "<<q2<<" "<<q3<<endl;
//	cout<<sqrt(q1)<<" "<<sqrt(q2)<<" "<<sqrt(q3)<<endl;
	double c=(q1+q2-q3)/(2.0*sqrt(q1)*sqrt(q2));
	double C=acos(c);
	double S=0.5*sqrt(q1)*sqrt(q2)*sin(C);
	printf("%.03lf\n",S);
	return 0;
}
/*
2.3 2.5
6.4 3.1
5.1 7.2
*/
           

法二:三點-->三邊-->海倫公式求面積

[藍橋杯2018決賽]三角形面積
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))

double len(double x1,double y1,double x2,double y2) {
	return sqrt(pow(fabs(x1-x2),2)+pow(fabs(y1-y2),2));
}
int main() {
	double x1=2.3,y1=2.5,x2=6.4,y2=3.1,x3=5.1,y3=7.2;
	double q1=len(x1,y1,x2,y2);
	double q2=len(x1,y1,x3,y3);
	double q3=len(x2,y2,x3,y3);

	double p=0.5*(q1+q2+q3);
	double S=sqrt(p*(p-q1)*(p-q2)*(p-q3));
	printf("%.03lf\n",S);
	return 0;
}
/*
2.3 2.5
6.4 3.1
5.1 7.2
*/
           

繼續閱讀