Commit 45d1af9c5967dd04926c00e580d578bef89ffc21

Authored by Georg Hopp
1 parent b36e20a2

Add first transformed Polygon

@@ -50,8 +50,7 @@ impl Coordinate { @@ -50,8 +50,7 @@ impl Coordinate {
50 let Coordinate(x, y) = v[0]; 50 let Coordinate(x, y) = v[0];
51 51
52 if x != bx || y != by { 52 if x != bx || y != by {
53 - let doinc = (2*err >= dy, 2*err <= dx);  
54 - let (x, y, err) = match doinc { 53 + let (x, y, err) = match (2*err >= dy, 2*err <= dx) {
55 (true, false) => (x + sx, y, err + dy), 54 (true, false) => (x + sx, y, err + dy),
56 (false, true) => ( x, y + sy, err + dx), 55 (false, true) => ( x, y + sy, err + dx),
57 _ => (x + sx, y + sy, err + dx + dy ), 56 _ => (x + sx, y + sy, err + dx + dy ),
@@ -218,7 +217,7 @@ impl Drawable for Polygon { @@ -218,7 +217,7 @@ impl Drawable for Polygon {
218 r.append(&mut i.line(j)[1..].to_vec()); 217 r.append(&mut i.line(j)[1..].to_vec());
219 i = *j; 218 i = *j;
220 } 219 }
221 - let mut j = i.line(&a); 220 + let mut j = a.line(&i);
222 let l = j.len(); 221 let l = j.len();
223 r.append(&mut j[1..l-1].to_vec()); 222 r.append(&mut j[1..l-1].to_vec());
224 Coordinates(r) 223 Coordinates(r)
@@ -254,9 +254,50 @@ fn _line() { @@ -254,9 +254,50 @@ fn _line() {
254 254
255 println!(); 255 println!();
256 let pg = Polygon( 256 let pg = Polygon(
257 - Coordinates(vec!( Coordinate( 0, -20)  
258 - , Coordinate( 20, 20)  
259 - , Coordinate(-20, 20) ))); 257 + Coordinates(vec!( Coordinate( 0, -10)
  258 + , Coordinate( 10, 10)
  259 + , Coordinate(-10, 10) )));
  260 + println!("{:>14} : {}", pg, pg.plot());
  261 +
  262 + let i = Vector(Fractional( 0,1), Fractional(-30,1), Fractional(0,1));
  263 + let j = Vector(Fractional( 30,1), Fractional( 30,1), Fractional(0,1));
  264 + let k = Vector(Fractional(-30,1), Fractional( 30,1), Fractional(0,1));
  265 +
  266 + let rot :TMatrix<Fractional> = rotate_z(20);
  267 + let Vector(ix, iy, _) = rot.apply(&i);
  268 + let Vector(jx, jy, _) = rot.apply(&j);
  269 + let Vector(kx, ky, _) = rot.apply(&k);
  270 +
  271 + fn to_i32(x :Fractional) -> i32 {
  272 + let Fractional(n, d) = x;
  273 + (n / d + if (n % d).abs() < (n / 2).abs() { 0 } else { 1 }) as i32
  274 + }
  275 +
  276 + println!();
  277 + let pg = Polygon(
  278 + Coordinates(vec!( Coordinate(to_i32(ix) + 100, to_i32(iy) + 100)
  279 + , Coordinate(to_i32(jx) + 100, to_i32(jy) + 100)
  280 + , Coordinate(to_i32(kx) + 100, to_i32(ky) + 100) )));
  281 + println!("{:>14} : {}", pg, pg.plot());
  282 +
  283 + let i = Vector( 0.0, -30.0, 0.0);
  284 + let j = Vector( 30.0, 30.0, 0.0);
  285 + let k = Vector(-30.0, 30.0, 0.0);
  286 +
  287 + let rot :TMatrix<f64> = rotate_z(20);
  288 + let Vector(ix, iy, _) = rot.apply(&i);
  289 + let Vector(jx, jy, _) = rot.apply(&j);
  290 + let Vector(kx, ky, _) = rot.apply(&k);
  291 +
  292 + fn to_i32_2(x :f64) -> i32 {
  293 + x.round() as i32
  294 + }
  295 +
  296 + println!();
  297 + let pg = Polygon(
  298 + Coordinates(vec!( Coordinate(to_i32_2(ix) + 100, to_i32_2(iy) + 100)
  299 + , Coordinate(to_i32_2(jx) + 100, to_i32_2(jy) + 100)
  300 + , Coordinate(to_i32_2(kx) + 100, to_i32_2(ky) + 100) )));
260 println!("{:>14} : {}", pg, pg.plot()); 301 println!("{:>14} : {}", pg, pg.plot());
261 } 302 }
262 303
Please register or login to post a comment