๐Ÿ”ฎ :: Guilloche Wavy Pattern

BamgasiJMยท2025๋…„ 9์›” 28์ผ

Nannou <Generative Art>

๋ชฉ๋ก ๋ณด๊ธฐ
32/55
post-thumbnail

๐Ÿ“ Rust Code

use nannou::prelude::*;

fn main() {
    nannou::app(model).update(update).run();
}

struct Model {
    time: f32,
}

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 += update.since_last.secs() as f32;
}

fn view(app: &App, model: &Model, frame: Frame) {
    let draw = app.draw();
    draw.background().color(hsla(0.0, 0.0, 0.01, 1.0));

    let steps = 500;        // ๊ณก์„  ์ •๋ฐ€๋„
    let radius = 200.0;     // ๊ธฐ๋ณธ ๋ฐ˜์ง€๋ฆ„
    let waves = 3.0;        // ๋ณ„ ๋ชจ์–‘ ๊ผญ์ง“์  ์ˆ˜
    let layers = 20;        // ๊ฒน์น˜๋Š” ๋ ˆ์ด์–ด ์ˆ˜

    for l in 0..layers {
        let mut points = Vec::new();

        // ์‹œ๊ฐ„๊ณผ ๋ ˆ์ด์–ด์— ๋”ฐ๋ฅธ ์œ„์ƒ ๋ณ€ํ™”
        let shift = l as f32 * 0.22 + model.time * 0.5;

        // ์ƒ‰์ƒ: ์‹œ๊ฐ„ + ๋ ˆ์ด์–ด ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณ€ํ™”
        let hue_base = (model.time * 20.0) % 360.0;
        let hue = hue_base + map_range(l, 0, layers, 200.0, 320.0);

        for i in 0..steps {
            let t = i as f32 / steps as f32 * TAU;

            // ๋ฐ˜๊ฒฝ์— ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ํšŒ์ „ ๋ณ€์กฐ ์ถ”๊ฐ€
            let r = radius * (1.1 + 0.4 * ((waves * t + shift) + model.time * 0.1).sin());

            let x = r * t.cos();
            let y = r * t.sin();
            points.push(pt2(x, y));
        }

        draw.polyline()
            .weight(1.5)
            .color(hsla((hue % 360.0) / 360.0, 0.8, 0.5, 0.7))
            .points_closed(points);
    }

    draw.to_frame(app, &frame).unwrap();
}

profile
Coding Art with Blender / oF / Processing / p5.js / nannou

0๊ฐœ์˜ ๋Œ“๊ธ€