Sha256: eb9daa7827fe03d47b712ebffe01c548d0efd3ea656def1cb2fcbf1c643d6886

Contents?: true

Size: 1.08 KB

Versions: 3

Compression:

Stored size: 1.08 KB

Contents

require 'driving_physics/scalar_force'
require 'driving_physics/environment'
require 'driving_physics/cli'

include DrivingPhysics

env = Environment.new
puts env

mass = 1000           # kg
weight = mass * env.g # N
drive_force = 7000    # N
duration = 100        # seconds

puts format("Force: %d N  Mass: %d kg for %d seconds",
            drive_force, mass, duration)
CLI.pause

spd = 0.0 # m/s
pos = 0.0 # m
num_ticks = duration * env.hz + 1

flag = false
phase = :accelerate
paused = 0.0
start = Timer.now

num_ticks.times { |i|
  # TODO: make the resistance force negative
  net_force = drive_force + ScalarForce.all_resistance(spd, nf_mag: weight)

  acc = DrivingPhysics.acc(net_force, mass)
  spd += acc * env.tick
  pos += spd * env.tick

  if phase == :accelerate and spd.magnitude > 100
    flag = true
    phase = :coast
    drive_force = 0
  end

  if flag or (i % 1000 == 0)
    puts format("%d  %.3f m/s/s  %.2f m/s  %.1f m",
                i.to_f / env.hz, acc, spd, pos)
    if flag
      paused += CLI.pause
      flag = false
    end
  end
}

puts Timer.summary(start, num_ticks, paused)

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
driving_physics-0.0.3.1 demo/scalar_force.rb
driving_physics-0.0.2.1 demo/scalar_force.rb
driving_physics-0.0.1.2 demo/scalar_force.rb