# HG changeset patch # User alfadur # Date 1541200905 -10800 # Node ID 5c1ce63114a5be1e4a93106f67999a618a1e9556 # Parent 7e25f4800af810397e23bd120ffa8919a535e757 a bit of simplification diff -r 7e25f4800af8 -r 5c1ce63114a5 rust/integral-geometry/src/lib.rs --- a/rust/integral-geometry/src/lib.rs Sat Nov 03 02:16:13 2018 +0300 +++ b/rust/integral-geometry/src/lib.rs Sat Nov 03 02:21:45 2018 +0300 @@ -58,6 +58,11 @@ matrix[2] * self.x + matrix[3] * self.y, ) } + + #[inline] + pub fn rotate90(self) -> Self { + Point::new(-self.y, self.x) + } } #[derive(PartialEq, Eq, Clone, Copy, Debug)] @@ -416,6 +421,11 @@ pub fn center(&self) -> Point { (self.start + self.end) / 2 } + + #[inline] + pub fn scaled_normal(&self) -> Point { + (self.end - self.start).rotate90() + } } impl IntoIterator for Line { diff -r 7e25f4800af8 -r 5c1ce63114a5 rust/landgen/src/outline.rs --- a/rust/landgen/src/outline.rs Sat Nov 03 02:16:13 2018 +0300 +++ b/rust/landgen/src/outline.rs Sat Nov 03 02:21:45 2018 +0300 @@ -105,10 +105,7 @@ // new point should fall inside this box let map_box = self.play_box.with_margin(min_distance); - let p = Point::new( - segment.end.y - segment.start.y, - segment.start.x - segment.end.x, - ); + let p = -segment.scaled_normal(); let mid_point = segment.center(); if (p.integral_norm() < min_distance as u32 * 3) || !map_box.contains_inside(mid_point) {