diff --git a/lisarennt2.txt b/lisarennt2.txt new file mode 100644 index 0000000..c62e5cd --- /dev/null +++ b/lisarennt2.txt @@ -0,0 +1,5 @@ +3 +4 390 260 505 213 551 329 413 444 +5 410 50 433 50 594 96 525 188 387 165 +5 170 80 193 80 340 150 331 287 170 402 +633 189 diff --git a/lisarennt3.txt b/lisarennt3.txt new file mode 100644 index 0000000..62f7986 --- /dev/null +++ b/lisarennt3.txt @@ -0,0 +1,10 @@ +8 +6 539 98 549 98 599 118 569 158 519 198 489 138 +4 559 178 569 178 609 248 519 238 +8 389 78 459 68 599 68 479 88 459 178 509 248 599 258 499 298 +7 320 98 330 98 370 118 360 158 330 198 300 158 280 118 +7 380 208 390 188 430 208 380 228 390 288 360 248 340 208 +4 352 287 445 305 386 366 291 296 +5 319 18 293 53 365 80 238 73 257 15 +9 637 248 516 330 426 238 462 302 451 350 613 348 761 346 754 231 685 183 +479 168 diff --git a/lisarennt4.txt b/lisarennt4.txt new file mode 100644 index 0000000..37ccd2c --- /dev/null +++ b/lisarennt4.txt @@ -0,0 +1,13 @@ +11 +5 121 39 290 27 284 86 156 110 121 88 +6 133 206 202 144 254 170 278 224 201 194 156 258 +6 160 290 247 301 162 398 365 280 276 253 208 233 +3 170 421 386 298 384 472 +4 408 297 428 297 565 199 413 475 +4 300 120 440 160 382 227 320 201 +3 323 34 440 20 308 85 +3 500 20 500 140 376 103 +8 540 20 600 40 600 100 740 100 700 340 660 340 660 140 540 140 +4 580 240 633 402 896 475 508 466 +10 780 140 1020 140 1020 480 960 480 960 200 800 200 773 301 900 300 900 340 740 340 +856 270 diff --git a/lisarennt5.txt b/lisarennt5.txt new file mode 100644 index 0000000..cf3da3c --- /dev/null +++ b/lisarennt5.txt @@ -0,0 +1,14 @@ +12 +4 400 185 650 185 650 255 400 255 +5 497 10 598 19 604 102 549 165 447 141 +7 320 165 380 165 380 285 510 285 510 305 420 305 320 305 +4 300 55 360 45 380 135 320 145 +4 200 35 280 35 280 215 200 215 +5 170 215 300 265 300 325 180 305 150 245 +6 90 35 130 95 170 55 180 155 120 195 70 135 +4 400 125 430 145 410 175 380 155 +4 90 225 140 225 130 265 90 285 +5 540 280 541 280 800 280 800 400 540 400 +10 380 340 381 340 520 340 460 380 540 440 720 460 420 460 140 440 140 300 280 380 +4 80 300 81 300 140 280 120 360 +621 162 diff --git a/src/display.rs b/src/display.rs index edc8149..5af5ba5 100644 --- a/src/display.rs +++ b/src/display.rs @@ -1,6 +1,6 @@ use svg::Document; use svg::Node; -use svg::node::element::Circle; +use svg::node::element::{AnimateMotion, MotionPath, Circle}; use svg::node::element::Path; use svg::node::element::path::Data; @@ -8,16 +8,18 @@ use std::io; use super::*; -pub(crate) fn dump_svg(points: &[(Point, &'static str)], lines: &[(Line, &'static str)], polys: &[Polygon]) { +pub(crate) fn dump_svg(points: &[(Point, &'static str)], lines: &[(Line, &'static str)], polys: &[Polygon], route1: &[Point], route2_start: Point) { let mut document = Document::new() // view box at (0, -200), w*h (200, 200) - .set("viewBox", (0, -1100, 2100, 2100)); + .set("viewBox", (0, -1100, 2100, 2100)) + .set("xmlns:xlink", "http://www.w3.org/1999/xlink"); for circle in points.iter().map(|(p, color)| { Circle::new() .set("cx", f64::from(p.x())) .set("cy", f64::from(-p.y())) - .set("r", 1.2) + .set("r", 25.2) + .set("opacity", 0.5) .set("fill", *color) }) { document.append(circle); @@ -31,7 +33,8 @@ pub(crate) fn dump_svg(points: &[(Point, &'static str)], lines: &[(Line, &'stati Path::new() .set("fill", "none") .set("stroke", *color) - .set("stroke-width", 0.25) + .set("stroke-width", 2.0) + .set("opacity", 0.5) .set("d", data) }) { document.append(path); @@ -61,5 +64,59 @@ pub(crate) fn dump_svg(points: &[(Point, &'static str)], lines: &[(Line, &'stati document.append(path); } + let mut first: (f64, f64) = (route1[0].x().into(), route1[0].y().into()); + first.1 *= -1.0; + let mut data = Data::new() + .move_to(first); + for point in &route1[1..] { + let c = point.x_y(); + let mut c: (f64, f64) = (c.0.into(), c.1.into()); + c.1 *= -1.0; + data = data.line_to(c); + } + let path = Path::new() + .set("id", "route1") + .set("fill", "none") + .set("stroke", "none") + .set("d", data); + document.append(path); + + let mut dot1 = Circle::new() + .set("cx", 0.0) + .set("cy", 0.0) + .set("r", 25.2) + .set("opacity", 0.75) + .set("fill", "gray"); + let mut motion1 = AnimateMotion::new().set("dur", "2s").set("repeatCount", "indefinite"); + let path = MotionPath::new().set("xlink:href", "#route1"); + motion1.append(path); + dot1.append(motion1); + document.append(dot1); + + let mut first: (f64, f64) = (route2_start.x().into(), route2_start.y().into()); + first.1 *= -1.0; + let mut data = Data::new() + .move_to(first); + let last = route1.last().unwrap(); + data = data.line_to::<(f64, f64)>((last.x().into(), (|x:f64|-x)(last.y().into()))); + let path = Path::new() + .set("id", "route2") + .set("fill", "none") + .set("stroke", "none") + .set("d", data); + document.append(path); + + let mut dot1 = Circle::new() + .set("cx", 0.0) + .set("cy", 0.0) + .set("r", 25.2) + .set("opacity", 0.75) + .set("fill", "gray"); + let mut motion1 = AnimateMotion::new().set("dur", "2s").set("repeatCount", "indefinite"); + let path = MotionPath::new().set("xlink:href", "#route2"); + motion1.append(path); + dot1.append(motion1); + document.append(dot1); + svg::write(io::stdout(), &document).unwrap(); } diff --git a/src/main.rs b/src/main.rs index 0f0b729..627bdc5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -142,7 +142,7 @@ fn main() { (x, "gray") }).collect::>(); - display::dump_svg(&points, &lines, &polys); + display::dump_svg(&points, &lines, &polys, &route.iter().map(|x| x.pos).collect::>(), first.bus.translate(0.0.into(), best_delay)); } /// [a; b]