我正在使用JavaScript编写程序,目的是判断一个点是否在多边形内部。我使用了射线投射算法来比较点是否在多边形内部。
对于某些情况,该算法可以完美地工作。但是对于某些情况,即使所有点都在多边形内部,它也会显示该点在外部。
以下是父多边形和子多边形的点数组。
为什么A3的点没有被考虑在内?算法有问题吗?任何帮助都将不胜感激。
对于某些情况,该算法可以完美地工作。但是对于某些情况,即使所有点都在多边形内部,它也会显示该点在外部。
!https://www.dropbox.com/s/rpxqnw9re3q6vsi/Screen%20Shot.png?dl=0
标记为A1的区域是父多边形,A2和A3位于父多边形内。以下是我使用的函数来检查点是否在内部。
function isPointInside(point, vs)
{
// ray-casting algorithm based on
var x = point[0], y = point[1];
var inside = false;
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++)
{
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
var intersect = ((yi > y) != (yj > y))&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
};
以下是父多边形和子多边形的点数组。
A1 Array
0[0, 0] (2)
1[6096000, 0] (2)
2[6096000, 0] (2)
3[6096000, 6096000] (2)
4[6096000, 6096000] (2)
5[0, 6096000] (2)
6[0, 6096000] (2)
7[0, 0] (2)
8[0, 0] (2)
9[0, 0] (2)
A2 Array (10)
0[0, 0] (2)
1[0, 3048000] (2)
2[0, 3048000] (2)
3[1524000, 3048000] (2)
4[1524000, 3048000] (2)
5[1524000, 0] (2)
6[1524000, 0] (2)
7[0, 0] (2)
8[0, 0] (2)
9[0, 0] (2)
A3 Array (10)
0[4572000, 0] (2)
1[4572000, 6096000] (2)
2[4572000, 6096000] (2)
3[6096000, 6096000] (2)
4[6096000, 6096000] (2)
5[6096000, 0] (2)
6[6096000, 0] (2)
7[4572000, 0] (2)
8[4572000, 0] (2)
9[4572000, 0] (2)
为什么A3的点没有被考虑在内?算法有问题吗?任何帮助都将不胜感激。