// prienik bunky n s obdlznikom private Boolean intersects(KDNode n, Point from, Point to) { // prienik je nie je vtedy, ak je cela bunka nad, pod, vlavo alebo vpravo voci obd. Point nodeF = n.getFrom(); Point nodeT = n.getTo(); //Console.WriteLine("ma, ci nema prienik?"); //cely hore if(nodeT.Y < from.Y) { return false; } //cely dole if (nodeF.Y > to.Y) { return false; } //cely vlavo if (nodeF.X > to.X) { return false; } //cely vpravo if (nodeT.X < from.X) { return false; } // Console.WriteLine("ma prienik"); return true; }
// zistuje, ci je bunka target vo vnutri bunky n private Boolean isIn(KDNode target, KDNode n) { if ((target.getFrom().X >= n.getFrom().X) && (target.getTo().X <= n.getTo().X) && (target.getFrom().Y >= n.getFrom().Y) && (target.getTo().Y <= n.getTo().Y)) { return true; } return false; }
// zistuje, ci dve bunky spolu susedia private Boolean isNeighbor(KDNode t, KDNode n) { Point tf = t.getFrom(); Point tt = t.getTo(); Point nf = n.getFrom(); Point nt = n.getTo(); // t je tesne pod n if(nt.Y == tf.Y) { if ((nf.X < tt.X) && (nt.X > tf.X)) { return true; } } // t je tesne nad n if (nf.Y == tt.Y) { if ((tf.X < nt.X) && (tt.X > nf.X)) { return true; } } // t je tesne vlavo od n if (nt.X == tf.X) { if ((tf.Y < nt.Y) && (tt.Y > nf.Y)) { return true; } } // t je tesne vpravo od n if (tt.X == nf.X) { if ((nf.Y < tt.Y) && (nt.Y > tf.Y)) { return true; } } // Console.WriteLine("nie je to sused"); return false; }
// najde najmensiu vzdialenost medzi target a bunkou further. public Point nearestTo(KDNode further, KDNode target) { Point from = further.getFrom(); Point to = further.getTo(); Point tar = target.getPoint(); Point result = new Point(); result.X = (tar.X <= from.X) ? from.X: ((tar.X >= to.X) ? to.X : tar.X); result.Y = (tar.Y <= from.Y) ? from.Y : ((tar.Y >= to.Y) ? to.Y : tar.Y); return result; }