特定の条件を満たさないものを拒否する「k個の最近傍を見つける」アルゴリズムのわずかな変形があり、それを効率的に行う方法が思いつきません。
私が求めているのは、現在の視線にある k 個の最近傍を見つけることです。残念ながらscipy.spatial.cKDTree
、条件付きでポイントを拒否するフィルターを使用して検索するオプションは提供されていません。
私が思い付くことができる最良のアルゴリズムは、n 個の最近傍を照会し、見通し内に k 個がない場合は、2n 個の最近傍を再度照会して繰り返すことです。残念ながら、これは最悪の場合、n 個の最近傍を繰り返し再計算することを意味します。このクエリを繰り返さなければならない回数が増えるほど、パフォーマンス ヒットは悪化します。一方、n を高く設定しすぎると、返されるポイントのほとんどが必要ない場合、無駄になる可能性があります。
視線は頻繁に変わるので、cKDTree
毎回再計算することもできません。助言がありますか?