# HG changeset patch # User alfadur # Date 1541179813 -10800 # Node ID 32a34bf70f659918d51e4800e904b4acb12e6513 # Parent 24b34b961beacab8dea009633f2c176fa6ec36fb add more rectangle methods diff -r 24b34b961bea -r 32a34bf70f65 rust/integral-geometry/src/lib.rs --- a/rust/integral-geometry/src/lib.rs Fri Nov 02 18:27:34 2018 +0100 +++ b/rust/integral-geometry/src/lib.rs Fri Nov 02 20:30:13 2018 +0300 @@ -1,7 +1,13 @@ extern crate fpnum; use fpnum::distance; -use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign}; +use std::ops::{ + Add, AddAssign, + Div, DivAssign, + Mul, MulAssign, + Sub, SubAssign, + RangeInclusive +}; #[derive(PartialEq, Eq, Clone, Copy, Debug)] pub struct Point { @@ -287,12 +293,36 @@ } #[inline] + pub fn x_range(&self) -> RangeInclusive { + self.x..=self.x + self.width as i32 + } + + #[inline] + pub fn y_range(&self) -> RangeInclusive { + self.y..=self.y + self.height as i32 + } + + /* requires #[feature(range_contains)] + #[inline] + pub fn contains(&self, point: Point) -> bool { + x_range().contains(point.x) && y_range.contains(point.y) + }*/ + + #[inline] pub fn contains_inside(&self, point: Point) -> bool { point.x > self.left() && point.x < self.right() && point.y > self.top() && point.y < self.bottom() } + + #[inline] + pub fn intersects(&self, other: &Rect) -> bool { + self.left() <= self.right() + && self.right() >= other.left() + && self.top() <= other.bottom() + && self.bottom() >= other.top() + } } #[derive(PartialEq, Eq, Clone, Copy, Debug)]