changeset 15046 | dc4a12a84c92 |
parent 14747 | 75ff5c643004 |
child 15203 | decb2f1c682b |
15045:af2f6f4074de | 15046:dc4a12a84c92 |
---|---|
1 use fpnum::{distance, fp, FPNum, FPPoint}; |
1 use fpnum::{distance, fp, FPNum, FPPoint}; |
2 use std::{ |
2 use std::{ |
3 cmp::{max, min}, |
3 cmp::{max, min}, |
4 ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Range, RangeInclusive, Sub, SubAssign}, |
4 ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, RangeInclusive, Sub, SubAssign}, |
5 }; |
5 }; |
6 |
6 |
7 #[derive(PartialEq, Eq, Clone, Copy, Debug)] |
7 #[derive(PartialEq, Eq, Clone, Copy, Debug)] |
8 pub struct Point { |
8 pub struct Point { |
9 pub x: i32, |
9 pub x: i32, |
414 self.top()..=self.bottom() |
414 self.top()..=self.bottom() |
415 } |
415 } |
416 |
416 |
417 #[inline] |
417 #[inline] |
418 pub fn contains(&self, point: Point) -> bool { |
418 pub fn contains(&self, point: Point) -> bool { |
419 self.x_range().contains(point.x) && self.y_range().contains(point.y) |
419 self.x_range().contains(&point.x) && self.y_range().contains(&point.y) |
420 } |
420 } |
421 |
421 |
422 #[inline] |
422 #[inline] |
423 pub fn contains_inside(&self, point: Point) -> bool { |
423 pub fn contains_inside(&self, point: Point) -> bool { |
424 point.x > self.left() |
424 point.x > self.left() |
462 } |
462 } |
463 |
463 |
464 #[inline] |
464 #[inline] |
465 pub fn quotient(self, x: usize, y: usize) -> Point { |
465 pub fn quotient(self, x: usize, y: usize) -> Point { |
466 self.top_left() + Point::new((x % self.width()) as i32, (y % self.height()) as i32) |
466 self.top_left() + Point::new((x % self.width()) as i32, (y % self.height()) as i32) |
467 } |
|
468 } |
|
469 |
|
470 trait RangeContains<T> { |
|
471 fn contains(&self, value: T) -> bool; |
|
472 } |
|
473 |
|
474 impl<T: Ord> RangeContains<T> for Range<T> { |
|
475 fn contains(&self, value: T) -> bool { |
|
476 value >= self.start && value < self.end |
|
477 } |
|
478 } |
|
479 |
|
480 impl<T: Ord> RangeContains<T> for RangeInclusive<T> { |
|
481 fn contains(&self, value: T) -> bool { |
|
482 value >= *self.start() && value <= *self.end() |
|
483 } |
467 } |
484 } |
468 } |
485 |
469 |
486 trait RangeClamp<T> { |
470 trait RangeClamp<T> { |
487 fn clamp(&self, value: T) -> T; |
471 fn clamp(&self, value: T) -> T; |