Skip to content

Commit

Permalink
take screen ratio into account
Browse files Browse the repository at this point in the history
  • Loading branch information
frankplus committed May 9, 2020
1 parent 141850b commit cfb1552
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions src/plotter2d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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();
}

Expand All @@ -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)
}
}
Expand Down Expand Up @@ -125,10 +128,10 @@ impl Plot {
fn generate_positions(expression: &Expression<IntervalSet<f64>>, resolution: u32, camera: &Camera) -> Vec<f32> {

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);
Expand Down

0 comments on commit cfb1552

Please sign in to comment.