diff --git a/src/plotter2d.rs b/src/plotter2d.rs index cf0066b..50f5458 100644 --- a/src/plotter2d.rs +++ b/src/plotter2d.rs @@ -21,7 +21,9 @@ impl Plotter2d { include_str!("../assets/shaders/color.vert"), include_str!("../assets/shaders/color.frag")).unwrap(); - let camera = Camera {position: (0.0, 0.0), size: 10.0}; + let start_x_range = 10.0; + let camera_size: (f32, f32) = (start_x_range, start_x_range * screen_size.1 as f32 / screen_size.0 as f32); + let camera = Camera {position: (0.0, 0.0), size: camera_size }; let plot = Plot::new(gl, &expression, screen_size.0 as u32, &camera); Plotter2d { @@ -46,13 +48,14 @@ impl plotter::Plotter for Plotter2d { } fn zoom(&mut self, delta: f32) { - self.camera.size *= (1.03 as f32).powf(delta); + self.camera.size.0 *= (1.03 as f32).powf(delta); + self.camera.size.1 *= (1.03 as f32).powf(delta); self.update_view(); } fn translate(&mut self, delta_x: f32, delta_y: f32) { - self.camera.position.0 += delta_x * self.camera.size / self.screen_size.0 as f32; - self.camera.position.1 += delta_y * self.camera.size / self.screen_size.1 as f32; + self.camera.position.0 += delta_x * self.camera.size.0 / self.screen_size.0 as f32; + self.camera.position.1 += delta_y * self.camera.size.1 / self.screen_size.1 as f32; self.update_view(); } @@ -65,14 +68,14 @@ impl plotter::Plotter for Plotter2d { struct Camera { position: (f32, f32), - size: f32 + size: (f32, f32) } impl Camera { // project a point to normalized coordinates [-1,1] fn to_normalized_coordinates(&self, point: (f32, f32)) -> (f32, f32) { - let x_proj = 2.0*(point.0 - self.position.0)/self.size; - let y_proj = 2.0*(point.1 - self.position.1)/self.size; + let x_proj = 2.0*(point.0 - self.position.0)/self.size.0; + let y_proj = 2.0*(point.1 - self.position.1)/self.size.1; (x_proj, y_proj) } } @@ -125,10 +128,10 @@ impl Plot { fn generate_positions(expression: &Expression>, resolution: u32, camera: &Camera) -> Vec { let display_info = plot_generator2d::Rectangle { - x_start: (camera.position.0 - camera.size/2.0) as f64, - x_end: (camera.position.0 + camera.size/2.0) as f64, - y_start: (camera.position.1 - camera.size/2.0) as f64, - y_end: (camera.position.1 + camera.size/2.0) as f64, + x_start: (camera.position.0 - camera.size.0 / 2.0) as f64, + x_end: (camera.position.0 + camera.size.0 / 2.0) as f64, + y_start: (camera.position.1 - camera.size.1 / 2.0) as f64, + y_end: (camera.position.1 + camera.size.1 / 2.0) as f64, }; let rectangles = plot_generator2d::generate_2dplot_implicit(expression, display_info, resolution);