Performance issues due to many loop iterations

I created a model of the impact of an electron beam (composed of single electrons represented by circles) on powder particles (made up of circles also). I did this based on a tutorial from the website.

At the link below my simulation is given:
Link to youtube

As you can see, single electrons in the form of circles interact with the powder particles (also in the form of circles). Everything works fine, but if I increase the number of particles, there are performance problems and the program starts to stutter.

This is because in each iteration loop the interactions between each electron and each circle forming a powder particle are checked. Below I paste a section of code where the loop calls are visible:

The question in: how can I improve the performance of the program?

Should I use CUDA and count each iteration on a different kernel? Is there a simpler solution?
Using CUDA seems difficult as the program uses object oriented programming and is quite complex.

This sort of thing can be optimized with space partitioning.

Thank you for the information.
How effective is this technique?
Will it provide better results than using parallel computing on the GPU?

If electrons cannot touch each other, then parallel computing will work, too. You won’t need a separate library, you can use OpenGL transform feedback or (4.3+) compute shaders.

Yes, there is no interaction between electrons.
Thank you, I will read about these solutions.