collision-simulator is quite literally a simulation of collisions, with variable coefficients of restitution, built using pygame
in Python.
Date of creation: 03 September, 2021
It is an interactive simulation where the user spawns balls on the screen, that collide with each other and with walls (having infinite mass). The collisions are handled using real collision mechanics.
- Spawn balls of different radii and variable densities
- Turn gravity (of variable strength) ON and OFF, and change its direction
- Walls of infinite mass
- Different beep sounds for collisions (depending upon their masses)
- Ability to view the current state of any ball (by clicking it)
- Generation of logs
Check the main controls in controls.txt
. Additional controls are as follows:
- CTRL: To see the controls
- L: Log the current state of the balls
To modify the level of the logger
, modify:
logging.basicConfig(
filename="collisions.log", level=logging.INFO, format=LOG_FORMAT
)
on Line 56 of main.py
to:
logging.basicConfig(
filename="collisions.log", level=LEVEL, format=LOG_FORMAT
)
where LEVEL
can be one of:
logging.INFO
logging.DEBUG
logging.WARNING
logging.ERROR
logging.CRITICAL
To run, clone the repository on your device, navigate to the folder, and execute:
python3 main.py
- Beep sounds get delayed when a large number of collisions occur simultaneously.
- If a Ball is moving too fast, it may be able to escape the boundary. This is possibly due to not registering its collision with the wall as its updated position stands outside the boundary. It seems like the issue can be solved by checking if the 'next' position of the Ball is outside the Box, and if so, reflecting it off of the wall at that instant of time.
- For lower restitutions of collision and for fast velocities, two or more balls may get stuck together.