私は、SVG図面上のすべての要素の中から、特定の要素にユークリッド距離で最も近い要素を見つけようとしています。
今のところ、バウンディングボックス、図心、その他の間の距離を測定する方法については気になりません。
要素のすべてのペア間の距離を計算してから並べ替える以外の方法はありますか?
私は、SVG図面上のすべての要素の中から、特定の要素にユークリッド距離で最も近い要素を見つけようとしています。
今のところ、バウンディングボックス、図心、その他の間の距離を測定する方法については気になりません。
要素のすべてのペア間の距離を計算してから並べ替える以外の方法はありますか?
要素の各ペア間の距離を計算する必要はなく、並べ替える必要もありません。すべての要素をループして、最小の距離/要素のペアを追跡する必要があります。
function closest( elements, toElement ){
var closestDistance=Infinity, closestElement;
for (var i=elements.length;i--;){
var fromElement = elements[i];
if (fromElement==toElement) continue;
var distance = distanceBetween(toElement,fromElement);
if (distance<closestDistance){
closestElement = fromElement;
closestDistance = distance;
}
}
return closestElement;
}
これを頻繁に実行していて、上記の単純なソリューションをテストして速度が遅すぎることを証明した場合は、スペースの分割または場所をハッシュして検索を高速化する別の方法を検討してください。