判断点是否在三角形内的方法

时间:2021-08-30 10:24:24

一、调用API。

BOOL PtInRegion(
  HRGN hrgn,  // handle to region
  int X,      // x-coordinate of point
  int Y       // y-coordinate of point
);

HRGN CreatePolygonRgn(
  CONST POINT *lppt,  // array of points
  int cPoints,        // number of points in array
  int fnPolyFillMode  // polygon-filling mode
);

二、

设三角形为ABC  所判断点为P  area表示面积函数

判断area(PAB)+area(PAC)+area(PBC)-area(ABC)与0关系

大于0  则在三角形外部

等于0  则在三角形内部 

 

三、

设三角形三个点
A(a1,a2),B(b1,b2),C(c1,c2)
三条边方程
BC:fa(x,y)=0
AC:fb(x,y)=0
AB:fc(x,y)=0
以BC为例,在三角形内的点必须与点A在BC的同侧
所以对于点D(x,y)
在三角形内首先要满足fa(x,y)*fa(a1,a2)>0
其他边也同理
所以只要比较
fa(x,y)*fa(a1,a2)
fb(x,y)*fb(b1,b2)
fc(x,y)*fc(c1,c2)
这三个数的正负性
1三个数都是正数:D在三角形内
2至少有一个负数:D在三角形外
3有且只有一个0,另两个为正数:在三角形边上
4有且只有一个0,一个正数一个负数:在三角形边的延长线上,也算在三角形外,因为满足2
5有二个0:在三角形的顶点上
6不可能出现3个0,或3个负数,或一个0两个负数的情况