Detección de colisiones circulares lienzo HTML5

Quiero comprobar si los círculos chocan entre sí.

Sé que puedo hacer esto al obtener una distancia entre los dos centros de los círculos y restar el radio de cada círculo de esa distancia y ver si "distancia" es> 1.

¿Cómo puedo hacer esto de manera eficiente con, digamos, 1000 círculos? ¿Tal vez pueda obtener los 20 círculos más cercanos o algo así y verificarlos? No sé cómo podría empezar a hacerlo de manera eficiente, aunque tampoco ...

¿Algunas ideas?

Aquí hay un ejemplo:

http://experiments.lionel.me/blocs/

Respuestas a la pregunta(4)

Su respuesta a la pregunta