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 21 use std::convert::{TryFrom, TryInto, Into};
22 22 use std::f64::consts::PI as FPI;
23 23 use std::fmt::Display;
  24 +use std::marker::Send;
24 25 use std::num::TryFromIntError;
25 26 use std::ops::{Add,Sub,Neg,Mul,Div};
26 27 use std::sync::mpsc;
... ... @@ -309,66 +310,34 @@ fn _line() {
309 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 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 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 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 337 loop {
362 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 342 let rot1 = TMatrix::combine(vec!(rz, rotate_x(-deg*2), t));
374 343 let rot2 = TMatrix::combine(vec!(rz, rotate_y(-deg*2), t));
... ... @@ -388,7 +357,7 @@ fn main() {
388 357 let f = (passed.as_nanos() / step.as_nanos()) as u32;
389 358
390 359 if f > 1 {
391   - println!("!!! Detected frame drop");
  360 + println!("{} !!! Detected frame drop", title);
392 361 }
393 362
394 363 last = last + step*(f + 1);
... ... @@ -399,6 +368,42 @@ fn main() {
399 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 408 for x in rx {
404 409 match x {
... ...
Please register or login to post a comment