質問

比較的単純なことを解決する必要があります。n頂点の凸2Dポリゴンと、「y」座標を持つ水平(!)ラインがあります。必要なことは1つだけです。ポリゴンがこのラインと交差しているかどうか(つまり、2つの交差点があるかどうか)を確認することです。

私が考えることができる最速の方法は、ポリゴン内で最小/最大y座標を見つけ(2回の比較と2回のストアでn回繰り返されるループ)、その後、min y< = y<最大y。

どういうわけか、これはもっと「数学的に」解決できると思う。しかし、私は常に遅いコードで終わります(たとえば、ベクトルの方法-n [i]とn [i + 1]の差を計算し、それらを乗算し、加算する必要があります-2cmps + storesよりはるかに遅いです。

役に立ちましたか?

解決

ポリゴンにy1<のポイントがあるかどうかを確認するだけです。 yとy2の1つ> y。このような2つのポイントを見つけたらすぐに完了です。 y座標でポイントにインデックスを付けることができる場合は、高速ルックアップにする必要があります。

他のヒント

水平の2Dラインの場合、はい、説明した方法はおそらく最速です。チェックを途中で終えて、最小値と最大値が>であるかのように、短絡させることもできます。および<あなたのY値は交差点を持っています。

毎回rawで実行する必要がある場合、それよりも速くするためのトリックはおそらく見つかりません。

ポリゴンで最小/最大Y値をキャッシュできる場合、テストを実行するたびに各頂点をループしないことで時間を節約できます。

ポリゴンにアラインされた境界ボックスがある場合、ポリゴンの代わりにボックスの範囲に対してテストし、同じ結果をより速く取得できます。

別のアプローチは、ここで説明されています: 線が凸多角形と交差する場合の最適なアルゴリズム。 しかし、直交線で処理しているため、少し単純化できます:)。したがって、合計の複雑さは、値を保存しないlog Nです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top