#moore #neighborhood #computer-vision #graphics #8-connected

无std moore-neighborhood

计算任意范围和维度的摩尔邻域(8连通)

2个不稳定版本

0.2.0 2021年7月31日
0.1.0 2021年7月25日

#950 in 游戏开发

37 每月下载量

MIT 协议

24KB
261 代码行

N维度的摩尔邻域(8连通)

一个用于生成任意范围和维度摩尔邻域(即网格中单个单元格的周围单元格)索引的微小 no_std 库。或者,蓝色中心方块的红色边缘方块

Moore neighborhood

以下是上述示例中 moore! 宏生成的结果,一个二维网格,邻域大小(范围)为 1

fn example() {
    let neighborhood = moore!(1, 2);

    assert_eq!(neighborhood, [
        [-1,-1], [ 0,-1], [ 1,-1],
        [-1, 0],          [ 1, 0],
        [-1, 1], [ 0, 1], [ 1, 1]
    ]);
}

请参见下面的更多用法示例。

使用库与 stdno_std

要在常规环境中使用库,将以下内容添加到您的 Cargo.toml

[dependencies]
moore-neighborhoods = "0.2"

要在 no_std 环境中使用库,使用以下替代方案

[dependencies]
moore-neighborhoods = { version = "0.2", default-features = false }

这将禁用所有基于 Vec 的函数,即您将想要使用 moore! 宏来获取索引。

用法示例

使用 moore! 宏,当维度和范围都是静态已知时

use moore_neighboorhood::moore;

fn example() {
    let mut result: [[isize; 2]; 8] = moore!(1, 2);

    let mut expected = [
        [-1,-1], [ 0,-1], [ 1,-1],
        [-1, 0],          [ 1, 0],
        [-1, 1], [ 0, 1], [ 1, 1]
    ];

    assert_eq!(result, expected);
}

当需要动态大小时

use moore_neighboorhood::dynamic::moore;

fn example() {
    let mut result: Vec<Vec<isize>> = moore(1, 2);
    
    let mut expected = [
        [-1,-1], [ 0,-1], [ 1,-1],
        [-1, 0],          [ 1, 0],
        [-1, 1], [ 0, 1], [ 1, 1]
    ];

    result.sort();
    expected.sort();
    assert_eq!(result, expected);
}

当维度是静态已知但范围可能改变时

use moore_neighboorhood::generic_dimension::moore;

fn example() {
    let mut result: Vec<[isize; 2]> = moore(1);
    
    let mut expected = [
        [-1,-1], [ 0,-1], [ 1,-1],
        [-1, 0],          [ 1, 0],
        [-1, 1], [ 0, 1], [ 1, 1]
    ];

    result.sort();
    expected.sort();
    assert_eq!(result, expected);
}

许可证

该项目受MIT许可证的许可(有关更多信息,请参阅LICENSE 文件)。代码是从 Hugh Kennedy 编写的 hughsk/moore 移植的,并针对 Rust 功能(如const generics)进行了调整。

无运行时依赖