1 package prefuse.util.force; 2 3 11 public class GravitationalForce extends AbstractForce { 12 13 private static final String [] pnames 14 = { "GravitationalConstant", "Direction" }; 15 16 public static final int GRAVITATIONAL_CONST = 0; 17 public static final int DIRECTION = 1; 18 19 public static final float DEFAULT_FORCE_CONSTANT = 1E-4f; 20 public static final float DEFAULT_MIN_FORCE_CONSTANT = 1E-5f; 21 public static final float DEFAULT_MAX_FORCE_CONSTANT = 1E-3f; 22 23 public static final float DEFAULT_DIRECTION = (float)-Math.PI/2; 24 public static final float DEFAULT_MIN_DIRECTION = (float)-Math.PI; 25 public static final float DEFAULT_MAX_DIRECTION = (float)Math.PI; 26 27 33 public GravitationalForce(float forceConstant, float direction) { 34 params = new float[] { forceConstant, direction }; 35 minValues = new float[] 36 { DEFAULT_MIN_FORCE_CONSTANT, DEFAULT_MIN_DIRECTION }; 37 maxValues = new float[] 38 { DEFAULT_MAX_FORCE_CONSTANT, DEFAULT_MAX_DIRECTION }; 39 } 40 41 45 public GravitationalForce() { 46 this(DEFAULT_FORCE_CONSTANT, DEFAULT_DIRECTION); 47 } 48 49 53 public boolean isItemForce() { 54 return true; 55 } 56 57 60 protected String [] getParameterNames() { 61 return pnames; 62 } 63 64 67 public void getForce(ForceItem item) { 68 float theta = params[DIRECTION]; 69 float coeff = params[GRAVITATIONAL_CONST]*item.mass; 70 71 item.force[0] += Math.cos(theta)*coeff; 72 item.force[1] += Math.sin(theta)*coeff; 73 } 74 75 } | Popular Tags |