Formatting and colors
This commit is contained in:
parent
573788fbfc
commit
443eb4217c
@ -69,7 +69,8 @@ pub(crate) fn dump_latex_code(route: &[RunState], polys: &[Polygon]) {
|
||||
println!("\\tkzDrawSegment(R{},R{})", idx - 1, idx);
|
||||
}
|
||||
for idx in 0..route.len() {
|
||||
println!("\\tkzDrawPoint[fill=red,color=black,size=13](R{})", idx);
|
||||
let color = if idx == 0 || idx == route.len() - 1 { "green" } else { "red" };
|
||||
println!("\\tkzDrawPoint[fill={},color=black,size=13](R{})", color, idx);
|
||||
}
|
||||
println!("\\end{{tikzpicture}}");
|
||||
}
|
||||
|
25
src/main.rs
25
src/main.rs
@ -218,6 +218,7 @@ fn main() {
|
||||
// neu gefundene Routen speichern
|
||||
states.extend(all);
|
||||
}
|
||||
// beste Lösung ausgeben
|
||||
eprintln!("Finale Lösung:");
|
||||
let route = best;
|
||||
let last = route.last().unwrap();
|
||||
@ -295,6 +296,7 @@ fn none_intersect(polys: &[Polygon], line: &Line) -> bool {
|
||||
}
|
||||
// (dieser Fall tritt auf, wenn die Linie von einer Polygon-Ecke zu einer anderen Ecke verläuft)
|
||||
}
|
||||
// keine Überschneidung gefunden: der Weg ist frei!
|
||||
true
|
||||
}
|
||||
|
||||
@ -305,20 +307,21 @@ fn distance(a: Point, b: Point) -> f64 {
|
||||
|
||||
/// Mit dieser Funktion kann man bestimmen, wo der Bus zu Lisas Startzeit war.
|
||||
/// Die Funktion nimmt an, dass Lisa, von ihrer aktuellen Position aus, den Bus ohne Umwege erreichen kann.
|
||||
/// Sehr hilfreich als Heuristik, da sie nie schlechter als das eigentliche Ergebnis sein kann.
|
||||
/// Sehr hilfreich als Heuristik, da die theoretisch beste Lösung nie schlechter als das eigentliche Ergebnis sein kann.
|
||||
fn best_bus_pos(opt: &Opt, total_distance: f64, lisa: Point) -> f64 {
|
||||
let x_l = lisa.x(); // a
|
||||
let y_l = lisa.y(); // b
|
||||
// y-Koordinate des Busses: d
|
||||
// Länge, die Lisa noch laufen muss: l
|
||||
// Verhältnis beider Geschwindigkeiten: x = bus / lisa
|
||||
// l^2 = sqrt(a^2 + (b - xl - d)^2)
|
||||
// die quadratische Gleichung hat zwei Lösungen (siehe Dok.)
|
||||
// nach der ABC-Formel muss b^2 - 4ac = 0 sein, damit die Gleichung nur eine Lösung hat:
|
||||
// (2xb-2xd)^2 - 4*((1-x^2)*(-a^2-b^2-d^2+2bd)) = 0
|
||||
// (eine WolframAlpha-Eingabe später..)
|
||||
// d = sqrt(a^2 * (x^2 - 1)) + b
|
||||
// in dieser Berechnung wird auch die bereits zurückgelegte Strecke berücksichtigt:
|
||||
|
||||
// y-Koordinate des Busses: d
|
||||
// Länge, die Lisa noch laufen muss: l
|
||||
// Verhältnis beider Geschwindigkeiten: x = bus / lisa
|
||||
// l^2 = sqrt(a^2 + (b - xl - d)^2)
|
||||
// die quadratische Gleichung hat zwei Lösungen (siehe Dok.)
|
||||
// nach der ABC-Formel muss b^2 - 4ac = 0 sein, damit die Gleichung nur eine Lösung hat:
|
||||
// (2xb-2xd)^2 - 4*((1-x^2)*(-a^2-b^2-d^2+2bd)) = 0
|
||||
// (eine WolframAlpha-Eingabe später..)
|
||||
// d = sqrt(a^2 * (x^2 - 1)) + b
|
||||
// in dieser Berechnung wird auch die bereits zurückgelegte Strecke berücksichtigt:
|
||||
y_l - (((opt.bus / opt.lisa).powi(2) - 1.0) * x_l.powi(2)).sqrt()
|
||||
- total_distance * (opt.bus / opt.lisa)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user