anchor.diff:           ((-a * c) / I, (-b * c) / I, 1. / m + (a * a + b * b) / I))
   
       [<JavaScript>]
  -    member this.ApplyImpulse(i, impulse : float * float * float, r) =
  +    member this.ApplyImpulse(i, (ix, iy, _ as impulse) : float * float * float, r) =
           let ball = balls.[i]
           let (rx, ry, rz) = r
           ball.Velocity <- O3DJS.Math.Add(ball.Velocity, O3DJS.Math.Div(impulse, ball.Mass))
  
positive.code:     [<JavaScript>]
      member this.SomeBallsMoving() =
          balls |> Array.exists (fun ball ->
              not ball.Active ||
              (let (v0, v1, v2) = ball.Velocity
               let (w0, w1, w2) = ball.AngularVelocity
               v0 <> 0. || v1 <> 0. || v2 <> 0. ||
  
negative.code:                 let vec = O3DJS.Math.Mul(timeStep, ball.AngularVelocity)
                  ball.Orientation <- O3DJS.Quaternions.Mul(vectorToQuaternion(vec,()), ball.Orientation)
                                      |> O3DJS.Quaternions.Normalize
                  ball.Center <- (cx, cy, cz)
                  let vx, vy, vz = ball.Velocity
                  ball.Velocity <- (vx, vy, vz + ball.VerticalAcceleration))
  
      [<JavaScript>]
      member this.ImpartSpeed(i, (dx, dy)) =
  