1 extern crate integral_geometry; |
1 extern crate integral_geometry; |
2 extern crate vec2d; |
2 extern crate vec2d; |
3 |
3 |
4 use std::cmp; |
4 use std::cmp; |
5 |
5 |
6 use integral_geometry::{ArcPoints, EquidistantPoints, Line, Point, RectInclusive, Size, SizeMask}; |
6 use integral_geometry::{ArcPoints, EquidistantPoints, Line, Point, Rect, Size, SizeMask}; |
7 |
7 |
8 pub struct Land2D<T> { |
8 pub struct Land2D<T> { |
9 pixels: vec2d::Vec2D<T>, |
9 pixels: vec2d::Vec2D<T>, |
10 play_box: RectInclusive, |
10 play_box: Rect, |
11 |
|
12 mask: SizeMask, |
11 mask: SizeMask, |
13 } |
12 } |
14 |
13 |
15 impl<T: Copy + PartialEq> Land2D<T> { |
14 impl<T: Copy + PartialEq> Land2D<T> { |
16 pub fn new(play_size: Size, fill_value: T) -> Self { |
15 pub fn new(play_size: Size, fill_value: T) -> Self { |
17 let real_size = play_size.next_power_of_two(); |
16 let real_size = play_size.next_power_of_two(); |
18 let top_left = Point::new( |
17 let top_left = Point::new( |
19 ((real_size.width - play_size.width) / 2) as i32, |
18 ((real_size.width - play_size.width) / 2) as i32, |
20 (real_size.height - play_size.height) as i32, |
19 (real_size.height - play_size.height) as i32, |
21 ); |
20 ); |
22 let play_box = RectInclusive::from_size(top_left, play_size); |
21 let play_box = Rect::from_size(top_left, play_size); |
23 Self { |
22 Self { |
24 play_box, |
23 play_box, |
25 pixels: vec2d::Vec2D::new(real_size, fill_value), |
24 pixels: vec2d::Vec2D::new(real_size, fill_value), |
26 mask: real_size.to_mask(), |
25 mask: real_size.to_mask(), |
27 } |
26 } |