|
|
|
@ -29,7 +29,7 @@ use fractional::continuous::Continuous; |
|
|
|
use fractional::fractional::{Fractional, from_vector};
|
|
|
|
use fractional::trigonometry::Trig;
|
|
|
|
use fractional::vector::{Vector};
|
|
|
|
use fractional::transform::{translate, rotate_x, rotate_y, rotate_z, rotate_v};
|
|
|
|
use fractional::transform::{TMatrix, translate, rotate_x, rotate_y, rotate_z, rotate_v};
|
|
|
|
|
|
|
|
// Tail recursive Bresenham line with integer incremental error.
|
|
|
|
fn line(a :(u32, u32), b :(u32, u32)) -> Vec<(u32, u32)>{
|
|
|
|
@ -228,47 +228,42 @@ fn _transform<T>(v :Vector<T>, v1 :Vector<T>, v2 :Vector<T>, v3 :Vector<T>) |
|
|
|
where T: Add<Output = T> + Sub<Output = T> + Neg<Output = T>
|
|
|
|
+ Mul<Output = T> + Div<Output = T> + Trig
|
|
|
|
+ From<i32> + Copy + Display {
|
|
|
|
let mt = translate(v);
|
|
|
|
|
|
|
|
println!("{:>14} : {}", "Vector v1", v1);
|
|
|
|
println!("{:>14} : {}", "translate v1", mt.apply(&v1));
|
|
|
|
println!("{:>14} : {}", "translate v1", translate(v).apply(&v1));
|
|
|
|
println!();
|
|
|
|
|
|
|
|
println!("{:>14} : {}", "Vector v2", v2);
|
|
|
|
for d in [ 30, 45, 60, 90, 120, 135, 150, 180
|
|
|
|
, 210, 225, 240, 270, 300, 315, 330 ].iter() {
|
|
|
|
let m = rotate_x(*d as i32);
|
|
|
|
println!("{:>14} : {}", format!("rot_x {} v2", d), m.apply(&v2));
|
|
|
|
fn _rot<T>( o :&str , n :&str , v :&Vector<T>
|
|
|
|
, fs :&[&dyn Fn(i32) -> TMatrix<T>] )
|
|
|
|
where T: Add<Output = T> + Sub<Output = T> + Neg<Output = T>
|
|
|
|
+ Mul<Output = T> + Div<Output = T> + Trig
|
|
|
|
+ From<i32> + Copy + Display {
|
|
|
|
|
|
|
|
for d in [ 30, 45, 60, 90, 120, 135, 150, 180
|
|
|
|
, 210, 225, 240, 270, 300, 315, 330 ].iter() {
|
|
|
|
let mi = fs.iter().map(|f| f(*d as i32));
|
|
|
|
println!( "{:>14} : {}"
|
|
|
|
, format!("{} {} {}", o, d, n)
|
|
|
|
, TMatrix::combine(mi).apply(v) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
println!();
|
|
|
|
|
|
|
|
println!("{:>14} : {}", "Vector v2", v2);
|
|
|
|
for d in [ 30, 45, 60, 90, 120, 135, 150, 180
|
|
|
|
, 210, 225, 240, 270, 300, 315, 330 ].iter() {
|
|
|
|
let m = rotate_y(*d as i32);
|
|
|
|
println!("{:>14} : {}", format!("rot_y {} v2", d), m.apply(&v2));
|
|
|
|
}
|
|
|
|
_rot("rot_x", "v2", &v2, &[&rotate_x]);
|
|
|
|
println!();
|
|
|
|
|
|
|
|
for d in [ 30, 45, 60, 90, 120, 135, 150, 180
|
|
|
|
, 210, 225, 240, 270, 300, 315, 330 ].iter() {
|
|
|
|
let m = rotate_x(*d as i32) * rotate_y(*d as i32);
|
|
|
|
println!("{:>14} : {}", format!("rot_xy {} v2", d), m.apply(&v2));
|
|
|
|
}
|
|
|
|
_rot("rot_y", "v2", &v2, &[&rotate_y]);
|
|
|
|
println!();
|
|
|
|
_rot("rot_xy", "v2", &v2, &[&rotate_x, &rotate_y]);
|
|
|
|
println!();
|
|
|
|
|
|
|
|
println!("{:>14} : {}", "Vector v3", v3);
|
|
|
|
for d in [ 30, 45, 60, 90, 120, 135, 150, 180
|
|
|
|
, 210, 225, 240, 270, 300, 315, 330 ].iter() {
|
|
|
|
let m = rotate_z(*d as i32);
|
|
|
|
println!("{:>14} : {}", format!("rot_z {} v3", d), m.apply(&v3));
|
|
|
|
}
|
|
|
|
_rot("rot_z", "v3", &v3, &[&rotate_z]);
|
|
|
|
println!();
|
|
|
|
|
|
|
|
for d in [ 30, 45, 60, 90, 120, 135, 150, 180
|
|
|
|
, 210, 225, 240, 270, 300, 315, 330 ].iter() {
|
|
|
|
let m = rotate_v(&v, *d as i32);
|
|
|
|
println!("{:>14} : {}", format!("rot_v {} v2", d), m.apply(&v2));
|
|
|
|
println!( "{:>14} : {}"
|
|
|
|
, format!("rot_v {} v2", d)
|
|
|
|
, rotate_v(&v, *d as i32).apply(&v2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|