
strong nuclear force (quark confinement)
the force between particles stays constant
no matter what distance


spring universe (hooks law)
- when particles are far apart, it gives a huge attractive force


BAND
- when particles are far apart, it gives attraction,
  but when particles are too close, it gives repulsion,
  so you have this "band" in which the force kinda drops off... and is negligable
- molecular dynamics:
  - when far apart, you have very small attractive force
  - when close, strong repulsive force


Galactic Gravity
- instead of newtons 1/r^2, use 1/r
- orbits around a heavy body will move at constant speed
  reg



Boids
- don't crowd neighbours
  - neighbours that are close have repulsive force
- alignment


What about different types of "masses"?
e.g. something like charge, or perhaps something weirder?

====Implementation====

Should I track momentum or velocity?
Since I have constant mass particle,
I can always compute velocity easily.

# Time and Evolution
Decoupling simulation step from `dt` given by the browser.

# Global attributes
- net force (should be very close to 0)
- net momentum (should be very close to a constant)
What else?
- average kinetic energy (temperature?)
- center-of-mass (should be constant)

- WTF potential energy? How to calculate that? Probably
  always different for each of the systems? Does it always make sense?


# Camera & Culling

- zoom & pan
- render only those particles that are on the screen
  - note that this is gonna fuck up the trails, but whatever


# Brushes
## Spawning
- spray paint - bunch of particles near each other but with non-zero initial velocity
- single heavy click brush spawning particles
- brush that spawns particles orthogonal to the center of mass

## Filtering
- delete particles in mass range
- delete particles in region

## Mapping
- change mass of all particles based on a function.

## Reduce
- Replace particles in a region by one particle that has combined mass

# Local Attributes
- follow a single particle and highlight it, name it, display its attributes

- Select a square/circle s.t. all particles within it
  are now tracked... or perhaps those that enter/exit it?



# Dimensions/Layers?
What about having quantities such as a `phase`?
Where basically particles of different phases don't interact... but then we could change phases of particles, and suddenly there is interaction etc...




# Symplectic vs Explicit Euler
Suppose we have `(pos0, vel0)`, and we have `dt`. We compute `acc` (acceleration).
Then the enxt state is:
- Explicit: 
  ```
  (pos0 + dt*vel0, vel0 + dt*acc)
  ```
- Symplectic:
  ```
  let {
    vel1 = vel0 + dt*acc,
    pos1 = pos0 + dt*vel1,
  .
    (pos1, vel1)
  }
  ```
  I have no idea why symplectic works...
  Does it work only for some systems or all?



# Energy
- Kinetic Energy is the energy of motion...
- Potential Energy is the energy of position/configuration (relative position? idk...)


Compute? Potential Energy is integral of force over distance...

Hmm. Let's have `f : M -> R` the "potential".
The force field that's generated by `f` is `d(f)` - but actually... the gradient?.
But given a force field, how can we attempt to
compute the potential energy? Atleast on the trajectory of the particle...

There's no unique solution... so let's say we spawn a particle, and give it potential of 0.

Then the acceleartion field tells us in which direction to move. I guess we're computing an integral over some 1-form. How do we get the 1-form?

It is at a point, the inner product of the infinitesimal velocity with the infinitesimal force...
```
<dv|df>
```






# Angular Momentum?


What if our basic element would be like "rods" of two particles where the constraint is that the distance between them is fixed. Then we could naturally have
angular velocity etc...


