12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package classes;
- import java.awt.Color;
- public class HolonBody {
- private static final double G = 6.673e-11; // gravitational constant
-
- public int rx, ry; // holds the cartesian positions
- public double vx, vy; // velocity components
- public double fx, fy; // force components
- public double mass; // mass
- public Color color; // color
-
- // create and initialize a new Body
- public HolonBody(int rx, int ry, double vx, double vy, double mass, Color color) {
- this.rx = rx;
- this.ry = ry;
- this.vx = vx;
- this.vy = vy;
- this.mass = mass;
- this.color = color;
- }
-
- // update the velocity and position using a timestep dt
- public void update(double dt) {
- vx += dt * fx / mass;
- vy += dt * fy / mass;
- rx += dt * vx;
- ry += dt * vy;
- }
-
- // returns the distance between two bodies
- public double distanceTo(HolonBody b) {
- double dx = rx - b.rx;
- double dy = ry - b.ry;
- return Math.sqrt(dx*dx + dy*dy);
- }
-
- // set the force to 0 for the next iteration
- public void resetForce() {
- fx = 0.0;
- fy = 0.0;
- }
-
- // compute the net force acting between the body a and b, and
- // add to the net force acting on a
- public void addForce(HolonBody b) {
- HolonBody a = this;
- double EPS = 3E4; // softening parameter (just to avoid infinities)
- double dx = b.rx - a.rx;
- double dy = b.ry - a.ry;
- double dist = Math.sqrt(dx*dx + dy*dy);
- double F = (G * a.mass * b.mass) / (dist*dist + EPS*EPS);
- a.fx += F * dx / dist;
- a.fy += F * dy / dist;
- }
-
- // convert to string representation formatted nicely
- public String toString() {
- return "" + rx + ", "+ ry+ ", "+ vx+ ", "+ vy+ ", "+ mass;
- }
- }
|