01: package prefuse.util.force;
02:
03: /**
04: * Implements a viscosity/drag force to help stabilize items.
05: *
06: * @author <a href="http://jheer.org">jeffrey heer</a>
07: */
08: public class DragForce extends AbstractForce {
09:
10: private static String[] pnames = new String[] { "DragCoefficient" };
11:
12: public static final float DEFAULT_DRAG_COEFF = 0.01f;
13: public static final float DEFAULT_MIN_DRAG_COEFF = 0.0f;
14: public static final float DEFAULT_MAX_DRAG_COEFF = 0.1f;
15: public static final int DRAG_COEFF = 0;
16:
17: /**
18: * Create a new DragForce.
19: * @param dragCoeff the drag co-efficient
20: */
21: public DragForce(float dragCoeff) {
22: params = new float[] { dragCoeff };
23: minValues = new float[] { DEFAULT_MIN_DRAG_COEFF };
24: maxValues = new float[] { DEFAULT_MAX_DRAG_COEFF };
25: }
26:
27: /**
28: * Create a new DragForce with default drag co-efficient.
29: */
30: public DragForce() {
31: this (DEFAULT_DRAG_COEFF);
32: }
33:
34: /**
35: * Returns true.
36: * @see prefuse.util.force.Force#isItemForce()
37: */
38: public boolean isItemForce() {
39: return true;
40: }
41:
42: /**
43: * @see prefuse.util.force.AbstractForce#getParameterNames()
44: */
45: protected String[] getParameterNames() {
46: return pnames;
47: }
48:
49: /**
50: * @see prefuse.util.force.Force#getForce(prefuse.util.force.ForceItem)
51: */
52: public void getForce(ForceItem item) {
53: item.force[0] -= params[DRAG_COEFF] * item.velocity[0];
54: item.force[1] -= params[DRAG_COEFF] * item.velocity[1];
55: }
56:
57: } // end of class DragForce
|