
๐ Rust Code
use nannou::prelude::*;
struct Model {
time: f32,
}
fn main() {
nannou::app(model).update(update).run();
}
fn model(app: &App) -> Model {
app.new_window()
.size(800, 800)
.view(view)
.build()
.unwrap();
Model { time: 0.0 }
}
fn update(_app: &App, model: &mut Model, _update: Update) {
model.time += 0.0001;
}
fn view(app: &App, model: &Model, frame: Frame) {
let draw = app.draw();
draw.background().color(BLACK);
let win = app.window_rect();
let center = pt2(0.0, 0.0);
let points_count = 4000;
let a = 3.0 + (model.time * 0.3).sin() * 2.0;
let b = 2.0 + (model.time * 0.2).cos() * 2.0;
let delta = model.time;
let mut points = Vec::new();
for i in 0..points_count {
let t = map_range(i, 0, points_count, 0.0, TAU * 5.0);
let x = (a * t + delta).sin() * win.w() * 0.4;
let y = (b * t).sin() * win.h() * 0.4;
points.push(pt2(x, y) + center);
}
draw.polyline()
.weight(1.2)
.points(points)
.color(hsla(
(model.time * 0.1).sin() * 0.5 + 0.5,
0.8,
0.6,
0.8,
));
draw.to_frame(app, &frame).unwrap();
}