const DIRS: [(i32, i32); 8] = [
(1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0), (-1, -1), (0, -1), (1, -1), ];
pub fn find_next_pixel(
edges: &[u8],
width: usize,
height: usize,
cx: usize,
cy: usize,
search_dir: usize,
) -> Option<(usize, usize, usize)> {
for i in 0..8 {
let dir = (search_dir + i) % 8;
let (dx, dy) = DIRS[dir];
let nx = cx as i32 + dx;
let ny = cy as i32 + dy;
if nx <= 0 || ny <= 0 || nx >= (width as i32 - 1) || ny >= (height as i32 - 1) {
continue;
}
let nx = nx as usize;
let ny = ny as usize;
if edges[ny * width + nx] != 0 {
return Some((nx, ny, dir));
}
}
None
}
pub fn reverse_dir(dir: usize) -> usize {
(dir + 4) % 8
}