Maurer RoseをRust nannouで描いてみました。
コードはこんな感じ
use nannou::prelude::*;
struct Point {
x: f32,
y: f32,
}
fn main() {
nannou::sketch(view).run()
}
fn view(app: &App, frame: Frame) {
let draw = app.draw();
let f = frame.nth() + 1;
let n = 2.0;
let d = 29.0;
let currentpoints = points(f, n, d);
let oldpoints = points(f - 1, n, d);
let newpoint = vec2(currentpoints.x, currentpoints.y);
let oldpoint = vec2(oldpoints.x, oldpoints.y);
draw.ellipse().xy(newpoint).radius(2.5).color(YELLOW);
draw.line()
.stroke_weight(2.0)
.color(RED)
.points(oldpoint, newpoint);
draw.to_frame(app, &frame).unwrap();
}
fn points(f: u64, n: f32, d: f32) -> Point {
let k = (f as f32) * d * PI / 180.0;
let r = 300.0 * (n * k).sin();
let x = r * k.cos();
let y = r * k.sin();
Point { x: x, y: y }
}
Maurer Roseじたいはそんなに難しい話じゃないんだよね。それをどうやって描くかなっておもってて
一応、WikiPediaにはjavascriptとかProcessingのコードとか載ってるんだけど、もちろんRustのコードなんて載ってるわけなくて
おそらくもっといい書き方があるんだろうが、今回はこういう解決策ね。
変数名がめちゃくちゃなのは、、目をつぶって
Rust nannouで線を描くのに、始点と終点をきめて引くんだけども、その点を求めるための関数を作ろうと思って、一つ前の点と、現在の点を計算して線ひかなきゃいけないからね。
一応関数を作って、返り値のためにストラクト作って、って感じで(普通か)
コメント