From b06ee13bf7204350592c82fe8907f3a7bff0b233 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Fri, 27 Dec 2019 02:26:56 +0100 Subject: [PATCH] display both f64 and Fractional based polygons --- fractional/src/main.rs | 109 +++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 52 deletions(-) diff --git a/fractional/src/main.rs b/fractional/src/main.rs index 3fd4e5b..3f2b98e 100644 --- a/fractional/src/main.rs +++ b/fractional/src/main.rs @@ -21,6 +21,7 @@ use std::convert::{TryFrom, TryInto, Into}; use std::f64::consts::PI as FPI; use std::fmt::Display; +use std::marker::Send; use std::num::TryFromIntError; use std::ops::{Add,Sub,Neg,Mul,Div}; use std::sync::mpsc; @@ -309,66 +310,34 @@ fn _line() { println!("{:>14} : {}", pg, pg.plot()); } -fn main() { - common_fractional(); - println!(); - continuous(); - println!(); - sqrt(); - println!(); - pi(); - println!(); - _sin(); - println!(); - _cos(); - println!(); - _tan(); - println!(); - _vector1(); - println!(); - _vector2(); - println!(); - _transform1(); - println!(); - _transform2(); - println!(); - _line(); +fn _democanvas( xcb :&XcbEasel + , title :&'static str + , tx :mpsc::Sender + , tetrahedron :Polyeder + , cube :Polyeder ) + where T: 'static + Add + Sub + Neg + + Mul + Div + + Copy + Trig + Send + From { - let xcb = XcbEasel::new().unwrap(); let mut canvas = xcb.canvas(151, 151).unwrap(); + let camera = Camera::::new(&canvas, 45); // the orig. view angle + // was 50. - canvas.set_title("Something..."); + canvas.set_title(title); canvas.init_events(); + canvas.start_events(tx.clone()); - let (tx, rx) = mpsc::channel(); - - let tetrahedron = Polyeder::tetrahedron(60.0); - let cube = Polyeder::cube(60.0); - let camera = Camera::::new(&canvas, 45); // the orig. view angle - // was 50. - /* - let tetrahedron = Polyeder::tetrahedron(Fractional(60,1)); - let cube = Polyeder::cube(Fractional(60,1)); - let camera = Camera::::new(&canvas, 45); - */ - - canvas.start_events(tx); - - let start = Instant::now(); - let step = Duration::from_millis(25); - let mut last = Instant::now(); thread::spawn(move || { + let start = Instant::now(); + let step = Duration::from_millis(25); + let mut last = Instant::now(); + + let t :TMatrix = translate(Vector(0.into(), 0.into(), 150.into())); + loop { let deg = ((start.elapsed() / 25).as_millis() % 360) as i32; - let t = translate(Vector(0.0, 0.0, 150.0)); - let rz :TMatrix = rotate_z(deg); - /* - let t = translate(Vector( Fractional(0,1) - , Fractional(0,1) - , Fractional(150,1) )); - let rz :TMatrix = rotate_z(deg); - */ + let rz :TMatrix = rotate_z(deg); let rot1 = TMatrix::combine(vec!(rz, rotate_x(-deg*2), t)); let rot2 = TMatrix::combine(vec!(rz, rotate_y(-deg*2), t)); @@ -388,7 +357,7 @@ fn main() { let f = (passed.as_nanos() / step.as_nanos()) as u32; if f > 1 { - println!("!!! Detected frame drop"); + println!("{} !!! Detected frame drop", title); } last = last + step*(f + 1); @@ -399,6 +368,42 @@ fn main() { thread::sleep(last - Instant::now()); } }); +} + +fn main() { + common_fractional(); + println!(); + continuous(); + println!(); + sqrt(); + println!(); + pi(); + println!(); + _sin(); + println!(); + _cos(); + println!(); + _tan(); + println!(); + _vector1(); + println!(); + _vector2(); + println!(); + _transform1(); + println!(); + _transform2(); + println!(); + _line(); + + let xcb = XcbEasel::new().unwrap(); + let (tx, rx) = mpsc::channel(); + + _democanvas( &xcb, "Something...(f64)", tx.clone() + , Polyeder::tetrahedron(60.0) + , Polyeder::cube(60.0) ); + _democanvas( &xcb, "Something...(Fractional)", tx.clone() + , Polyeder::tetrahedron(Fractional(60,1)) + , Polyeder::cube(Fractional(60,1)) ); for x in rx { match x {