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);
|
println!("\\tkzDrawSegment(R{},R{})", idx - 1, idx);
|
||||||
}
|
}
|
||||||
for idx in 0..route.len() {
|
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}}");
|
println!("\\end{{tikzpicture}}");
|
||||||
}
|
}
|
||||||
|
25
src/main.rs
25
src/main.rs
@ -218,6 +218,7 @@ fn main() {
|
|||||||
// neu gefundene Routen speichern
|
// neu gefundene Routen speichern
|
||||||
states.extend(all);
|
states.extend(all);
|
||||||
}
|
}
|
||||||
|
// beste Lösung ausgeben
|
||||||
eprintln!("Finale Lösung:");
|
eprintln!("Finale Lösung:");
|
||||||
let route = best;
|
let route = best;
|
||||||
let last = route.last().unwrap();
|
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)
|
// (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
|
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.
|
/// 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.
|
/// 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 {
|
fn best_bus_pos(opt: &Opt, total_distance: f64, lisa: Point) -> f64 {
|
||||||
let x_l = lisa.x(); // a
|
let x_l = lisa.x(); // a
|
||||||
let y_l = lisa.y(); // b
|
let y_l = lisa.y(); // b
|
||||||
// y-Koordinate des Busses: d
|
|
||||||
// Länge, die Lisa noch laufen muss: l
|
// y-Koordinate des Busses: d
|
||||||
// Verhältnis beider Geschwindigkeiten: x = bus / lisa
|
// Länge, die Lisa noch laufen muss: l
|
||||||
// l^2 = sqrt(a^2 + (b - xl - d)^2)
|
// Verhältnis beider Geschwindigkeiten: x = bus / lisa
|
||||||
// die quadratische Gleichung hat zwei Lösungen (siehe Dok.)
|
// l^2 = sqrt(a^2 + (b - xl - d)^2)
|
||||||
// nach der ABC-Formel muss b^2 - 4ac = 0 sein, damit die Gleichung nur eine Lösung hat:
|
// die quadratische Gleichung hat zwei Lösungen (siehe Dok.)
|
||||||
// (2xb-2xd)^2 - 4*((1-x^2)*(-a^2-b^2-d^2+2bd)) = 0
|
// nach der ABC-Formel muss b^2 - 4ac = 0 sein, damit die Gleichung nur eine Lösung hat:
|
||||||
// (eine WolframAlpha-Eingabe später..)
|
// (2xb-2xd)^2 - 4*((1-x^2)*(-a^2-b^2-d^2+2bd)) = 0
|
||||||
// d = sqrt(a^2 * (x^2 - 1)) + b
|
// (eine WolframAlpha-Eingabe später..)
|
||||||
// in dieser Berechnung wird auch die bereits zurückgelegte Strecke berücksichtigt:
|
// 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()
|
y_l - (((opt.bus / opt.lisa).powi(2) - 1.0) * x_l.powi(2)).sqrt()
|
||||||
- total_distance * (opt.bus / opt.lisa)
|
- total_distance * (opt.bus / opt.lisa)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user