summaryrefslogtreecommitdiff
path: root/src/sims/dynamics
diff options
context:
space:
mode:
Diffstat (limited to 'src/sims/dynamics')
-rw-r--r--src/sims/dynamics/World.scala15
-rw-r--r--src/sims/dynamics/joints/DistanceJoint.scala1
-rw-r--r--src/sims/dynamics/joints/SpringJoint.scala1
-rw-r--r--src/sims/dynamics/joints/test/PrismaticJoint.scala2
-rw-r--r--src/sims/dynamics/joints/test/UnitCircleJoint.scala1
5 files changed, 11 insertions, 9 deletions
diff --git a/src/sims/dynamics/World.scala b/src/sims/dynamics/World.scala
index 0230a50..f24a3fd 100644
--- a/src/sims/dynamics/World.scala
+++ b/src/sims/dynamics/World.scala
@@ -9,7 +9,7 @@ package sims.dynamics
import sims.geometry._
import sims.collision._
import sims.dynamics.joints._
-import scala.collection.mutable._
+import scala.collection.mutable.ArrayBuffer
/**A world contains and simulates a system of rigid bodies and joints.*/
class World {
@@ -35,7 +35,7 @@ class World {
* Example usage: monitors += ("Y-Position", _.pos.y.toString)
* This will calculate all bodies - whose <code>monitor</code> field is set to
* <code>true</code> - second position components.*/
- val monitors = new ArrayBuffer[(String, Body => String)]
+ val monitors = new ArrayBuffer[(String, Body => Any)]
/**Collsion detector who manages collision detection in this world.*/
val detector: Detector = new GridDetector(this)
@@ -65,7 +65,7 @@ class World {
def +=(joint: Joint): Unit = joints += joint
/**Adds the given prefabricated system of bodies and joints to this world.*/
- def +=(p: prefabs.Prefab): Unit = {
+ def +=(p: sims.prefabs.Prefab): Unit = {
for (b <- p.bodies) this += b
for (j <- p.joints) this += j
}
@@ -80,7 +80,7 @@ class World {
def -=(joint: Joint): Unit = joints -= joint
/**Removes the given prefabricated system of bodies and joints from this world.*/
- def -=(p: prefabs.Prefab): Unit = {
+ def -=(p: sims.prefabs.Prefab): Unit = {
for (b <- p.bodies) this -= b
for (j <- p.joints) this -= j
}
@@ -113,12 +113,9 @@ class World {
//integration of acclerations, yields velocities
for (b <- bodies) {
- val m = b.mass
b.applyForce(gravity * b.mass)
- val a = b.force / b.mass
- val alpha = b.torque / b.I
- b.linearVelocity = b.linearVelocity + a * timeStep
- b.angularVelocity = b.angularVelocity + alpha * timeStep
+ b.linearVelocity = b.linearVelocity + (b.force / b.mass) * timeStep
+ b.angularVelocity = b.angularVelocity + (b.torque / b.I) * timeStep
}
//correction of velocities
diff --git a/src/sims/dynamics/joints/DistanceJoint.scala b/src/sims/dynamics/joints/DistanceJoint.scala
index efb49e5..1bf9b46 100644
--- a/src/sims/dynamics/joints/DistanceJoint.scala
+++ b/src/sims/dynamics/joints/DistanceJoint.scala
@@ -6,6 +6,7 @@
package sims.dynamics.joints
+import sims.dynamics._
import sims.geometry._
/** DistanceJoints keep their connection points at a constant distance.
diff --git a/src/sims/dynamics/joints/SpringJoint.scala b/src/sims/dynamics/joints/SpringJoint.scala
index 1267ccf..4d44864 100644
--- a/src/sims/dynamics/joints/SpringJoint.scala
+++ b/src/sims/dynamics/joints/SpringJoint.scala
@@ -6,6 +6,7 @@
package sims.dynamics.joints
+import sims.dynamics._
import sims.geometry._
/**A spring obeying Hooke's law.
diff --git a/src/sims/dynamics/joints/test/PrismaticJoint.scala b/src/sims/dynamics/joints/test/PrismaticJoint.scala
index d4b43b2..040647d 100644
--- a/src/sims/dynamics/joints/test/PrismaticJoint.scala
+++ b/src/sims/dynamics/joints/test/PrismaticJoint.scala
@@ -1,5 +1,7 @@
package sims.dynamics.joints.test
+import sims.dynamics._
+import sims.dynamics.joints._
import sims.geometry._
case class PrismaticJoint(node1: Body, anchor1: Vector2D, node2: Body, anchor2: Vector2D) extends Joint{
diff --git a/src/sims/dynamics/joints/test/UnitCircleJoint.scala b/src/sims/dynamics/joints/test/UnitCircleJoint.scala
index 64f613c..09e72d9 100644
--- a/src/sims/dynamics/joints/test/UnitCircleJoint.scala
+++ b/src/sims/dynamics/joints/test/UnitCircleJoint.scala
@@ -7,6 +7,7 @@
package sims.dynamics.joints.test
import sims.dynamics._
+import sims.dynamics.joints._
import sims.geometry._
class UnitCircleJoint(body: Body, anchor: Vector2D) extends Joint{