PIPソリューションの基本的な説明は重要なものの半分を欠けているIMHO、すなわち、ポリゴンのラインが実際に交差されていたためにテストするかを決定する方法。ちょうどMichałPowagaのソリューションの場合は、あなたのために働いていない。
ポイントP(x、y)がポイントです。点P0(x0、y0)とP1(x1、y1)は線を形成する。私たちが交差するポリラインの数を見るために描画する想像線は水平です。
1)まずラインは明らかに交差されない上または線以下である、実際に横断可能(あなたが描く想像線に平行なラインまたはライン)であるかを決定します。
For each line of the polygon, compute weather P would be able to cross it.
If ((x0 < x < x1) OR (x0 > x > x1)) add line to some list.
2)を決定します残りの行(リスト中のもの)のどちら実際交差する:
For each line in list, compute
result = (y - y0) * (x1- x0) - (x - x0) * (y1 - y0)
If (result < 0) the line was crossed, increment a counter.
If (result == 0) the point is ON the line, increment a counter if thats supposed
to count as the point having crossed the line, else don't ...
If (result > 0) the line was not crossed, so just continue with the loop.
[Note: double check weather I got the sides right ...]
3)次に、カウンタはあなたの点が内部で奇数である場合、それも、またはゼロの場合、それはポリゴンの外側にあります。
Jasonwによって追加されたジオロケーションタグが削除されました。ジオロケーションとして "地理座標のセットではなく、意味のある場所(例:ストリートアドレス)の決定に重点を置いています" [Wikipedia] –
失敗する?そのコードをスキャンすることは、完全に優れたレイトレーシング実装のようです。何が問題なの? –