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

来源:互联网 发布:淘宝修改评价内容 编辑:程序博客网 时间:2024/05/04 13:05
判断点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不在三角形内


0 0
原创粉丝点击