4个版本
0.2.0 | 2023年8月25日 |
---|---|
0.1.3 | 2023年8月22日 |
0.1.1 | 2023年8月13日 |
0.1.0 | 2023年8月13日 |
816 在 文本处理
每月下载 35 次
96KB
1.5K SLoC
Cellumina
一个易于创建和运行 细胞自动机 的库。
特性
Cellumina提供了一个表示二维字符网格的 Automaton
结构体。这个网格可以从向量、文件或图像初始化。此外,用户可以配置自动机使用的 Rule
来将其转换为下一个步骤。转换到下一个状态可以手动启动,也可以在固定的时间步长上启动,例如当使用Cellumina作为更大图形应用程序的一部分时。
规则
这些规则可以通过创建这些结构体并使用常规Rust代码来添加。
模式替换规则也可以通过使用 serde
进行(反)序列化,或从(保存到)自定义文件类型中加载。这种表示比serde版本更易于阅读,如果您不希望Rust文件包含大量模式初始化网格,则可以轻松手动创建。
此外,可以覆盖公共特质 Rule
来实现完全自定义的规则。
实时预览
Cellumina可以在“实时预览”模式下运行。然后它将接管配置好的自动机,自行运行它,并在单独的窗口中显示单元格状态。这对于仅仅尝试细胞自动机很有用。
用户还可以直接更改单元格的状态。按下任意(字符或空格)按钮,然后鼠标点击将替换当前悬停的单元格为按下的字符。自动机也可以通过 Enter
暂停和恢复。自动机的当前状态可以保存到文件中,使用 Ctrl + S
,目前支持以下格式:txt
(每行一行字符)以及png, jpeg, ico, pnm, bmp, exr, tiff
(与 image
crate 支持的完全相同)。这些文件的常规限制适用,例如保存为 jpeg 可能会导致压缩,因此 .jpeg
-文件不适合保存和重新加载自动机。
实时视图功能默认不包含在库中,必须通过 display
功能启用。
用法
要在自己的项目中使用 Cellumina,只需将以下行添加到您的 Cargo.toml
文件中
[dependencies]
cellumina = "0.1"
或者
[dependencies]
cellumina = {version = "0.1", features = ["display"]}
如果您想启用 实时视图。
示例
示例文件夹 包含以下示例
game_of_life
:使用环境规则实现的康威生命游戏。sand
:一个小型的落沙模拟,使用模式替换规则模拟落沙、火和灰烬。rule90
:一个实现 Rule 90 的 1 维自动机的示例,演示如何使用 Cellumina 的 2D-网格显示 1 维自动机的多个连续状态。to_string
:一个示例,说明如何将规则转换为不同的字符串/文件类型。
所有示例都可以通过以下命令运行
git clone https://github.com/Linus-Mussmaecher/cellumina
并使用 cargo run --examples <name> --features="display"
执行,例如
cargo run --examples sand --features="display"
日志记录
Cellumina 通过 log crate 支持日志记录。您可以使用任何记录器,如 env-log 或 simple-logger,根据它们的文档初始化它们并从 cellumina 接收日志输出。
性能
由于模式替换可能是一个相当昂贵的操作,cellumina 使用 rayon crate 并行运行这些操作。小模式(例如,当使用落沙模拟创建死亡动画或类似效果时)的运行时间可以忽略不计。较大的模式,特别是有多个模式或规则时,可能需要更多计算时间,但仍然可以在单独运行时以高帧率查看。请注意,调试和发布配置下的运行时间差异很大。
依赖关系
~14–50MB
~644K SLoC