Commit b06ee13bf7204350592c82fe8907f3a7bff0b233
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