|
@@ -0,0 +1,82 @@
|
|
|
+#[macro_use]
|
|
|
+extern crate serde_derive;
|
|
|
+extern crate serde;
|
|
|
+extern crate serde_json;
|
|
|
+use std::io::BufWriter;
|
|
|
+use std::io::BufReader;
|
|
|
+use std::fs::File;
|
|
|
+use std::collections::HashMap;
|
|
|
+
|
|
|
+#[derive(Serialize, Deserialize, Debug, Default)]
|
|
|
+struct BallisticsData {
|
|
|
+ // velocity: HashMap<i32, f32>,
|
|
|
+ // energy: HashMap<i32, f32>,
|
|
|
+ // trajectory: HashMap<i32, f32>
|
|
|
+ velocity: Vec<(i32, f32)>,
|
|
|
+ energy: Vec<(i32, f32)>,
|
|
|
+ trajectory: Vec<(i32, f32)>,
|
|
|
+}
|
|
|
+
|
|
|
+impl BallisticsData {
|
|
|
+ fn velocity_at(&self, d: i32) -> f32{
|
|
|
+ for i in 0..self.velocity.len() {
|
|
|
+ if self.velocity[i].0 >= d {
|
|
|
+ let mu = normalized_pos_in_range(self.velocity[i-1].0 as f32, self.velocity[i].0 as f32, d as f32);
|
|
|
+ dbg!(self.velocity[i].0, self.velocity[i].1, self.velocity[i+1].1);
|
|
|
+ return lerp(self.velocity[i-1].1 as f32, self.velocity[i].1 as f32, mu);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 0.0
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+fn normalized_pos_in_range(min: f32, max: f32, d: f32) -> f32 {
|
|
|
+ (d - min) / (max - min)
|
|
|
+}
|
|
|
+
|
|
|
+fn lerp(y1: f32, y2: f32, mu: f32) -> f32 {
|
|
|
+ y1*(1.0-mu)+y2*mu
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+fn write_sample() {
|
|
|
+ let mut bd = BallisticsData::default();
|
|
|
+ bd.velocity.push((0,720.0));
|
|
|
+ let mut map = HashMap::new();
|
|
|
+ map.insert("Hammerhead", bd);
|
|
|
+ // write out the file
|
|
|
+ let writer = BufWriter::new(File::create("sample.json").unwrap());
|
|
|
+ serde_json::to_writer_pretty(writer, &map).unwrap();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+fn load_cartridges() -> HashMap<String, BallisticsData> {
|
|
|
+ let reader = BufReader::new(File::open("loading_data.json").unwrap());
|
|
|
+ serde_json::from_reader(reader).unwrap()
|
|
|
+ // println!("{:?}", loaded_car);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#[test]
|
|
|
+fn w() {
|
|
|
+ write_sample();
|
|
|
+
|
|
|
+ let c = load_cartridges();
|
|
|
+ // dbg!(&c);
|
|
|
+
|
|
|
+ let d = 130;
|
|
|
+
|
|
|
+ for (name, cartridge) in c {
|
|
|
+ println!("Cartridge {}", name);
|
|
|
+ println!("Cartridge {}", cartridge.velocity_at(d));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|