From f9a350330e801125c7f8a5e308f3366ab0e909ee Mon Sep 17 00:00:00 2001 From: Steve Date: Tue, 15 Feb 2011 00:13:41 +0000 Subject: Added OriginForces and Menu for them. --- src/tesseract/TesseractUI.java | 40 +++++++++++++++++++++++++++++++ src/tesseract/forces/LinearOrigin.java | 25 +++++++++++++++++++ src/tesseract/forces/QuadradicOrigin.java | 25 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 src/tesseract/forces/LinearOrigin.java create mode 100644 src/tesseract/forces/QuadradicOrigin.java 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"; + } +} -- cgit v1.2.3