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
|
// draws a line always pointing towards heading 0
|
||||||
pub fn draw_constant_heading<const X: usize, const Y: usize>(
|
pub fn draw_constant_heading<const X: usize, const Y: usize>(
|
||||||
heading: Heading,
|
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);
|
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.
|
/// extend past its edges.
|
||||||
pub fn draw_line<const X: usize, const Y: usize>(
|
pub fn draw_line<const X: usize, const Y: usize>(
|
||||||
line: &Line,
|
line: &Line,
|
||||||
matrix: &mut FourQuadrantMatrix<{ X }, { Y }, u8>,
|
matrix: &mut FourQuadrantMatrix<{ X }, { Y }, bool>,
|
||||||
) {
|
) {
|
||||||
let mut line = *line;
|
let mut line = *line;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -201,7 +201,7 @@ pub fn draw_line<const X: usize, const Y: usize>(
|
||||||
dbg!(draw_point);
|
dbg!(draw_point);
|
||||||
|
|
||||||
if matrix.is_in_bounds(&draw_point) {
|
if matrix.is_in_bounds(&draw_point) {
|
||||||
matrix[draw_point] = 1;
|
matrix[draw_point] = true;
|
||||||
prev_out_of_bounds = false;
|
prev_out_of_bounds = false;
|
||||||
} else {
|
} else {
|
||||||
if !prev_out_of_bounds {
|
if !prev_out_of_bounds {
|
||||||
|
@ -249,195 +249,195 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn four_quadrant_matrix() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
canvas[Point { x: 0, y: 0 }] = 1;
|
canvas[Point { x: 0, y: 0 }] = true;
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
canvas[Point { x: -2, y: 1 }] = 1;
|
canvas[Point { x: -2, y: 1 }] = true;
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, false],
|
||||||
[1, 0, 0, 0, 0],
|
[true, false, false, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
[0, 0, 0, 0, 0]
|
[false, false, false, false, false]
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn diagonal_unsigned_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 0, y: 4 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: 0, y: 0 }, Point { x: 4, y: 4 }),
|
&Line(Point { x: 0, y: 0 }, Point { x: 4, y: 4 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, true],
|
||||||
[0, 0, 0, 1, 0],
|
[false, false, false, true, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 1, 0, 0, 0],
|
[false, true, false, false, false],
|
||||||
[1, 0, 0, 0, 0],
|
[true, false, false, false, false],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn diagonal_signed_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: -2, y: -2 }, Point { x: 2, y: 2 }),
|
&Line(Point { x: -2, y: -2 }, Point { x: 2, y: 2 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, true],
|
||||||
[0, 0, 0, 1, 0],
|
[false, false, false, true, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 1, 0, 0, 0],
|
[false, true, false, false, false],
|
||||||
[1, 0, 0, 0, 0],
|
[true, false, false, false, false],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn diagonal_signed_both_oob_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: -10, y: -10 }, Point { x: 10, y: 10 }),
|
&Line(Point { x: -10, y: -10 }, Point { x: 10, y: 10 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, true],
|
||||||
[0, 0, 0, 1, 0],
|
[false, false, false, true, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 1, 0, 0, 0],
|
[false, true, false, false, false],
|
||||||
[1, 0, 0, 0, 0],
|
[true, false, false, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn diagonal_signed_first_oob_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: -10, y: -10 }, Point { x: 2, y: 2 }),
|
&Line(Point { x: -10, y: -10 }, Point { x: 2, y: 2 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, true],
|
||||||
[0, 0, 0, 1, 0],
|
[false, false, false, true, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 1, 0, 0, 0],
|
[false, true, false, false, false],
|
||||||
[1, 0, 0, 0, 0],
|
[true, false, false, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn diagonal_signed_second_oob_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: -2, y: -2 }, Point { x: 10, y: 10 }),
|
&Line(Point { x: -2, y: -2 }, Point { x: 10, y: 10 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, true],
|
||||||
[0, 0, 0, 1, 0],
|
[false, false, false, true, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 1, 0, 0, 0],
|
[false, true, false, false, false],
|
||||||
[1, 0, 0, 0, 0],
|
[true, false, false, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn vertical_signed_both_oob_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: 0, y: -10 }, Point { x: 0, y: 10 }),
|
&Line(Point { x: 0, y: -10 }, Point { x: 0, y: 10 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn vertical_signed_first_oob_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: 0, y: -10 }, Point { x: 0, y: 0 }),
|
&Line(Point { x: 0, y: -10 }, Point { x: 0, y: 0 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, false, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn vertical_signed_second_oob_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: 0, y: 0 }, Point { x: 0, y: 10 }),
|
&Line(Point { x: 0, y: 0 }, Point { x: 0, y: 10 }),
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
[0, 0, 0, 0, 0],
|
[false, false, false, false, false],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cross_signed_line() {
|
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 });
|
FourQuadrantMatrix::new(UPoint { x: 2, y: 2 });
|
||||||
draw_line(
|
draw_line(
|
||||||
&Line(Point { x: 0, y: -2 }, Point { x: 0, y: 2 }),
|
&Line(Point { x: 0, y: -2 }, Point { x: 0, y: 2 }),
|
||||||
|
@ -448,13 +448,13 @@ mod tests {
|
||||||
&mut canvas,
|
&mut canvas,
|
||||||
);
|
);
|
||||||
assert_eq!(
|
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],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[1, 1, 1, 1, 1],
|
[true, true, true, true, true],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
[0, 0, 1, 0, 0],
|
[false, false, true, false, false],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue