/** * force calculation on input masses * * @param masses - input masses to apply force to */ @Override protected void envoke(List<Mass> masses) { for (Mass mass : masses) { double distance = getDistance(mass); Vector force = calculateWallRepulsionForce(distance); mass.applyAccelerationVector(force); } }
/** * gets the distance between this repulsion force's wall and the input mass * * @param mass - mass to find the distance to * @return dist - distance to mass */ public double getDistance(Mass mass) { double dist = 0; if (mySide == TOP_WALL) { dist = mass.getY(); } else if (mySide == RIGHT_WALL) { dist = mass.getX(); } else if (mySide == BOTTOM_WALL) { dist = mass.getY() - myHeight; } else if (mySide == LEFT_WALL) { dist = mass.getX() - myWidth; } return dist; }
@Override public Vector getForceOnMass(Mass m) { if (!getToggle()) return new Vector(); Vector result = new Vector(m.getVelocity()); double viscosityScale = getProperty(Keywords.SCALE); result.setMagnitude(result.getMagnitude() * viscosityScale); result.turn(Keywords.DEGREES_TURN_AROUND); return result; }
/** Convenience method. */ public double distance(Mass other) { // this is a little awkward, so hide it return new Location(getX(), getY()).distance(new Location(other.getX(), other.getY())); }
public void applyVescosity(Mass m) { Vector vescoForce = new Vector(m.getVelocity()); vescoForce.scale(myViscosity); vescoForce.negate(); m.applyForce(vescoForce); }
public void applyGravity(Mass m) { Vector g = new Vector(getMyGravity()); g.scale(m.getMyMass()); m.applyForce(g); }
public void applyRepulsionForce(Mass m, Dimension bounds) { for (WallRepulsion wr : myWalls) { Vector repForce = wr.getForce(m, bounds); m.applyForce(repForce); } }
public void applyCenterAttraction(Mass m) { Vector attForce = myCenter.getForce(m); m.applyForce(attForce); }