効率的なアルゴリズムを探すことは、最も近い線(垂直距離によって定義された)を任意の点に迅速に見つける

cs.stackexchange https://cs.stackexchange.com/questions/125543

  •  29-09-2020
  •  | 
  •  

質問

私は、既知の始点と終点を備えた2Dの線の大きさの1つの線を持っており、それらのエッジの最も近い(またはそれらの辺の延長された範囲で定義された)を見つけたい(またはそれらの開始点と終点を過ぎる)を見つけたいと思います。)任意の点に

これまでのところ、各行に沿って一連のサンプルポイントを生成し、KDツリーを使用して点について最も近い隣接問題を解決するためのものです。しかし、これは不正確で、長い線のための多数のサンプルを必要としています。

私はこれを見ました: 最寄りのエッジのアルゴリズムポイントに関する検出(全方向)

しかし、それは掃引法と少数の有限長の線に頼っていました。

役に立ちましたか?

解決

全ての行は、 Planar細分を定義し、各多角形領域は有限数の線分または光線によって制限されている。したがって、最初に、クエリポイントを含む(おそらく無限の)領域を見つける必要があります。その後、この時点から最小の距離でその境界線を選択することができます。

Point Location Dowers を解決するために、平面細動を前処理する方法はたくさんあります。対数時間の複雑さを伴う。いくつかの階層データ構造は通常考案されており、それは任意のクエリポイントに対してトラバースされることができ、そしてトラバースパスの長さは $ Oによって制限されることが証明されました(log(n))。 ここで、 $ n $ は、領域の数です。コメントで言及されている@pseudonomは、バイナリスペースパーティション化(BSP)を使用することもできます。 BSPツリー - それはまた、クエリポイントを含む領域を効率的に見つけることを可能にするであろう階層データ構造(バイナリツリー)です。あなたの問題がこのBSPアプローチに適しているようです。

申し訳ありませんが、 $ o(n)$ 境界セグメント/光線を持つ地域を取得できます。 $ n $ は行数です。この困難を克服するために、各地域を voronoi図、その境界セグメントに全般化することができます。光線そのような洗練された地域の総数は、 $ o(n ^ 2)$ によって制限されることが簡単です。これはまだ最も近い回線に対数的な時間の複雑さを与えます。探す。しかしながら、平均的な場合、多くの境界セグメント/光線を有するこれらの領域は全ての地域の小さな割合を補うであろう - 平均的には、地域境界を越えてループするだけで最も近い境界線分/光線を迅速に選択することができる。


あなたが働いている幾何学的構造の一般的なプロパティについてもっと知りたいのなら - この Wikiページ。

他のヒント

あなたの目標を誤解しているかもしれません - 彼らはそれらに沿って2つの特定のポイントによって定義されていても、エッジが両方向に続くと仮定しますか?あなたが距離が垂直距離で定義されていると言うので、私はそうします。その場合、これはどうですか -
1.線分ごとに、角度を計算します。
2.線分に垂直な角度で任意の点を通過する想像上の線を描きます。
3.線分と新しい虚数線の間の交点を見つけ、その点と任意の点の間の距離を見つけます。最低距離を維持します。
線が無限に長くない場合は、距離を確認するときに、最小値(始点までの距離、終点までの距離)をチェックしてください。

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