queryCircle method

List<QuadTreeParticle> queryCircle(
  1. double centerX,
  2. double centerY,
  3. double radius, [
  4. List<QuadTreeParticle>? found,
])

Queries particles within a circular area

Implementation

List<QuadTreeParticle> queryCircle(
  double centerX,
  double centerY,
  double radius, [
  List<QuadTreeParticle>? found,
]) {
  found ??= [];

  // First check if circle intersects this node's boundary
  if (!boundary.intersectsCircle(centerX, centerY, radius)) return found;

  // Pre-calculate squared radius for efficient comparison
  final double radiusSquared = radius * radius;

  // Check particles in this node
  for (final particle in particles) {
    final double dx = particle.x - centerX;
    final double dy = particle.y - centerY;
    if (dx * dx + dy * dy <= radiusSquared) {
      found.add(particle);
    }
  }

  // Recursively query children
  for (final CompressedQuadTreeNode child in children.values) {
    child.queryCircle(centerX, centerY, radius, found);
  }

  return found;
}