RLWFC - Rust Wave Function Collapse Library
RLWFC是一个基于Rust实现的Wave Function Collapse (WFC)算法库,使用petgraph作为底层图数据结构,提供类型安全和高性能的WFC实现。
重要更新 - 虚拟边机制
解决的关键问题
修复了边界单元格邻居索引错位的严重bug:
- 问题:边缘单元格缺少某些方向的邻居,导致
neighbors()返回的索引顺序不一致 - 影响:在
judge_possibility中访问邻居时发生数组越界或索引对应错误 - 解决:引入虚拟边机制,确保所有单元格的邻居索引顺序一致:
[北, 西, 南, 东]
技术实现
// 新的create_edge API - 支持虚拟边
grid.create_edge?; // 真实邻居
grid.create_edge?; // 虚拟边(边界处理)
// 虚拟节点检测
if !grid.is_virtual_node
项目概述
这是对原C++ WFC系统的完整Rust重写,在保持API兼容性的同时,引入了现代Rust的设计理念和安全保证。
核心特性
- 类型安全:编译时保证类型正确性,避免运行时错误
- 内存安全:自动内存管理,无悬垂指针和内存泄漏
- 方向感知:创新的方向识别系统,支持空间方向查询
- 边界处理:虚拟边机制确保边界单元格的正确处理
- 零成本抽象:高级抽象不影响运行时性能
- 并发安全:支持并发访问的数据结构设计
安装
在您的 Cargo.toml 中添加:
[]
= "0.1.0"
快速开始
基本使用
use ;
使用构建器创建复杂网格
use ;
模块说明
wfc_util 模块
提供基础类型定义、错误处理和方向系统:
- 类型别名:
CellId,EdgeId,TileId等 - 数据结构:
Cell,GraphEdge,Tile等 - 方向系统:
DirectionTrait和Direction4
grid_system 模块
实现WFC系统的核心网格管理功能:
- 图操作:基于petgraph的高效图操作
- 方向感知:零成本的方向识别和查询
- 构建器模式:
GridBuildertrait支持多种网格类型
tile_set 模块
实现WFC算法的瓷砖管理和约束判断:
- 瓷砖管理:高效的瓷砖存储和查询
- 约束判断:灵活的约束规则实现
- 泛型设计:支持任意类型的边数据
示例程序
运行示例程序来了解库的使用:
# 基本的2D正交WFC示例
# 基本使用示例
# 网格构建器示例
# 瓷砖系统示例
文档
查看完整的API文档:
- 在线文档
- 本地生成:
cargo doc --open
文档包含:
- 详细的API参考
- 使用示例和最佳实践
- 架构设计说明
- C++到Rust的映射表
与原C++版本对比
| 特性 | C++ | Rust |
|---|---|---|
| 内存安全 | 手动管理 | 自动保证 |
| 类型安全 | 运行时检查 | 编译时保证 |
| 错误处理 | 异常/返回码 | Result类型 |
| 多态 | 虚函数继承 | Trait组合 |
| 并发 | 手动同步 | 编译时保证 |
| 方向感知 | 无 | 零成本实现 |
最低支持的Rust版本 (MSRV)
这个库需要Rust 1.70或更高版本。
测试
运行测试套件:
# 单元测试
# 文档测试
# 集成测试
所有核心功能都有对应的单元测试,确保代码质量和正确性。
开发状态
✅ 基础类型系统
✅ 网格系统和图操作
✅ 方向感知功能
✅ 瓷砖系统
✅ WFC管理器
✅ 构建器模式
✅ 完整的文档
✅ 示例程序
✅ 单元测试
✅ 集成测试
贡献
欢迎贡献代码、报告问题或提出改进建议。请确保:
- 代码通过所有测试:
cargo test - 代码通过格式检查:
cargo fmt - 代码通过linting:
cargo clippy - 文档是最新的:
cargo doc
许可证
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
作者
- amazcuter - 初始开发 - amazcuter@outlook.com
致谢
- 感谢petgraph库提供了优秀的图数据结构基础
- 感谢Rust社区提供的工具和最佳实践指导