20 面体を分割して球体の近似を作成するアプリケーションがあります。デカルト頂点座標は球座標に変換されるため、すべての頂点が単位球の表面上に配置されます。
次に行う必要があるのは、球面上の任意の点に最も近い頂点を見つけることです。私は2つの単純なアルゴリズムを思いつきました...
ブルート フォース検索 - 頂点の数が少ない場合は問題ありませんが、細かい分割では過剰になります。
ソート済み/インデックス付き検索 - 頂点を方位角と傾斜角によって何らかの順序でソートし、大まかなインデックスを作成して、その範囲を制限することでブルート フォース検索を高速化します。
上記の 2 つのうちの 1 つの代わりに使用できる、より巧妙で、できればより高性能なアルゴリズムがあるかどうか疑問に思っていました。
更新 1:アプリケーションの別の部分で、頂点が隣接する頂点に関する情報を格納していることを思い出しました。私の新しいアルゴリズムは
- 任意の開始頂点をピックします。位置を特定する点までの距離が小さい隣接点を見つけます。この近傍を新しい開始頂点として使用します。頂点までの距離がそれより短い頂点の近傍がなくなるまで繰り返します。この頂点は、ポイントに最も近いです。