.
This commit is contained in:
parent
01b5037ed8
commit
6a29ec6223
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -1,9 +1,11 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aufgabe1"
|
name = "aufgabe1"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"geo 0.11.0",
|
"geo 0.11.0 (git+https://github.com/georust/geo)",
|
||||||
"svg 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
"svg 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -77,9 +79,10 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "geo"
|
name = "geo"
|
||||||
version = "0.11.0"
|
version = "0.11.0"
|
||||||
|
source = "git+https://github.com/georust/geo#96c7846d703a74f59ba68e68929415cbce4a68d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"geo-types 0.3.0",
|
"geo-types 0.3.0 (git+https://github.com/georust/geo)",
|
||||||
"num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rstar 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rstar 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
@ -87,6 +90,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "geo-types"
|
name = "geo-types"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
source = "git+https://github.com/georust/geo#96c7846d703a74f59ba68e68929415cbce4a68d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rstar 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rstar 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -219,6 +223,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878"
|
"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878"
|
||||||
"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2"
|
"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2"
|
||||||
"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1"
|
"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1"
|
||||||
|
"checksum geo 0.11.0 (git+https://github.com/georust/geo)" = "<none>"
|
||||||
|
"checksum geo-types 0.3.0 (git+https://github.com/georust/geo)" = "<none>"
|
||||||
"checksum libc 0.2.47 (registry+https://github.com/rust-lang/crates.io-index)" = "48450664a984b25d5b479554c29cc04e3150c97aa4c01da5604a2d4ed9151476"
|
"checksum libc 0.2.47 (registry+https://github.com/rust-lang/crates.io-index)" = "48450664a984b25d5b479554c29cc04e3150c97aa4c01da5604a2d4ed9151476"
|
||||||
"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
|
"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
|
||||||
"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
|
"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
|
||||||
|
@ -9,6 +9,6 @@ codegen-units = 1
|
|||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
geo = { path = "/home/arne/Documents/Code/Github/geo/geo" }
|
geo = { git = "https://github.com/georust/geo" }
|
||||||
svg = "0.5.11"
|
svg = "0.5.11"
|
||||||
chrono = "0.4.6"
|
chrono = "0.4.6"
|
||||||
|
@ -66,7 +66,7 @@
|
|||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
|
||||||
\section{Lösungsidee}
|
\section{Lösungsidee}
|
||||||
Zunächst kann man feststellen, dass der letzte Abschnitt jeder Route zum Bus immer exakt gerade ist. In einer Kurve würde Lisa weiter laufen, ohne am Ende auf der y-Achse weiter zu sein. Es gibt keinen, einen oder zwei Treffpunkte, bei denen Lisa (ohne zu warten) den Bus erwischt:
|
Zunächst kann man feststellen, dass der letzte Abschnitt jeder Route zum Bus immer exakt gerade ist. In einer Kurve würde Lisa länger laufen, ohne am Ende auf der y-Achse weiter zu sein. Es gibt keinen, einen oder zwei Treffpunkte, bei denen Lisa (ohne zu warten) den Bus erwischt:
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
|
@ -13,7 +13,7 @@ pub(crate) fn dump_latex_code(route: &[RunState], polys: &[Polygon]) {
|
|||||||
let mut xmax = 0.0;
|
let mut xmax = 0.0;
|
||||||
let mut ymax = 0.0;
|
let mut ymax = 0.0;
|
||||||
for poly in polys {
|
for poly in polys {
|
||||||
for point in poly.exterior.points_iter() {
|
for point in poly.exterior().points_iter() {
|
||||||
let x = point.x() / SCALE;
|
let x = point.x() / SCALE;
|
||||||
let y = point.y() / SCALE;
|
let y = point.y() / SCALE;
|
||||||
if x > xmax {
|
if x > xmax {
|
||||||
@ -33,11 +33,11 @@ pub(crate) fn dump_latex_code(route: &[RunState], polys: &[Polygon]) {
|
|||||||
println!("\\tkzGrid");
|
println!("\\tkzGrid");
|
||||||
for (idx, poly) in polys.iter().enumerate() {
|
for (idx, poly) in polys.iter().enumerate() {
|
||||||
print!("\\tkzDefPoints{{");
|
print!("\\tkzDefPoints{{");
|
||||||
for (poly_idx, point) in poly.exterior.points_iter().enumerate() {
|
for (poly_idx, point) in poly.exterior().points_iter().enumerate() {
|
||||||
let x = point.x() / SCALE;
|
let x = point.x() / SCALE;
|
||||||
let y = point.y() / SCALE;
|
let y = point.y() / SCALE;
|
||||||
print!("{}/{}/P{}_{}", x, y, idx, poly_idx);
|
print!("{}/{}/P{}_{}", x, y, idx, poly_idx);
|
||||||
if poly_idx != poly.exterior.0.len() - 1 {
|
if poly_idx != poly.exterior().0.len() - 1 {
|
||||||
print!(",");
|
print!(",");
|
||||||
}
|
}
|
||||||
if x > xmax {
|
if x > xmax {
|
||||||
@ -49,9 +49,9 @@ pub(crate) fn dump_latex_code(route: &[RunState], polys: &[Polygon]) {
|
|||||||
}
|
}
|
||||||
println!("}}");
|
println!("}}");
|
||||||
print!("\\tkzDrawPolygon[fill=black,line width=1pt,opacity=0.5](");
|
print!("\\tkzDrawPolygon[fill=black,line width=1pt,opacity=0.5](");
|
||||||
for (poly_idx, _) in poly.exterior.points_iter().enumerate() {
|
for (poly_idx, _) in poly.exterior().points_iter().enumerate() {
|
||||||
print!("P{}_{}", idx, poly_idx);
|
print!("P{}_{}", idx, poly_idx);
|
||||||
if poly_idx != poly.exterior.0.len() - 1 {
|
if poly_idx != poly.exterior().0.len() - 1 {
|
||||||
print!(",");
|
print!(",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ pub(crate) fn generate_svg(
|
|||||||
}
|
}
|
||||||
|
|
||||||
for path in polys.iter().map(|poly| {
|
for path in polys.iter().map(|poly| {
|
||||||
let coords = &poly.exterior.0;
|
let coords = &poly.exterior().0;
|
||||||
let first = coords[0].x_y();
|
let first = coords[0].x_y();
|
||||||
let mut first: (f64, f64) = (first.0.into(), first.1.into());
|
let mut first: (f64, f64) = (first.0.into(), first.1.into());
|
||||||
first.1 *= -1.0;
|
first.1 *= -1.0;
|
||||||
|
12
src/main.rs
12
src/main.rs
@ -55,7 +55,7 @@ fn main() {
|
|||||||
// alle Ecken der Hindernisse bestimmen
|
// alle Ecken der Hindernisse bestimmen
|
||||||
let points = polys
|
let points = polys
|
||||||
.iter()
|
.iter()
|
||||||
.map(|x| x.exterior.0.clone())
|
.map(|x| x.exterior().0.clone())
|
||||||
.flatten()
|
.flatten()
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ fn main() {
|
|||||||
"Polygon {:02}: ",
|
"Polygon {:02}: ",
|
||||||
polys
|
polys
|
||||||
.iter()
|
.iter()
|
||||||
.position(|p| p.exterior.0.contains(&s.pos.into()))
|
.position(|p| p.exterior().0.contains(&s.pos.into()))
|
||||||
.unwrap() + 1
|
.unwrap() + 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -193,7 +193,7 @@ fn main() {
|
|||||||
let seconds = length / (15.0 / 3.6);
|
let seconds = length / (15.0 / 3.6);
|
||||||
eprintln!("Dauer: {:02.0}:{:02.0}", seconds / 60.0, seconds % 60.0);
|
eprintln!("Dauer: {:02.0}:{:02.0}", seconds / 60.0, seconds % 60.0);
|
||||||
// beste Route grafisch ausgeben
|
// beste Route grafisch ausgeben
|
||||||
display::dump_svg(&route, &polys);
|
display::dump_latex_code(&route, &polys);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn none_intersect(polys: &[Polygon], line: &Line) -> bool {
|
fn none_intersect(polys: &[Polygon], line: &Line) -> bool {
|
||||||
@ -202,9 +202,9 @@ fn none_intersect(polys: &[Polygon], line: &Line) -> bool {
|
|||||||
middle.y += line.dy() / 2.0;
|
middle.y += line.dy() / 2.0;
|
||||||
let middle: Point = middle.into();
|
let middle: Point = middle.into();
|
||||||
'poly: for p in polys {
|
'poly: for p in polys {
|
||||||
for l in p.exterior.lines().chain(vec![Line::new(
|
for l in p.exterior().lines().chain(vec![Line::new(
|
||||||
p.exterior.0[0],
|
p.exterior().0[0],
|
||||||
*p.exterior.0.last().unwrap(),
|
*p.exterior().0.last().unwrap(),
|
||||||
)]) {
|
)]) {
|
||||||
if (l.start == line.start && l.end == line.end)
|
if (l.start == line.start && l.end == line.end)
|
||||||
|| (l.start == line.end && l.end == line.start)
|
|| (l.start == line.end && l.end == line.start)
|
||||||
|
Loading…
Reference in New Issue
Block a user