4 个版本 (2 个重大变更)
0.3.1 | 2023年7月5日 |
---|---|
0.3.0 | 2022年8月1日 |
0.2.0 | 2022年7月31日 |
0.1.0 | 2022年7月31日 |
7 在 #generative-art
每月下载 21 次
360KB
236 行
差分增长 Rust
概述
本库提供了一个非常易于使用的差分增长算法,以及使用出色的 nannou 库的示例草图。使用方法简单,只需提供起点 Vec,调用 [DifferentialGrowth::tick()
] 来推进算法的一次迭代,然后使用 [DifferentialGrowth::get_points()
] 获取新的状态。
通过使用内置的点生成函数,如 [generate_points_on_circle()
] 生成起点,可以快速启动并运行。
建议对差分增长算法有一定的了解
- https://inconvergent.net/generative/differential-line/
- https://inconvergent.net/2016/shepherding-random-growth/
示例
了解此库的最佳方式是查看 /example
目录。您可以在任何运行 cargo run --example example
的平台上运行它。
否则,以下是如何使用此库的快速参考。
# use differential_growth::{generate_points_on_circle, DifferentialGrowth};
# use nalgebra::Point2;
# use nannou::{event::Update, prelude::*, window, App, Frame};
// Generate a set of starting points.
// You do not have to use the included helper function,
// you could for example pass points drawn by the mouse.
let starting_points: Vec<Point2<f64>> = generate_points_on_circle(0.0, 0.0, 10.0, 10);
// Instantiate DifferentialGrowth.
// the choice of input parameters is very import to the
// succesful working of the algorithm. A value to big or too small
// or a wrong combination of values can make the algorithm behave
// like it doesn't work.
// Here I've provided values that I tested and like.
let mut dg = DifferentialGrowth::new(starting_points, 1.5, 1.0, 14.0, 1.1, 5.0);
// Advance the algorithm 1 iteration.
dg.tick();
// Get the newly calculated points.
let points_to_draw: Vec<Point2<f64>> = dg.get_points();
// draw the result by
// - drawing a line between consecutive Vec elements.
// - drawing a line between the first and the last element.
参考资料
依赖项
~3MB
~60K SLoC