判断点P是否在三角形ABC内部

判断点P是否在三角形ABC内部
(1)计算叉乘
MA = PA×PB
MB = PB×PC
MC = PC×PA

(2)叉乘算法
PA×PB = (A-P)×(B-P)
       = (Xa-Xp)(Yb-Yp)-(Ya-Yp)(Xb-Xp)

float Cross(Vector2 p, Vector2 a, Vector2 b)
{
  return (a.x-p.x)*(b.y-p.y)-(a.y-p.y)*(b.x-p.x);
}



(3)判定
如果全部大于0或者全部小于0(由于三角形三个点顺序取反了)则P在三角形内部
否则在边线上或者在三角形外部.

bool IsInTriangle(Vector2 a, Vector2 b, Vector2 c, Vector2 p)
{
  float ma = Cross(p, a, b);
  float mb = Cross(p, b, c);
  float mc = Cross(p, c, a);
  return (ma>0 && mb>0 && mc>0) || (ma<0 && mb<0 && mc <0);
}

 

(4)必要条件判定

<1>如果点P不在三角形的包围矩形内, 则点不在三角形内

<2>如果点P到三角形内某个点G(比如重心, 或者某个顶点)的距离,大于所有三个点到这个点G的距离, 则点P不在三角形内


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值