如下图所示,已知四个点A,B,C,D的坐标分别是(x1,y1)
,(x2,y2)
,(x3,y3)
,(x4,y4)
,如何确定任意一个点(x,y)
是否在这个A、B、C、D四个点组成的矩形区域以内?
部分思路
面积法
思路说明:假设任意点为M(x,y)
。如果点M在区域内,那么必然有四个三角形面积S△AMB+S△BMC+S△CMD+S△DMA等于矩形ABCD的面积。特别的,如果这四个中只要有一个三角形的面积为0,意味着点M处在某一条边上,比如S△AMB=0则说明M位于线段AB上,如果加起来的值大于了矩形面,说明在矩形区域外。这种方法对任意的不规则多边形适用,但是需要大量的计算。
垂直线段法
计算点到直线AB、CD、AD、BC的距离之和,如果等于AB到CD的距离加上AD到BC的距离则在区域内,如果大于则在区域外。
点积法
满足条件 (0<AM⋅AB<AB⋅AB)∧(0<AM⋅AD<AD⋅AD)
其中AM为向量(x-x1,y-y1)
,AB为向量(x2-x1,y2-y1)
,AD为向量(x4-x1,y4-y1)
参考链接:
https://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle
https://stackoverflow.com/questions/2752725/finding-whether-a-point-lies-inside-a-rectangle-or-not
网友评论