|
|
|
@ -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 {
|
|
|
|
|