web-dev-qa-db-ja.com

2つの長方形の間の2つの最も近い点

2D平面には、2つの長方形があります。お互いに最も近い最も近いポイントのペア(各長方形に1つ)を見つけたいです。ポイントとは、長方形の角を意味します。いいえ、重複していません。

ポイントのすべての組み合わせ間のすべての距離をチェックして最小のものを見つける以外に、それを行う方法はありますか?

4
shoham

それをどのように行うかは、「ビジネス」要件が何であるかによって異なります。

ソースコードの単純性(保守性)が主な関心事である場合、すべてのポイントツーポイント距離の総当たり計算が単純で効果的な方法になります。処理速度を最適化する必要がある場合は、最適化されたアルゴリズムを見つけることができます。計算するポイントツーポイントの距離は16しかないため、どんな場合でもブルートフォースがほぼ最適になると思います。

1
Joel Brown

平面上のすべてのコーナーの「重心」平均(すべてのコーナーの平均xおよび平均y座標にある新しいポイント)を取得し、その重心に最も近い各長方形のコーナーを取得できますポイント。重心の最初の計算の後、各コーナーに対して1回の計算を実行するだけで済みます。

いずれかの四角形に、全体の重心から等距離にある複数の点がある場合は、結合された点の中から、互いに最も近い2つ(各四角形から1つ)を選択する必要があります。この場合、n ^ 2された処理を実行できます(ただし、四角形などの凸ポリゴンを処理している場合は、ポリゴンごとに最大2つのタイしか存在できないため、このステップでは追加の2つまたは4つの計算-1つまたは両方のポリゴンにタイが含まれているかどうかに応じて)。

このアルゴリズムは、それぞれが任意の数のコーナーを含む2つの凸状ポリゴン(および長方形やすべての通常のポリゴンのように、それらが含む各コーナーから等距離にある独自の重心)に対して非常に適切にスケーリングします(O(n))。

最終的に、常に長方形を扱う場合は、計算時間の短縮が、最適化されたアルゴリズムの追加のコーディングとテストに値するかどうかを判断する必要があります。

1