ajusted line drawing from an array of u8 to array of bool.
This commit is contained in:
		
							parent
							
								
									45578958a6
								
							
						
					
					
						commit
						3471b71dbc
					
				
					 2 changed files with 81 additions and 81 deletions
				
			
		| 
						 | 
				
			
			@ -17,7 +17,7 @@ fn heading_to_line(heading: Heading, square_size: usize) -> Line {
 | 
			
		|||
// draws a line always pointing towards heading 0
 | 
			
		||||
pub fn draw_constant_heading<const X: usize, const Y: usize>(
 | 
			
		||||
    heading: Heading,
 | 
			
		||||
    matrix: &mut FourQuadrantMatrix<{ X }, { Y }, u8>,
 | 
			
		||||
    matrix: &mut FourQuadrantMatrix<{ X }, { Y }, bool>,
 | 
			
		||||
) {
 | 
			
		||||
    draw_line::<X, Y>(&heading_to_line(heading, X.min(Y)), matrix);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ pub struct Line(pub Point, pub Point);
 | 
			
		|||
/// extend past its edges.
 | 
			
		||||
pub fn draw_line<const X: usize, const Y: usize>(
 | 
			
		||||
    line: &Line,
 | 
			
		||||
    matrix: &mut FourQuadrantMatrix<{ X }, { Y }, u8>,
 | 
			
		||||
    matrix: &mut FourQuadrantMatrix<{ X }, { Y }, bool>,
 | 
			
		||||
) {
 | 
			
		||||
    let mut line = *line;
 | 
			
		||||
    #[cfg(test)]
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ pub fn draw_line<const X: usize, const Y: usize>(
 | 
			
		|||
        dbg!(draw_point);
 | 
			
		||||
 | 
			
		||||
        if matrix.is_in_bounds(&draw_point) {
 | 
			
		||||
            matrix[draw_point] = 1;
 | 
			
		||||
            matrix[draw_point] = true;
 | 
			
		||||
            prev_out_of_bounds = false;
 | 
			
		||||
        } else {
 | 
			
		||||
            if !prev_out_of_bounds {
 | 
			
		||||
| 
						 | 
				
			
			@ -249,195 +249,195 @@ mod tests {
 | 
			
		|||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn four_quadrant_matrix() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        canvas[Point { x: 0, y: 0 }] = 1;
 | 
			
		||||
        canvas[Point { x: 0, y: 0 }] = true;
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
        canvas[Point { x: -2, y: 1 }] = 1;
 | 
			
		||||
        canvas[Point { x: -2, y: 1 }] = true;
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [1, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0]
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [true, false, false, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, false, false, false]
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn diagonal_unsigned_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 0, y: 4 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: 0, y: 0 }, Point { x: 4, y: 4 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 1],
 | 
			
		||||
                [0, 0, 0, 1, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 1, 0, 0, 0],
 | 
			
		||||
                [1, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, false, false, true],
 | 
			
		||||
                [false, false, false, true, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, true, false, false, false],
 | 
			
		||||
                [true, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn diagonal_signed_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: -2, y: -2 }, Point { x: 2, y: 2 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 1],
 | 
			
		||||
                [0, 0, 0, 1, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 1, 0, 0, 0],
 | 
			
		||||
                [1, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, false, false, true],
 | 
			
		||||
                [false, false, false, true, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, true, false, false, false],
 | 
			
		||||
                [true, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn diagonal_signed_both_oob_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: -10, y: -10 }, Point { x: 10, y: 10 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 1],
 | 
			
		||||
                [0, 0, 0, 1, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 1, 0, 0, 0],
 | 
			
		||||
                [1, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, false, false, true],
 | 
			
		||||
                [false, false, false, true, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, true, false, false, false],
 | 
			
		||||
                [true, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn diagonal_signed_first_oob_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: -10, y: -10 }, Point { x: 2, y: 2 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 1],
 | 
			
		||||
                [0, 0, 0, 1, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 1, 0, 0, 0],
 | 
			
		||||
                [1, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, false, false, true],
 | 
			
		||||
                [false, false, false, true, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, true, false, false, false],
 | 
			
		||||
                [true, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn diagonal_signed_second_oob_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: -2, y: -2 }, Point { x: 10, y: 10 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 1],
 | 
			
		||||
                [0, 0, 0, 1, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 1, 0, 0, 0],
 | 
			
		||||
                [1, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, false, false, true],
 | 
			
		||||
                [false, false, false, true, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, true, false, false, false],
 | 
			
		||||
                [true, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn vertical_signed_both_oob_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: 0, y: -10 }, Point { x: 0, y: 10 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn vertical_signed_first_oob_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: 0, y: -10 }, Point { x: 0, y: 0 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn vertical_signed_second_oob_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: 0, y: 0 }, Point { x: 0, y: 10 }),
 | 
			
		||||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [0, 0, 0, 0, 0],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
                [false, false, false, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn cross_signed_line() {
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, u8> =
 | 
			
		||||
        let mut canvas: FourQuadrantMatrix<5, 5, bool> =
 | 
			
		||||
            FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
 | 
			
		||||
        draw_line(
 | 
			
		||||
            &Line(Point { x: 0, y: -2 }, Point { x: 0, y: 2 }),
 | 
			
		||||
| 
						 | 
				
			
			@ -448,13 +448,13 @@ mod tests {
 | 
			
		|||
            &mut canvas,
 | 
			
		||||
        );
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, u8> as Into<[[u8; 5]; 5]>>::into(canvas),
 | 
			
		||||
            <FourQuadrantMatrix<5, 5, bool> as Into<[[bool; 5]; 5]>>::into(canvas),
 | 
			
		||||
            [
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [1, 1, 1, 1, 1],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [0, 0, 1, 0, 0],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [true, true, true, true, true],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
                [false, false, true, false, false],
 | 
			
		||||
            ]
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue