rust/land2d/src/lib.rs
changeset 14036 c47283feafac
parent 14035 2ebd505e62c1
child 14037 2869c2ccb1b8
equal deleted inserted replaced
14035:2ebd505e62c1 14036:c47283feafac
   217         ArcPoints::new(radius)
   217         ArcPoints::new(radius)
   218             .map(&mut |p: Point| self.fill_circle_lines(x, y, p.x, p.y, &f))
   218             .map(&mut |p: Point| self.fill_circle_lines(x, y, p.x, p.y, &f))
   219             .sum()
   219             .sum()
   220     }
   220     }
   221 
   221 
       
   222     fn fill_row(&mut self, center: Point, offset: Point, value: T) -> usize {
       
   223         let row_index = center.y + offset.y;
       
   224         if self.is_valid_y(row_index) {
       
   225             let from_x = cmp::max(0, center.x - offset.x) as usize;
       
   226             let to_x = cmp::min(self.width() - 1, (center.x + offset.x) as usize);
       
   227             self.pixels[row_index as usize][from_x..=to_x]
       
   228                 .iter_mut().for_each(|v| *v = value);
       
   229             to_x - from_x + 1
       
   230         } else {
       
   231             0
       
   232         }
       
   233     }
       
   234 
       
   235     pub fn fill_circle(&mut self, center: Point, radius: i32, value: T) -> usize {
       
   236         let transforms =
       
   237             [[0, 1, 1, 0], [0, 1, -1, 0],
       
   238              [1, 0, 0, 1], [1, 0, 0, -1]];
       
   239         ArcPoints::new(radius).map(|vector| {
       
   240             transforms.iter().map(|m|
       
   241                 self.fill_row(center, vector.transform(m), value)
       
   242             ).sum::<usize>()
       
   243         }).sum()
       
   244     }
       
   245 
   222     pub fn draw_thick_line(&mut self, from: Point, to: Point, radius: i32, value: T) -> usize {
   246     pub fn draw_thick_line(&mut self, from: Point, to: Point, radius: i32, value: T) -> usize {
   223         let mut result = 0;
   247         let mut result = 0;
   224 
   248 
   225         for vector in ArcPoints::new(radius) {
   249         for vector in ArcPoints::new(radius) {
   226             for delta in EquidistantPoints::new(vector) {
   250             for delta in EquidistantPoints::new(vector) {