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

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

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

#include <stdio.h>
#include <math.h>
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值