Browse Source

display both f64 and Fractional based polygons

master
Georg Hopp 6 years ago
parent
commit
b06ee13bf7
Signed by: ghopp GPG Key ID: 4C5D226768784538
  1. 105
      fractional/src/main.rs

105
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<T>( xcb :&XcbEasel
, title :&'static str
, tx :mpsc::Sender<i32>
, tetrahedron :Polyeder<T>
, cube :Polyeder<T> )
where T: 'static + Add<Output = T> + Sub<Output = T> + Neg<Output = T>
+ Mul<Output = T> + Div<Output = T>
+ Copy + Trig + Send + From<i32> {
let xcb = XcbEasel::new().unwrap();
let mut canvas = xcb.canvas(151, 151).unwrap();
canvas.set_title("Something...");
canvas.init_events();
let (tx, rx) = mpsc::channel();
let tetrahedron = Polyeder::tetrahedron(60.0);
let cube = Polyeder::cube(60.0);
let camera = Camera::<f64>::new(&canvas, 45); // the orig. view angle
let camera = Camera::<T>::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::<Fractional>::new(&canvas, 45);
*/
canvas.start_events(tx);
canvas.set_title(title);
canvas.init_events();
canvas.start_events(tx.clone());
thread::spawn(move || {
let start = Instant::now();
let step = Duration::from_millis(25);
let mut last = Instant::now();
thread::spawn(move || {
let t :TMatrix<T> = 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<f64> = rotate_z(deg);
/*
let t = translate(Vector( Fractional(0,1)
, Fractional(0,1)
, Fractional(150,1) ));
let rz :TMatrix<Fractional> = rotate_z(deg);
*/
let rz :TMatrix<T> = 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 {

Loading…
Cancel
Save