私が持っているポイントがポリゴンの内側にある場合、JavaScriptを探しています。私は点がポリゴンの中にあるかどうかを比較するためにレイキャスティングアルゴリズムを使用しています。ポリゴンの中のポイントjavacript
場合によってはアルゴが完璧に動作しています。しかし、いくつかのケースでは、ポイントがポリゴンの内側にあるときでさえ、ポイントが外側にあることを示しています。
! 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は内部とはみなされません。アルゴに何か間違っていますか?どんな助けもありがとう。
多角形は常に四角形ですか? –
いいえ、それはどんな形でもかまいません。 – gurmandeep
私が知っているアルゴは、凸多角形で働くので、凸多角形ではないものがある場合、それを複数の凸多角形に分割する必要があります。次に、各ポリゴンの点をソートし、それを繰り返します。アルゴリズムの複雑さはn * lognです。これはあなたを満足させ、それを完全に記述したいのですか? (それは3Dではなく2Dです) –