public bool Contains(Point2D p) {
return (p.X >= Xmin && p.X <= Xmax)
&& (p.Y >= Ymin && p.Y <= Ymax);
}
private void Range(KdNode node, RectHV nrect, RectHV rect, Queue<Point2D> queue) { if (node == null) { return; } if (rect.Intersects(nrect)) { var p = new Point2D(node.X, node.Y); if (rect.Contains(p)) { queue.Enqueue(p); } Range(node.Left, LeftRect(nrect, node), rect, queue); Range(node.Right, RightRect(nrect, node), rect, queue); } }