race
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import math
import os
import json
import time
DIFF_GEAR_RATIO = 4.00
DISTANCE_METRES = 1609.344 / 4 # Quarter-mile
if __name__ == "__main__":
dist = 0.0
elapsed_time = 0.0
dt = 0.05
velocity = 0.0
gear = 1
vehicle_type = os.getenv("COMP_COLOUR")
gear_ratios = [float(r) for r in os.getenv("COMP_GEAR_RATIOS").split()]
mass = float(os.getenv("COMP_MASS_KG"))
wheel_diameter = float(os.getenv("COMP_WHEEL_DIAMETER_M"))
max_kw = float(os.getenv("COMP_MAX_POWER_KW"))
power_frac_vs_1000_rpms = os.getenv("COMP_POWER_FRAC_VS_1000_RPM").split()
kw_vs_1000_rpms = [float(k) * max_kw for k in power_frac_vs_1000_rpms]
output_dir = os.getenv("COMP_OUTPUT_DIR")
output_data = {}
f = open(os.path.join(output_dir, vehicle_type + ".json"), "w")
while dist < DISTANCE_METRES:
curr_rpm = ((velocity / (math.pi * wheel_diameter)) *
gear_ratios[gear - 1]) * 60.0 * DIFF_GEAR_RATIO
curr_rpm_1000 = curr_rpm / 1000.0
rpm_index = int(curr_rpm_1000)
if rpm_index > len(kw_vs_1000_rpms) - 2:
if gear == len(gear_ratios):
power = kw_vs_1000_rpms[-1] * 1000.0
else:
gear += 1
power = 0.0
else:
fraction = (curr_rpm_1000 - rpm_index)
power = kw_vs_1000_rpms[rpm_index]
power += fraction * (kw_vs_1000_rpms[rpm_index + 1] -
kw_vs_1000_rpms[rpm_index])
power *= 1000.0
velocity = math.sqrt((2.0 * power * dt / mass) + velocity ** 2)
dist += velocity * dt # Not elegant or correct, but will work.
elapsed_time += dt
time.sleep(dt)
output_data.update({elapsed_time: dist})
f.write(json.dumps(output_data))
f.close()