summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve <steveb9@u.washington.edu>2011-02-15 00:13:41 +0000
committerSteve <steveb9@u.washington.edu>2011-02-15 00:13:41 +0000
commitf9a350330e801125c7f8a5e308f3366ab0e909ee (patch)
tree253e0a05c03467925c3fbc8392efef10e4a028c5
parent2999ffdf1c3f182f1532b35981fe9f2093147594 (diff)
Added OriginForces and Menu for them.
-rw-r--r--src/tesseract/TesseractUI.java40
-rw-r--r--src/tesseract/forces/LinearOrigin.java25
-rw-r--r--src/tesseract/forces/QuadradicOrigin.java25
3 files changed, 90 insertions, 0 deletions
diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java
index b2b010e..de765f7 100644
--- a/src/tesseract/TesseractUI.java
+++ b/src/tesseract/TesseractUI.java
@@ -28,6 +28,8 @@ import tesseract.forces.CircularXY;
import tesseract.forces.CircularXZ;
import tesseract.forces.Force;
import tesseract.forces.Gravity;
+import tesseract.forces.LinearOrigin;
+import tesseract.forces.QuadradicOrigin;
import tesseract.menuitems.ChainLinkMenuItem;
import tesseract.menuitems.DonutMenuItem;
import tesseract.menuitems.EllipsoidMenuItem;
@@ -230,6 +232,44 @@ public class TesseractUI extends JFrame {
});
forcesMenu.add(circularXY);
+ final JMenuItem originLinear = new JCheckBoxMenuItem("Linear proportional force towards the origin", false);
+ originLinear.addActionListener(new ActionListener() {
+ private Force me;
+
+ // Constructor
+ {
+ me = new LinearOrigin(.5f);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (((JCheckBoxMenuItem) e.getSource()).isSelected()) {
+ myWorld.addForce(me);
+ } else {
+ myWorld.removeForce(me);
+ }
+ }
+ });
+ forcesMenu.add(originLinear);
+
+ final JMenuItem originQuadradic = new JCheckBoxMenuItem("Quadratic proportional force towards the origin", false);
+ originQuadradic.addActionListener(new ActionListener() {
+ private Force me;
+
+ // Constructor
+ {
+ me = new QuadradicOrigin(.5f);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (((JCheckBoxMenuItem) e.getSource()).isSelected()) {
+ myWorld.addForce(me);
+ } else {
+ myWorld.removeForce(me);
+ }
+ }
+ });
+ forcesMenu.add(originQuadradic);
+
menuBar.add(forcesMenu);
// Add reset Simulator menu item
diff --git a/src/tesseract/forces/LinearOrigin.java b/src/tesseract/forces/LinearOrigin.java
new file mode 100644
index 0000000..ca4651d
--- /dev/null
+++ b/src/tesseract/forces/LinearOrigin.java
@@ -0,0 +1,25 @@
+package tesseract.forces;
+
+import javax.vecmath.Vector3f;
+
+import tesseract.objects.PhysicalObject;
+
+@SuppressWarnings("restriction")
+public class LinearOrigin extends Force {
+ private float scale;
+
+ public LinearOrigin(float scale) {
+ this.scale = scale;
+ }
+
+ public Vector3f calculateForce(PhysicalObject obj) {
+ Vector3f position = obj.getPosition();
+ Vector3f force = new Vector3f(-position.x, -position.y, -position.z);
+ force.scale(scale);
+ return force;
+ }
+
+ public String toString() {
+ return "Linear proportional force towards the origin";
+ }
+}
diff --git a/src/tesseract/forces/QuadradicOrigin.java b/src/tesseract/forces/QuadradicOrigin.java
new file mode 100644
index 0000000..81cbea2
--- /dev/null
+++ b/src/tesseract/forces/QuadradicOrigin.java
@@ -0,0 +1,25 @@
+package tesseract.forces;
+
+import javax.vecmath.Vector3f;
+
+import tesseract.objects.PhysicalObject;
+
+@SuppressWarnings("restriction")
+public class QuadradicOrigin extends Force {
+ private float scale;
+
+ public QuadradicOrigin(float scale) {
+ this.scale = scale;
+ }
+
+ public Vector3f calculateForce(PhysicalObject obj) {
+ Vector3f position = obj.getPosition();
+ Vector3f force = new Vector3f(-position.x * Math.abs(position.x), -position.y * Math.abs(position.y), -position.z * Math.abs(position.z));
+ force.scale(scale);
+ return force;
+ }
+
+ public String toString() {
+ return "Quadratic proportional force towards the origin";
+ }
+}