Submit clink~
[藍橋杯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
*/
法二:三點-->三邊-->海倫公式求面積
#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
*/