package org.openpixi.pixi.physics.force; import org.openpixi.pixi.physics.particles.Particle; import java.util.ArrayList; /** * Combines various forces into a single force. */ public class CombinedForce implements Force { public ArrayList<Force> forces = new ArrayList<Force>(); /** * Adds another force. */ public void add(Force force) { forces.add(force); } /** * Clears all forces. */ public void clear() { forces.clear(); } public double getForceX(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getForceX(p); } return sum; } public double getForceY(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getForceY(p); } return sum; } public double getPositionComponentofForceX(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getPositionComponentofForceX(p); } return sum; } public double getPositionComponentofForceY(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getPositionComponentofForceY(p); } return sum; } public double getTangentVelocityComponentOfForceX(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getTangentVelocityComponentOfForceX(p); } return sum; } public double getTangentVelocityComponentOfForceY(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getTangentVelocityComponentOfForceY(p); } return sum; } public double getNormalVelocityComponentofForceX(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getNormalVelocityComponentofForceX(p); } return sum; } public double getNormalVelocityComponentofForceY(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getNormalVelocityComponentofForceY(p); } return sum; } public double getBz(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getBz(p); } return sum; } public double getLinearDragCoefficient(Particle p) { double sum = 0; for (Force f : forces) { sum += f.getLinearDragCoefficient(p); } return sum; } public void remove(Force force) { forces.remove(force); } }