一 海伦公式
如果有一个三角形,它的三边分别为 $a, b ,c $, 则三角形的面积为 A = s ( s − a ) ( s − b ) ( s − c ) A = \sqrt{s(s-a)(s-b)(s-c)} A=s(s−a)(s−b)(s−c) , s = a + b + c 2 s = \frac{a+b+c}{2} s=2a+b+c
二 判断一点和三角形的关系
三角形的三点为 A , B , C A, B, C A,B,C,我们需要判断的点是 D D D
如果 S △ A B C = S △ B C D + S △ A B D + S △ A C D S\triangle ABC = S\triangle BCD + S\triangle ABD + S\triangle ACD S△ABC=S△BCD+S△ABD+S△ACD 点 D D D在 △ A B C \triangle ABC △ABC 的内部,否则 D D D 在三角形的外部
三 example and code
#include<iostream>
#include<cmath>
using namespace std;
int s,t,u,v,w,x,y,z;
char ch;
double m(int a,int b,int c,int d,int e,int f)//海伦公式算三角形面积
{
double x,y,z,p;
x=sqrt((a-c)*(a-c)+(b-d)*(b-d));
y=sqrt((a-e)*(a-e)+(b-f)*(b-f));
z=sqrt((c-e)*(c-e)+(d-f)*(d-f));
p=(x+y+z)/2;
return sqrt(p*(p-x)*(p-y)*(p-z));
}
int main()
{
cin>>ch>>s>>ch>>t>>ch;//点A
cin>>ch>>u>>ch>>v>>ch;//点B
cin>>ch>>w>>ch>>x>>ch;//点C
cin>>ch>>y>>ch>>z>>ch;//点D
double abc,abd,acd,bcd;//几个三角形的面积
abc=(int)m(s,t,u,v,w,x)*100;
abd=(int)m(s,t,u,v,y,z)*100;
acd=(int)m(s,t,w,x,y,z)*100;
bcd=(int)m(u,v,w,x,y,z)*100;
if((s==y&&t==z)||(u==y&&v==z)||(w==y&&x==z))
{
cout<<4; //4
return 0;
}
if(abd+acd+bcd>abc)
{
cout<<2; //2
return 0;
}
else
{
if(!abc||!abd||!acd||!bcd)
{
cout<<3; //判断3
return 0;
}
cout<<1;//1
}
}