encontrar todos los puntos dentro de un rango a cualquier punto de otro conjunto

Tengo dos conjuntos de puntosA yB.

Quiero encontrar todos los puntos enB que están dentro de un cierto rangor aA, donde un puntob enB se dice que está dentro del rangor aA si hay al menos un puntoa enA cuya distancia (euclidiana) ab es igual o menor a r.

Cada uno de los dos conjuntos de puntos es un conjunto coherente de puntos. Se generan a partir de las ubicaciones de voxel de dos objetos no superpuestos.

En 1D este problema es bastante fácil: todos los puntos deB dentro de [min (A) -r máximoA) +r]

Pero estoy en 3D.

¿Cuál es la mejor manera de hacer esto?

Actualmente busco repetidamente cada punto enA todos los puntos enB dentro del rango usando algún algoritmo knn (es decir, la búsqueda de rangos de matlab) y luego unir todos esos conjuntos. Pero tengo la sensación de que debería haber una mejor manera de hacer esto. Preferiría una solución vectorizada de alto nivel en matlab, pero el pseudo código también está bien :)

También pensé en escribir todos los puntos en imágenes y usar la dilatación de imágenes en el objeto A con un radio de r. Pero eso suena como una sobrecarga.