找出一个点是否落在有界框内

时间:2012-06-14 16:09:44

标签: javascript math

我有一组点可以在图表上绘制,如果连接会形成形状(有界框可能是正确的术语?)。如何找到另一个点是否在此框内?

这里有一个示例框:

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];

如果您将其显示如下,很容易看出这些点是否在框外:

bounding box

有没有办法在javascript中用一点数学做这个?

2 个答案:

答案 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形成多边形,则此计算有效。