summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tesseract/TesseractUI.java21
-rw-r--r--src/tesseract/forces/Circular.java27
-rw-r--r--src/tesseract/menuitems/ChainLinkMenuItem.java44
-rw-r--r--src/tesseract/objects/PhysicalObject.java4
4 files changed, 84 insertions, 12 deletions
diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java
index cd3bde2..7d5877a 100644
--- a/src/tesseract/TesseractUI.java
+++ b/src/tesseract/TesseractUI.java
@@ -24,6 +24,7 @@ import javax.swing.Timer;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
+import tesseract.forces.Circular;
import tesseract.forces.Force;
import tesseract.forces.Gravity;
import tesseract.menuitems.ChainLinkMenuItem;
@@ -187,6 +188,26 @@ public class TesseractUI extends JFrame {
}
});
forcesMenu.add(gravity);
+
+ final JMenuItem circular = new JCheckBoxMenuItem("Tangential force in the XZ plane", false);
+ circular.addActionListener(new ActionListener() {
+ private Force me;
+
+ // Constructor
+ {
+ me = new Circular(.5f);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (((JCheckBoxMenuItem) e.getSource()).isSelected()) {
+ myWorld.addForce(me);
+ } else {
+ myWorld.removeForce(me);
+ }
+ }
+ });
+ forcesMenu.add(circular);
+
menuBar.add(forcesMenu);
// Add reset Simulator menu item
diff --git a/src/tesseract/forces/Circular.java b/src/tesseract/forces/Circular.java
new file mode 100644
index 0000000..746064a
--- /dev/null
+++ b/src/tesseract/forces/Circular.java
@@ -0,0 +1,27 @@
+package tesseract.forces;
+
+import javax.vecmath.Vector3f;
+
+import tesseract.objects.PhysicalObject;
+
+@SuppressWarnings("restriction")
+public class Circular extends Force {
+ private float strength;
+
+ public Circular(float strength) {
+ this.strength = strength;
+ }
+
+ public Vector3f calculateForce(final PhysicalObject obj) {
+ Vector3f force = new Vector3f(-obj.getPosition().z, 0, obj.getPosition().x);
+ if (force.length() > 0) {
+ force.normalize();
+ force.scale(strength);
+ }
+ return force;
+ }
+
+ public String toString() {
+ return "Tangential force in the XZ plane";
+ }
+}
diff --git a/src/tesseract/menuitems/ChainLinkMenuItem.java b/src/tesseract/menuitems/ChainLinkMenuItem.java
index e015b42..bfd64f1 100644
--- a/src/tesseract/menuitems/ChainLinkMenuItem.java
+++ b/src/tesseract/menuitems/ChainLinkMenuItem.java
@@ -4,6 +4,7 @@ import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
@@ -13,6 +14,7 @@ import javax.vecmath.Vector3f;
import tesseract.World;
import tesseract.objects.ChainLink;
+import tesseract.objects.ChainLink2;
import tesseract.objects.Icosahedron;
import tesseract.objects.PlanarPolygon;
@@ -45,31 +47,49 @@ public class ChainLinkMenuItem extends TesseractMenuItem {
public void actionPerformed(final ActionEvent arg0) {
createParameterMenu();
- final float scale = 1f;
- final float sliceRadius = .06f; //inside whole
- final int sliceDivisions = 50;
- final float arcRadius = .08f; //outside whole
- final int arcDivisions = 30;
+ final float scale = 0.5f;
+ //final float sliceRadius = .06f; //inside whole
+ //final int sliceDivisions = 50;
+ //final float arcRadius = .08f; //outside whole
+ //final int arcDivisions = 30;
//If the default button is checked, the frame will close.
final JCheckBox defaultButton = getDefaultButton();
final JFrame params = getParamFrame();
+ final JButton enterButton = getEnterButton();
defaultButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
if (defaultButton.isSelected()) {
- myWorld.addObject(new ChainLink(getDefaultPosition(), 1, scale,
- sliceRadius, sliceDivisions, arcRadius, arcDivisions));
+ myWorld.addObject(new ChainLink2(getDefaultPosition(), 1, getDefaultRadius()));
params.dispose();
+ /*myWorld.addObject(new ChainLink(getDefaultPosition(), 1, scale,
+ sliceRadius, sliceDivisions, arcRadius, arcDivisions));
+ params.dispose();*/
}
}
});
- /*Vector3f pos =
- parseVector(JOptionPane.showInputDialog("Enter the position"));
- float radius =
- Float.parseFloat(JOptionPane.showInputDialog("Enter the radius"));
- myWorld.addObject(new Icosahedron(pos, radius));*/
+ enterButton.addActionListener(new ActionListener() {
+ public void actionPerformed(final ActionEvent event) {
+ String string = getPositionField().getText();
+ Vector3f pos = parseVector(string);
+ setPosition(pos);
+
+ String string2 = getRadiusField().getText();
+ float radius = Float.parseFloat(string2);
+ setRadius(radius);
+
+ String string3 = getMassField().getText();
+ float mass = Float.parseFloat(string3);
+ setMass(mass);
+
+ if (event.getSource() == enterButton) {
+ myWorld.addObject(new ChainLink2(getPosition(), getMass(), getRadius()));
+ params.dispose();
+ }
+ }
+ });
}
}
diff --git a/src/tesseract/objects/PhysicalObject.java b/src/tesseract/objects/PhysicalObject.java
index 73e0c91..54cc4e9 100644
--- a/src/tesseract/objects/PhysicalObject.java
+++ b/src/tesseract/objects/PhysicalObject.java
@@ -73,5 +73,9 @@ public class PhysicalObject extends CollidableObject {
if (collidable && other.collidable) {
super.resolveCollisions(other);
}
+ }
+
+ public Vector3f getPosition() {
+ return position;
}
} \ No newline at end of file