Commit b06ee13bf7204350592c82fe8907f3a7bff0b233

Authored by Georg Hopp
1 parent 561f75cd

display both f64 and Fractional based polygons

Showing 1 changed file with 57 additions and 52 deletions
@@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
21 use std::convert::{TryFrom, TryInto, Into}; 21 use std::convert::{TryFrom, TryInto, Into};
22 use std::f64::consts::PI as FPI; 22 use std::f64::consts::PI as FPI;
23 use std::fmt::Display; 23 use std::fmt::Display;
  24 +use std::marker::Send;
24 use std::num::TryFromIntError; 25 use std::num::TryFromIntError;
25 use std::ops::{Add,Sub,Neg,Mul,Div}; 26 use std::ops::{Add,Sub,Neg,Mul,Div};
26 use std::sync::mpsc; 27 use std::sync::mpsc;
@@ -309,66 +310,34 @@ fn _line() { @@ -309,66 +310,34 @@ fn _line() {
309 println!("{:>14} : {}", pg, pg.plot()); 310 println!("{:>14} : {}", pg, pg.plot());
310 } 311 }
311 312
312 -fn main() {  
313 - common_fractional();  
314 - println!();  
315 - continuous();  
316 - println!();  
317 - sqrt();  
318 - println!();  
319 - pi();  
320 - println!();  
321 - _sin();  
322 - println!();  
323 - _cos();  
324 - println!();  
325 - _tan();  
326 - println!();  
327 - _vector1();  
328 - println!();  
329 - _vector2();  
330 - println!();  
331 - _transform1();  
332 - println!();  
333 - _transform2();  
334 - println!();  
335 - _line(); 313 +fn _democanvas<T>( xcb :&XcbEasel
  314 + , title :&'static str
  315 + , tx :mpsc::Sender<i32>
  316 + , tetrahedron :Polyeder<T>
  317 + , cube :Polyeder<T> )
  318 + where T: 'static + Add<Output = T> + Sub<Output = T> + Neg<Output = T>
  319 + + Mul<Output = T> + Div<Output = T>
  320 + + Copy + Trig + Send + From<i32> {
336 321
337 - let xcb = XcbEasel::new().unwrap();  
338 let mut canvas = xcb.canvas(151, 151).unwrap(); 322 let mut canvas = xcb.canvas(151, 151).unwrap();
  323 + let camera = Camera::<T>::new(&canvas, 45); // the orig. view angle
  324 + // was 50.
339 325
340 - canvas.set_title("Something..."); 326 + canvas.set_title(title);
341 canvas.init_events(); 327 canvas.init_events();
  328 + canvas.start_events(tx.clone());
342 329
343 - let (tx, rx) = mpsc::channel();  
344 -  
345 - let tetrahedron = Polyeder::tetrahedron(60.0);  
346 - let cube = Polyeder::cube(60.0);  
347 - let camera = Camera::<f64>::new(&canvas, 45); // the orig. view angle  
348 - // was 50.  
349 - /*  
350 - let tetrahedron = Polyeder::tetrahedron(Fractional(60,1));  
351 - let cube = Polyeder::cube(Fractional(60,1));  
352 - let camera = Camera::<Fractional>::new(&canvas, 45);  
353 - */  
354 -  
355 - canvas.start_events(tx);  
356 -  
357 - let start = Instant::now();  
358 - let step = Duration::from_millis(25);  
359 - let mut last = Instant::now();  
360 thread::spawn(move || { 330 thread::spawn(move || {
  331 + let start = Instant::now();
  332 + let step = Duration::from_millis(25);
  333 + let mut last = Instant::now();
  334 +
  335 + let t :TMatrix<T> = translate(Vector(0.into(), 0.into(), 150.into()));
  336 +
361 loop { 337 loop {
362 let deg = ((start.elapsed() / 25).as_millis() % 360) as i32; 338 let deg = ((start.elapsed() / 25).as_millis() % 360) as i32;
363 339
364 - let t = translate(Vector(0.0, 0.0, 150.0));  
365 - let rz :TMatrix<f64> = rotate_z(deg);  
366 - /*  
367 - let t = translate(Vector( Fractional(0,1)  
368 - , Fractional(0,1)  
369 - , Fractional(150,1) ));  
370 - let rz :TMatrix<Fractional> = rotate_z(deg);  
371 - */ 340 + let rz :TMatrix<T> = rotate_z(deg);
372 341
373 let rot1 = TMatrix::combine(vec!(rz, rotate_x(-deg*2), t)); 342 let rot1 = TMatrix::combine(vec!(rz, rotate_x(-deg*2), t));
374 let rot2 = TMatrix::combine(vec!(rz, rotate_y(-deg*2), t)); 343 let rot2 = TMatrix::combine(vec!(rz, rotate_y(-deg*2), t));
@@ -388,7 +357,7 @@ fn main() { @@ -388,7 +357,7 @@ fn main() {
388 let f = (passed.as_nanos() / step.as_nanos()) as u32; 357 let f = (passed.as_nanos() / step.as_nanos()) as u32;
389 358
390 if f > 1 { 359 if f > 1 {
391 - println!("!!! Detected frame drop"); 360 + println!("{} !!! Detected frame drop", title);
392 } 361 }
393 362
394 last = last + step*(f + 1); 363 last = last + step*(f + 1);
@@ -399,6 +368,42 @@ fn main() { @@ -399,6 +368,42 @@ fn main() {
399 thread::sleep(last - Instant::now()); 368 thread::sleep(last - Instant::now());
400 } 369 }
401 }); 370 });
  371 +}
  372 +
  373 +fn main() {
  374 + common_fractional();
  375 + println!();
  376 + continuous();
  377 + println!();
  378 + sqrt();
  379 + println!();
  380 + pi();
  381 + println!();
  382 + _sin();
  383 + println!();
  384 + _cos();
  385 + println!();
  386 + _tan();
  387 + println!();
  388 + _vector1();
  389 + println!();
  390 + _vector2();
  391 + println!();
  392 + _transform1();
  393 + println!();
  394 + _transform2();
  395 + println!();
  396 + _line();
  397 +
  398 + let xcb = XcbEasel::new().unwrap();
  399 + let (tx, rx) = mpsc::channel();
  400 +
  401 + _democanvas( &xcb, "Something...(f64)", tx.clone()
  402 + , Polyeder::tetrahedron(60.0)
  403 + , Polyeder::cube(60.0) );
  404 + _democanvas( &xcb, "Something...(Fractional)", tx.clone()
  405 + , Polyeder::tetrahedron(Fractional(60,1))
  406 + , Polyeder::cube(Fractional(60,1)) );
402 407
403 for x in rx { 408 for x in rx {
404 match x { 409 match x {
Please register or login to post a comment