
๐ Rust Code
use nannou::noise::{NoiseFn, Perlin};
use nannou::prelude::*;
struct Model {
perlin: Perlin,
time: f64,
}
fn main() {
nannou::app(model).update(update).run();
}
fn model(app: &App) -> Model {
app.new_window()
.size(800, 800)
.view(view)
.build()
.unwrap();
Model {
perlin: Perlin::new(),
time: 0.0,
}
}
fn update(_app: &App, model: &mut Model, _update: Update) {
model.time += 0.01;
}
fn view(app: &App, model: &Model, frame: Frame) {
let draw = app.draw();
draw.background().color(BLACK);
let win = app.window_rect();
let cols = 100;
let rows = 100;
for row in 0..=rows {
let mut points = Vec::new();
for col in 0..=cols {
let x = map_range(col, 0, cols, win.left(), win.right());
let y = map_range(row, 0, rows, win.bottom(), win.top());
let n = model.perlin.get([
x as f64 * 0.005,
y as f64 * 0.005,
model.time,
]);
let offset_x = map_range(n, -1.0, 1.0, -80.0, 80.0);
let n2 = model.perlin.get([
x as f64 * 0.003 + 100.0,
y as f64 * 0.003,
model.time,
]);
let offset_y = map_range(n2, -1.0, 1.0, -60.0, 60.0);
let distorted = pt2(x + offset_x as f32, y + offset_y as f32);
points.push(distorted);
}
draw.polyline()
.weight(1.5)
.points(points)
.color(WHITE);
}
draw.to_frame(app, &frame).unwrap();
}