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