Re-enable and improve SVG output
This commit is contained in:
parent
ae4ac1732e
commit
0be8aef479
@ -74,7 +74,6 @@ pub(crate) fn dump_latex_code(route: &[RunState], polys: &[Polygon]) {
|
||||
println!("\\end{{tikzpicture}}");
|
||||
}
|
||||
|
||||
/*
|
||||
pub(crate) fn dump_route(house: Point, polys: &[Polygon], route: &Vec<RunState>) {
|
||||
let (points, lines, route1, route2_start) = gen_params(house, route);
|
||||
print!(
|
||||
@ -101,13 +100,9 @@ fn gen_params(
|
||||
Vec<Point>,
|
||||
Point,
|
||||
) {
|
||||
let first = route.first().unwrap();
|
||||
let last = route.last().unwrap();
|
||||
let best_delay = last.delay;
|
||||
let points = vec![
|
||||
(house, "red"),
|
||||
(first.bus.translate(0.0.into(), best_delay), "yellow"),
|
||||
(last.bus, "orange"),
|
||||
];
|
||||
let lines = route
|
||||
.iter()
|
||||
@ -118,7 +113,7 @@ fn gen_params(
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let route1 = route.iter().map(|x| x.pos).collect::<Vec<_>>();
|
||||
let route2_start = first.bus.translate(0.0.into(), best_delay);
|
||||
let route2_start = last.pos.translate(0.0, -last.total_distance * 2.0);
|
||||
(points, lines, route1, route2_start)
|
||||
}
|
||||
|
||||
@ -129,11 +124,12 @@ pub(crate) fn generate_svg(
|
||||
route1: &[Point],
|
||||
route2_start: Point,
|
||||
) -> String {
|
||||
let dot_radius = 25.2;
|
||||
let mut document = Document::new()
|
||||
// view box at (x,y), (w,h)
|
||||
.set(
|
||||
"viewBox",
|
||||
(0.0, route2_start.y(), 2100.0, -route2_start.y() + 1000.0),
|
||||
(-dot_radius, -route1.last().unwrap().y() - dot_radius, route1.iter().map(|p| p.x()).max_by(|a, b| a.partial_cmp(b).unwrap()).unwrap() + dot_radius * 2.0, -route2_start.y() + route1.last().unwrap().y() + dot_radius * 2.0),
|
||||
)
|
||||
.set("xmlns:xlink", "http://www.w3.org/1999/xlink");
|
||||
|
||||
@ -141,7 +137,7 @@ pub(crate) fn generate_svg(
|
||||
Circle::new()
|
||||
.set("cx", f64::from(p.x()))
|
||||
.set("cy", f64::from(-p.y()))
|
||||
.set("r", 25.2)
|
||||
.set("r", dot_radius)
|
||||
.set("opacity", 0.5)
|
||||
.set("fill", *color)
|
||||
}) {
|
||||
@ -205,7 +201,7 @@ pub(crate) fn generate_svg(
|
||||
let mut dot1 = Circle::new()
|
||||
.set("cx", 0.0)
|
||||
.set("cy", 0.0)
|
||||
.set("r", 25.2)
|
||||
.set("r", dot_radius)
|
||||
.set("opacity", 0.75)
|
||||
.set("fill", "gray");
|
||||
let mut motion1 = AnimateMotion::new()
|
||||
@ -231,7 +227,7 @@ pub(crate) fn generate_svg(
|
||||
let mut dot1 = Circle::new()
|
||||
.set("cx", 0.0)
|
||||
.set("cy", 0.0)
|
||||
.set("r", 25.2)
|
||||
.set("r", dot_radius)
|
||||
.set("opacity", 0.75)
|
||||
.set("fill", "gray");
|
||||
let mut motion1 = AnimateMotion::new()
|
||||
@ -244,4 +240,3 @@ pub(crate) fn generate_svg(
|
||||
|
||||
document.to_string()
|
||||
}
|
||||
*/
|
||||
|
34
src/main.rs
34
src/main.rs
@ -14,17 +14,21 @@ mod input;
|
||||
|
||||
type Point = geo::Point<f64>;
|
||||
type Line = geo::Line<f64>;
|
||||
type LineString = geo::LineString<f64>;
|
||||
type Polygon = geo::Polygon<f64>;
|
||||
|
||||
// 30 km/h = 8+1/3 m/s
|
||||
// 15 km/h = 4+1/6 m/s
|
||||
|
||||
#[derive(Debug, StructOpt)]
|
||||
#[derive(StructOpt)]
|
||||
#[structopt(name = "aufgabe1", about = "Implementierung für Aufgabe 1")]
|
||||
struct Opt {
|
||||
/// Debug-Modus aktivieren
|
||||
#[structopt(short = "d", long = "debug")]
|
||||
debug: bool,
|
||||
/// Zwischenlösungen speichern
|
||||
#[structopt(short = "s", long = "save")]
|
||||
save_intermediates: bool,
|
||||
/// Beste Lösung als tkz-Code ausgeben
|
||||
#[structopt(short = "t", long = "tkz")]
|
||||
tkz: bool,
|
||||
/// Geschwindigkeit von Lisa (in km/h)
|
||||
#[structopt(short = "l", long = "lisa", default_value = "15")]
|
||||
lisa: f64,
|
||||
@ -172,14 +176,14 @@ fn main() {
|
||||
best = route;
|
||||
best.reverse();
|
||||
best_delay = delay;
|
||||
/*
|
||||
display::save_svg(
|
||||
&format!("{}{}.svg", save_prefix, save_counter),
|
||||
house,
|
||||
&polys,
|
||||
&best,
|
||||
);
|
||||
*/
|
||||
if opt.save_intermediates {
|
||||
display::save_svg(
|
||||
&format!("{}{}.svg", save_prefix, save_counter),
|
||||
house,
|
||||
&polys,
|
||||
&best,
|
||||
);
|
||||
}
|
||||
save_counter += 1;
|
||||
}
|
||||
}
|
||||
@ -219,7 +223,11 @@ fn main() {
|
||||
let seconds = last.total_distance / (15.0 / 3.6);
|
||||
eprintln!("Dauer: {:02.0}:{:02.0}", seconds / 60.0, seconds % 60.0);
|
||||
// beste Route grafisch ausgeben
|
||||
display::dump_latex_code(&route, &polys);
|
||||
if opt.tkz {
|
||||
display::dump_latex_code(&route, &polys);
|
||||
} else {
|
||||
display::dump_route(house, &polys, &route);
|
||||
}
|
||||
}
|
||||
|
||||
fn none_intersect(polys: &[Polygon], line: &Line) -> bool {
|
||||
|
Loading…
Reference in New Issue
Block a user