Browse Source

more cartridges and zeroing

Johann Woelper 5 years ago
parent
commit
a80cb1ba3c
2 changed files with 76 additions and 29 deletions
  1. 33 1
      loading_data.json
  2. 43 28
      src/lib.rs

+ 33 - 1
loading_data.json

@@ -1,5 +1,5 @@
 {
-    "Hammerhead 14.3g": {
+    ".30-06 Hammerhead 14.3g": {
         "velocity": [
             [0, 720],
             [100, 653],
@@ -20,5 +20,37 @@
             [250, -27.5],
             [300, -53.3]
         ]
+    },
+    ".30-06 Hammerhead 11g": {
+        "velocity": [
+  
+        ],
+        "energy": [
+
+        ],
+        "trajectory": [
+            [50, 1.1],
+            [100, 2.8],
+            [150, 0],
+            [200, -7.6],
+            [250, -20.7],
+            [300, -38.4]
+        ]
+    },
+    ".300 WM Barnes VOR-TX 11g": {
+        "velocity": [
+  
+        ],
+        "energy": [
+
+        ],
+        "trajectory": [
+            [50, -0.28],
+            [100, 0],
+            [150, -3.22],
+            [200, -10.22],
+            [250, -21.30],
+            [300, -36.79]
+        ]
     }
 }

+ 43 - 28
src/lib.rs

@@ -43,16 +43,28 @@ impl BallisticsData {
 
 
     fn spline(&self) -> Spline<f32, f32>{
-        let mut splinesource = vec![]; 
 
-        for t in &self.trajectory {
-            println!("{:?}", t);
-            splinesource.push(Key::new(t.0 as f32, t.1, Interpolation::default()));
-        }
+        let a: Vec<Key<f32, f32>> = self.trajectory
+            .iter()
+            .map(|x| Key::new(x.0 as f32, x.1, Interpolation::Cosine))
+            .collect();
+        Spline::from_vec(a)
+    }
 
-        Spline::from_vec(splinesource)
+
+    fn drop(&self, dist: i32) -> f32 {
+        self.spline()
+            .clamped_sample(dist as f32)
+            .unwrap_or(-999999.0)
     }
 
+    fn drop_zeroed(&self, dist: i32, zero_dist: i32) -> f32 {
+        let z_comp = self.spline().clamped_sample(zero_dist as f32).unwrap_or(0.0);
+        // println!("drop at {} {}", dist, z_comp);
+        self.spline()
+            .clamped_sample(dist as f32)
+            .unwrap_or(-999999.0) - z_comp
+    }
 
 }
 
@@ -77,9 +89,11 @@ fn write_sample() {
 }
 
 
-fn load_cartridges() -> HashMap<String, BallisticsData> {
+fn load_cartridges() -> Result<HashMap<String, BallisticsData>, serde_json::Error> {
     let reader = BufReader::new(File::open("loading_data.json").unwrap());
-    serde_json::from_reader(reader).unwrap()
+    
+    // let s: Result<HashMap<String, BallisticsData>, _> = serde_json::from_reader(reader);
+    serde_json::from_reader(reader)
     // println!("{:?}", loaded_car);
 }
 
@@ -88,33 +102,34 @@ fn load_cartridges() -> HashMap<String, BallisticsData> {
 
 #[test]
 fn w() {
-    write_sample();
+    //write_sample();
 
-    let c = load_cartridges();
-    // dbg!(&c);
-    
-    // let d = 130;
-
-    for (name, cartridge) in c {
-        println!("Cartridge {}", name);
-        // println!("Cartridge {}", cartridge.data_at(d));
-        for d in 70..300 {
-            // cartridge.data_at(d);
-            
-        }
-        
-        let s = cartridge.spline();
 
-        for d in (0..310).step_by(10) {
-            // cartridge.data_at(d);
-            let r = s.clamped_sample(d as f32);
-            println!("{} {:?}", d, r);
+    match load_cartridges() {
+        Ok(c) => {
+            for (name, cartridge) in c {
+                println!("=== Cartridge {} ===", name);
 
-        }
+                dbg!(cartridge.drop_zeroed(200, 100));
+                // dbg!(cartridge.drop_zeroed(300, 150));
+                // dbg!(cartridge.drop(250));
 
+                let s = cartridge.spline();
+                for d in (50..310).step_by(10) {
+                    // cartridge.data_at(d);
+                    let z = s.clamped_sample(100.0).unwrap_or(-999999.0);
+                    let r = s.clamped_sample(d as f32).unwrap_or(-999999.0) - z;
+                    println!("{} {:?}", d, r);
+        
+                }
+        
+            }
+        },
+        Err(e) => println!("{:?}",e)
     }
 
 
 
 
+
 }