Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/capeddemon/particle-life
Particle life with Python
https://github.com/capeddemon/particle-life
ai gui math particles physics python simulation
Last synced: 20 days ago
JSON representation
Particle life with Python
- Host: GitHub
- URL: https://github.com/capeddemon/particle-life
- Owner: CapedDemon
- License: mit
- Created: 2022-10-15T07:43:31.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2023-09-26T08:24:03.000Z (over 1 year ago)
- Last Synced: 2024-12-03T15:49:29.518Z (about 1 month ago)
- Topics: ai, gui, math, particles, physics, python, simulation
- Language: Python
- Homepage:
- Size: 3.84 MB
- Stars: 10
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
Table of Contents
## Documentation
Particle Life is just a simple python script.
It makes a window and shows different movement of particles,
whose rules are defined by us while writing the code. It is a simple
python script in which I have implemented OOP.### Libraries
The python libraries that are used are :-
- pygame
- `pip3 install pygame`
- math
- random### Code explanation
- A `Particle` class is there which takes -
- true for running the while loop
- width of screen
- height of screen
- color of screen in rgb in this case - `rgb(0,0,0)`
- `createParticle` function - This renders a particle in the screen with specific color and coordinates
- `returnParticle` function - Returns a dict consisting of x,y,color,velocityX,velocityY
- `manyParticles` function - Returns a list of particles consisting of the above dictionary with random x and y positions
- `createParticles` function - Creates all the particles in the list returned above using the `createParticle` function
- `mainRule` function - Uses physics and maths formula to attract the particles towards each other and reflect back the particles by using the value of `g`
- Formula Used:-
- F = GMm/r^2
- squareroot[(x2-x1)^2 + (y2-y1)^2]
- F = ma
- Important things -
- g is -ve if the particles are attracted
- g is +ve if the particles are repelling each other### Rendering Particles
- To render particles two things we need to run -- `self.yellowParticles = self.manyParticles(200, self.yellow)` - To get the list of particles
- `self.createParticles(self.yellowParticles)` - To render the particles, used in the while loop
### Main Rules
- To write the mainrules, we need to give 3 arguements - particles list1, particle list2, g
- `self.mainRule(self.yellowParticles, self.yellowParticles, -0.1)` - Here yellow particles are attracted by each other by a small force of 0.1### Simulation
You can simulate the particle animation by writing the mainrule, rendering particles and defining colors.
- Define colors
- `self.yellow = (255, 255, 0)` - It should be written in `def __init__`
- About Rendering particles you can get the information above
- Write your mainrules as you want in the while loop## Examples/Tests
*This are some of the tests that are done.*| First Test Case | Second Test Case | Third Test Case |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| ![](https://github.com/Shreejan-35/Particle-life/blob/master/images/first.gif) | ![](https://github.com/Shreejan-35/Particle-life/blob/master/images/second.gif) | ![](https://github.com/Shreejan-35/Particle-life/blob/master/images/third.gif) |
| `self.mainRule(self.redParticles, self.redParticles, -0.1) self.mainRule(self.yellowParticles, self.redParticles, 0.01) self.mainRule(self.redParticles, self.yellowParticles, -0.01) self.mainRule(self.yellowParticles, self.yellowParticles, -0.1) self.mainRule(self.yellowParticles, self.yellowParticles, 0.01)` | `self.mainRule(self.redParticles, self.redParticles, 0.1) self.mainRule(self.yellowParticles, self.redParticles, -0.12) self.mainRule(self.greenParticles, self.greenParticles, -0.7) self.mainRule(self.greenParticles, self.redParticles, -0.2) self.mainRule(self.redParticles, self.greenParticles, -0.1) self.mainRule(self.greenParticles, self.greenParticles, 0.10) self.mainRule(self.redParticles, self.yellowParticles, 0.09)` | `self.mainRule(self.yellowParticles, self.yellowParticles, 0.1) self.mainRule(self.blueParticles, self.blueParticles, 0.1) self.mainRule(self.blueParticles, self.yellowParticles, -0.12) self.mainRule(self.yellowParticles, self.blueParticles, 0.01) self.mainRule(self.yellowParticles, self.greenParticles, 0.1) self.mainRule(self.blueParticles, self.greenParticles, -0.23) self.mainRule(self.blueParticles, self.redParticles, -0.2) self.mainRule(self.redParticles, self.blueParticles, -0.1) self.mainRule(self.greenParticles, self.blueParticles, 0.12) self.mainRule(self.redParticles, self.redParticles, 0.1) self.mainRule(self.yellowParticles, self.redParticles, -0.12) self.mainRule(self.greenParticles, self.greenParticles, -0.7) self.mainRule(self.greenParticles, self.redParticles, -0.2) self.mainRule(self.redParticles, self.greenParticles, -0.1) self.mainRule(self.greenParticles, self.yellowParticles, 0.13) self.mainRule(self.greenParticles, self.greenParticles, 0.10) self.mainRule(self.redParticles, self.yellowParticles, 0.09) self.mainRule(self.yellowParticles, self.redParticles, -0.2)` |## Installation
The Installation is pretty easy.
- Make a directory in your computer to store the files.
- Go into the directory and clone the git repository```
git clone https://github.com/CapedDemon/Particle-life.git
```- Open your favourite terminal, and type this commands
```
pip3 install requirements.txt
```Then,
```
python3 particle.py
```## Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!1. Fork the Project
2. Create your Feature Branch (`git checkout -b any-name`)
3. Commit your Changes (`git commit -m 'Add some advices'`)
4. Push to the Branch (`git push origin`)
5. Open a Pull Request## Support
Support me by following me and giving a ✨ to this repo.## License
MIT LICENSE