Я просмотрел пару реализаций, и они немного сбивают с толку, и я был бы признателен за какую-то разбивку того, что мне нужно для создания KDTree из списка точек. В конечном итоге я собираюсь использовать этот KDTree для выполнения 2D-поиска K-ближайших соседей.
Вот то, что у меня есть на данный момент, что не так много.
Класс точки
class Point{
public PVector p;
public Point(float x, float y){
p = new PVector(x,y);
}
public Point(PVector _p0 ){
p = _p0;
}
float getX(){ return p.x; }
float getY(){ return p.y; }
float x(){ return p.x; }
float y(){ return p.y; }
public float distance( Point o ){
return PVector.dist( p, o.p );
}
Класс узла
class Node{
Node left;
Node right;
Point p;
Node(Point _p, Node l, Node r){
p = _p;
left = l;
right = r;
}
}
KDTree класс
class KDTree{
Node root;
KDTree()
{
root = null;
}
}
Как видите, классы Node и KDTree на самом деле не реализованы, и именно здесь я застрял.
Я хочу в конечном итоге построить этот KDTree, накормив его чем-то вроде: ArrayList‹ Point > points
Любая помощь будет оценена по достоинству!