From 906e2a66c560f38464f2f1fb803e49206df8bd72 Mon Sep 17 00:00:00 2001 From: annieversary Date: Wed, 25 Aug 2021 18:01:34 +0200 Subject: [PATCH] changes to #11 --- crates/subtitled10/src/main.rs | 103 +++++++++++++++++++++++---------- crates/template/src/main.rs | 5 +- 2 files changed, 77 insertions(+), 31 deletions(-) diff --git a/crates/subtitled10/src/main.rs b/crates/subtitled10/src/main.rs index bc3b309..0e136d5 100644 --- a/crates/subtitled10/src/main.rs +++ b/crates/subtitled10/src/main.rs @@ -1,9 +1,12 @@ use nannou::prelude::*; +use utils::*; fn main() { nannou::app(model).update(update).simple_window(view).run(); } +// http://paulbourke.net/fractals/clifford/ + #[derive(Clone, Copy, Debug)] struct Params { a: f32, @@ -11,39 +14,65 @@ struct Params { c: f32, d: f32, } - -impl Params { - fn new() -> Self { - // magic numbers from here: - // http://paulbourke.net/fractals/clifford/paul_richards/main.cpp - let min_a = f32::acos(1.6 / 2.0); - let max_a = f32::acos(1.3 / 2.0); - let min_b = f32::acos(-0.6 / 2.0); - let max_b = f32::acos(1.7 / 2.0); - let min_c = f32::acos(-1.2 / 2.0); - let max_c = f32::acos(0.5 / 2.0); - let min_d = f32::acos(1.6 / 2.0); - let max_d = f32::acos(1.4 / 2.0); - - Self { - a: random_range(min_a, max_a), - b: random_range(min_b, max_b), - c: random_range(min_c, max_c), - d: random_range(min_d, max_d), - } - } -} struct Model { - params: Params, points: Vec, base_hue: f32, + + /// params for the attractor + params: Params, + + // modulation values for each param + a_mul: f32, + a_add: f32, + b_mul: f32, + b_add: f32, + c_mul: f32, + c_add: f32, + d_mul: f32, + d_add: f32, + + // max range for each param + // this would be a const, but acos isn't a const fn + min_a: f32, + max_a: f32, + min_b: f32, + max_b: f32, + min_c: f32, + max_c: f32, + min_d: f32, + max_d: f32, } fn model(_app: &App) -> Model { - let params = Params::new(); - dbg!(params); Model { - params, + params: Params { + a: 0.0, + b: 0.0, + c: 0.0, + d: 0.0, + }, + + a_mul: random_range(0.3, 1.0) * random_range(-1.0, 1.0).signum(), + b_mul: random_range(0.3, 1.0) * random_range(-1.0, 1.0).signum(), + c_mul: random_range(0.3, 1.0) * random_range(-1.0, 1.0).signum(), + d_mul: random_range(0.3, 1.0) * random_range(-1.0, 1.0).signum(), + + a_add: random_range(0.3, 2.0), + b_add: random_range(0.3, 2.0), + c_add: random_range(0.3, 2.0), + d_add: random_range(0.3, 2.0), + + // magic numbers from here: + // http://paulbourke.net/fractals/clifford/paul_richards/main.cpp + min_a: f32::acos(1.6 / 2.0), + max_a: f32::acos(1.3 / 2.0), + min_b: f32::acos(-0.6 / 2.0), + max_b: f32::acos(1.7 / 2.0), + min_c: f32::acos(-1.2 / 2.0), + max_c: f32::acos(0.5 / 2.0), + min_d: f32::acos(1.6 / 2.0), + max_d: f32::acos(1.4 / 2.0), + base_hue: random_range(0., 360.0), points: vec![Vec2::ZERO; 10000], } @@ -58,13 +87,24 @@ fn advance(params: Params, point: Vec2) -> Vec2 { ) } -fn update(_app: &App, model: &mut Model, _update: Update) { - let mut last = model.points.last().unwrap().clone(); +fn update(app: &App, model: &mut Model, _update: Update) { + let t = app.elapsed_frames() as f32 / 60.0; + // modulate params + model.params.a = map_sin(t * model.a_mul + model.a_add, model.min_a, model.max_a); + model.params.b = map_sin(t * model.b_mul + model.b_add, model.min_b, model.max_b); + model.params.c = map_sin(t * model.c_mul + model.c_add, model.min_c, model.max_c); + model.params.d = map_sin(t * model.d_mul + model.d_add, model.min_d, model.max_d); + + // advance all points in list + let mut last = model.points.last().unwrap().clone(); for v in &mut model.points { last = advance(model.params, last); *v = last; } + + // move base_hue + model.base_hue += 0.5; } fn view(app: &App, model: &Model, frame: Frame) { @@ -74,12 +114,15 @@ fn view(app: &App, model: &Model, frame: Frame) { if frame.nth() == 0 { draw.background().color(BLACK); + } else { + let win = app.window_rect(); + draw.rect().wh(win.wh()).color(srgba(0., 0.0, 0.0, 0.02)); } for &p in &model.points { - let h = random_range(model.base_hue, model.base_hue + 60.0) / 360.0; + let h = random_range(model.base_hue, model.base_hue + 120.0) / 360.0; draw.ellipse() - .radius(0.1) + .radius(0.2) .xy(150.0 * p) .color(hsla(h.fract(), 1.0, 0.5, 0.1)); } diff --git a/crates/template/src/main.rs b/crates/template/src/main.rs index f7c1638..a075504 100644 --- a/crates/template/src/main.rs +++ b/crates/template/src/main.rs @@ -1,4 +1,5 @@ use nannou::prelude::*; +use utils::*; fn main() { nannou::app(model).update(update).simple_window(view).run(); @@ -10,7 +11,9 @@ fn model(_app: &App) -> Model { Model {} } -fn update(_app: &App, _model: &mut Model, _update: Update) {} +fn update(app: &App, _model: &mut Model, _update: Update) { + let _t = app.elapsed_frames() as f32 / 60.0; +} fn view(app: &App, _model: &Model, frame: Frame) { let _t = frame.nth() as f32 / 60.0;