diff options
Diffstat (limited to 'src/tesseract')
-rw-r--r-- | src/tesseract/TesseractUI.java | 40 | ||||
-rw-r--r-- | src/tesseract/forces/LinearOrigin.java | 25 | ||||
-rw-r--r-- | src/tesseract/forces/QuadradicOrigin.java | 25 |
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";
+ }
+}
|