我正在尝试编写一个方法,它将返回最接近 3D 空间中另一个点的点的索引。这些点存储在 KD 树中,我将它们与点 p 进行比较,点 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 树中搜索两个关闭点的方法,但我想先尝试这种方法。