#l-systems #alphabet #generator

anabaena

L-System(林德迈尔系统)框架,适用于Rust

8 个版本 (破坏性)

0.7.0 2023年2月13日
0.6.0 2023年2月3日
0.5.0 2023年2月3日
0.4.1 2023年2月3日
0.1.0 2023年2月2日

141模拟

每月下载量 37

BSD-3-Clause

41KB
786 代码行

Anabaena

Rust的L-System(林德迈尔系统)

特性

示例

海藻

以下是从维基百科上的L-System文章中提取的,以下是对海藻示例的实现

use anabaena::{LSystem, LRulesHash, LRulesSet, Total};
use std::collections::HashMap;
use streaming_iterator::StreamingIterator;

let rules: LRulesHash<(), char, LRulesSet<char>> = |_| HashMap::from([
    (
        'A',
        LRulesSet::new(vec![
            (1, vec!['A', 'B']),
        ]),
    ),
    (
        'B',
        LRulesSet::new(vec![
            (1, vec!['A']),
        ]),
    )
]);

let axiom: Vec<char> = vec!['A'];

let mut lsystem: LSystem<_,_,_, Total> = LSystem::new(
    axiom,
    rules,
);

assert_eq!(lsystem.next(), Some(&"AB".chars().collect()));
assert_eq!(lsystem.next(), Some(&"ABA".chars().collect()));
assert_eq!(lsystem.next(), Some(&"ABAAB".chars().collect()));
assert_eq!(lsystem.next(), Some(&"ABAABABA".chars().collect()));
assert_eq!(lsystem.next(), Some(&"ABAABABAABAAB".chars().collect()));
assert_eq!(lsystem.next(), Some(&"ABAABABAABAABABAABABA".chars().collect()));
assert_eq!(lsystem.next(), Some(&"ABAABABAABAABABAABABAABAABABAABAAB".chars().collect()));

使用Turtle.rs的示例

维基百科文章中的其他大多数示例在examples/文件夹中实现,该文件夹使用turtle.rs库来渲染结果。例如,您可以使用以下命令运行B-Tree示例:

cargo run --example btree

依赖项

~335–770KB
~14K SLoC