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);
}
}