我有一组点可以在图表上绘制,如果连接会形成形状(有界框可能是正确的术语?)。如何找到另一个点是否在此框内?
这里有一个示例框:
var box = [[181,7500],[181,11279],[185,12500], [196.4,12500],[196.4,7500]];
var point_inside_box = [188,10000];
var point_outside_box = [182,12000];
如果您将其显示如下,很容易看出这些点是否在框外:
有没有办法在javascript中用一点数学做这个?
答案 0 :(得分:2)
这样做的一种方法是选择一个方向,并确定如果你理论上永远朝这个方向继续前进,那么有多少边交叉。如果它是一个奇数,则该点在框内。如果它是偶数,则该点在框外。
参考: http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/
答案 1 :(得分:1)
其中一种方法是检查向量的所有叉积(PA_i,PA_ {i + 1})是否具有相同的符号。如果是这样,那么点在里面,否则在外面。 (P是要检查的点,多边形是A_1A_2 ... A_n。)
在二维情况下,向量(a, b)
,(c, d)
的叉积只是数字ad - bc
。
如果您的点A_i形成凸多边形,则此计算有效。