made line_drawing generic over array sizes. Added some helper methods.
This commit is contained in:
		
							parent
							
								
									e9770286ec
								
							
						
					
					
						commit
						3963c0fc90
					
				
					 1 changed files with 33 additions and 3 deletions
				
			
		| 
						 | 
					@ -1,13 +1,43 @@
 | 
				
			||||||
use core::{iter::Iterator, mem::swap};
 | 
					use core::mem::swap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct Point {
 | 
					pub struct Point {
 | 
				
			||||||
    x: isize,
 | 
					    x: isize,
 | 
				
			||||||
    y: isize,
 | 
					    y: isize,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Point {
 | 
				
			||||||
 | 
					    /// converts a point (representing a point on a 4 quadrant grid) into a upoint (representing a
 | 
				
			||||||
 | 
					    /// point on a 1 quadrant grid with the origin in the bottom-left corner). Returns none if
 | 
				
			||||||
 | 
					    /// the resulting point would have either number negative.
 | 
				
			||||||
 | 
					    pub fn to_upoint(&self, zero_coord: &UPoint) -> Option<UPoint> {
 | 
				
			||||||
 | 
					        Some(UPoint {
 | 
				
			||||||
 | 
					            x: zero_coord.x.checked_add_signed(self.x)?,
 | 
				
			||||||
 | 
					            y: zero_coord.y.checked_add_signed(self.y)?,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub struct UPoint {
 | 
				
			||||||
 | 
					    x: usize,
 | 
				
			||||||
 | 
					    y: usize,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn draw_line(mut p0: Point, mut p1: Point, matrix: &mut [[u8; 5]; 5]) {
 | 
					impl UPoint {
 | 
				
			||||||
 | 
					    /// converts a upoint (representing a point on a 1 quadrant grid with the origin in the
 | 
				
			||||||
 | 
					    /// bottom-left corner) into a point( representing a point on a 4 quadrant grid
 | 
				
			||||||
 | 
					    pub fn to_point(&self, zero_coord: &UPoint) -> Point {
 | 
				
			||||||
 | 
					        Point {
 | 
				
			||||||
 | 
					            x: zero_coord.x as isize - self.x as isize,
 | 
				
			||||||
 | 
					            y: zero_coord.y as isize - self.y as isize,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn draw_line<const X: usize, const Y: usize>(
 | 
				
			||||||
 | 
					    mut p0: Point,
 | 
				
			||||||
 | 
					    mut p1: Point,
 | 
				
			||||||
 | 
					    matrix: &mut [[u8; X]; Y],
 | 
				
			||||||
 | 
					) {
 | 
				
			||||||
    let steep = (p0.x - p1.x).abs() < (p0.y - p1.x).abs();
 | 
					    let steep = (p0.x - p1.x).abs() < (p0.y - p1.x).abs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if steep {
 | 
					    if steep {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue