已知一个点坐标和三角形的三个点坐标,判断点与三角形位置

本文用到了海伦公式,其实可以用坐标面积公式,会更加简单。

三角形各顶点可以和点坐标连线,构成三个三角形(点不在三角形边上),通过面积比较法可以知道点与三角形位置关系,可以思考一下

#include 
#include 
int main()
{double a,b,c,d,e,f,g,h,AB,BC,AC,AO,BO,CO,Saob,Sboc,Saoc,Sabc,P,Q,R,S,T;
scanf("%lf%lf\n",&a,&b);//第四个点 O
scanf("%lf%lf\n",&c,&d);//A
scanf("%lf%lf\n",&e,&f);//B
scanf("%lf%lf",&g,&h);//C
AB=sqrt((c-e)*(c-e)+(d-f)*(d-f));
BC=sqrt((e-g)*(e-g)+(f-h)*(f-h));
AC=sqrt((c-g)*(c-g)+(d-h)*(d-h));
AO=sqrt((a-c)*(a-c)+(b-d)*(b-d));
BO=sqrt((a-e)*(a-e)+(b-f)*(b-f));
CO=sqrt((a-g)*(a-g)+(b-h)*(b-h));
T=(AB+AC+BC)/2;
Sabc=sqrt(T*(T-AB)*(T-BC)*(T-AC));
P=(AO+BO+AB)/2;
Saob=sqrt(P*(P-AO)*(P-BO)*(P-AB));
Q=(AO+CO+AC)/2;
Saoc=sqrt(Q*(Q-AO)*(Q-CO)*(Q-AC));
R=(BO+CO+BC)/2;
Sboc=sqrt(R*(R-BO)*(R-CO)*(R-BC));
S=Saoc+Sboc+Saob;
if((S-Sabc<0.0000001)&&Saob!=0&&Saoc!=0&&Sboc!=0)printf("In");
else if(Saob==0||Saoc==0||Sboc==0)printf("On");
else if((Saob+Saoc+Sboc)>Sabc) printf("Out");
return 0;
}

你可能感兴趣的:(算法,开发语言)