Я пытаюсь написать метод, который вернет индекс точки, ближайшей к другой точке в трехмерном пространстве. Точки хранятся в KD-дереве, и я сравниваю их с точкой p, которая является параметром моего метода. Вот метод:Поиск первого элемента с определенным расстоянием
public int NearestPointWithDistance(KDnnTreeNode node, Point p, Double distance){
int index = -1;
if(node == null){
return -1;
}else{
double[] point_coordinates = data[node.eltIndex];
Point q = new Point(point_coordinates[0],point_coordinates[1], point_coordinates[2]);
if(KDnnTree.distance(p, q) == distance){
return index;
}
if(node.left != null){
final int left_child = NearestPointWithDistance(node.left, p, distance);
}
if(node.right != null){
final int right_child = NearestPointWithDistance(node.right, p, distance);
}
}
return index;
}
Проблема заключается в том, не может быть несколько точек с одинаковым расстоянием. В результате я получаю список индексов точек (см. Ниже), но я хочу только первый элемент списка (в приведенном ниже примере это будет номер 54510).
54510
54511
54512
54514
54518
54526
54543
54577
65355
76175
54482
54416
54278
21929
54001
74323
Я знаю, что это не способ поиска два закрывает пункты в KD дерево, но я хотел бы попробовать этот путь первым.
Вы должны сравнить результат с левой и правой и принимать только один. – BobTheBuilder