9

ポイントが座標系の四隅にあるかどうかを判断する必要があるJSプログラムに取り組んでいます。

誰かが私を答えの方向に向けることができますか?

凸四角形と呼ばれるものを見ています。つまり、すべての角度が 180° より小さい 4 つの非常にランダムに選択されたコーナー位置です。

ありがとう。

4

3 に答える 3

12

比較的単純な方法が 2 つあります。最初のアプローチは、点から「無限」(実際には多角形の外側の任意の点) まで光線を描画し、光線が交差する多角形の辺の数を数えることです。カウントが奇数の場合にのみ、ポイントはポリゴンの内側にあります。

2 番目の方法は、ポリゴンを順番に周回し、頂点 v iと v i+1のペアごとに(必要に応じて最初の頂点にラップする)、量 (x - x i ) * (y i+1 - y i ) - (x i+1 - x i ) * (y - y i )。これらの量がすべて同じ符号を持っている場合、その点は多角形の内側にあります。(これらの量は、ベクトル (v i+1 - v i ) と (p - v i )の外積の Z 成分です。それらがすべて同じ符号を持つという条件は、p がオンであるという条件と同じです。すべてのエッジの同じ側 (左または右)。

どちらのアプローチも、点がエッジ上または頂点上にある場合に対処する必要があります。最初に、そのようなポイントをポリゴンの内側にあるかどうかをカウントするかどうかを決定する必要があります。次に、それに応じてテストを調整する必要があります。わずかな数値の丸め誤差により、どちらの方法でも間違った答えが返される可能性があることに注意してください。それはあなたが一緒に暮らさなければならないものです。

凸状の四角形があるため、別のアプローチがあります。任意の 3 つの頂点を選択し、選択した 3 つの頂点によって形成される三角形に関して、点と 4 番目の頂点の重心座標を計算します。ポイントの重心座標がすべて正で、すべてが 4 番目の頂点の重心座標よりも小さい場合、そのポイントは四角形の内側にあります。

PSかなりの数の戦略を一覧表示している素敵なページを見つけました。それらのいくつかは非常に興味深いものです。

于 2013-03-19T03:30:12.780 に答える
0

ワインディング、または光線追跡法を使用する必要があります。

ワインディングを使用すると、線分で作成された形状の内部に点があるかどうかを判断できます。

基本的に、各線分と点の外積を取り、すべての結果を合計します。これは、一連の星座線が与えられた場合に、星が星座にあるかどうかを判断するために私が行った方法です。他の方法があることがわかります..

http://en.wikipedia.org/wiki/Point_in_polygon

このためのコードがいくつかの場所にあるはずです。

于 2013-03-19T03:29:46.977 に答える