Maurer RoseをRust nannouで描く

maurerrosenannou

Maurer RoseをRust nannouで描いてみました。

Maurer Rose -Wikipedia

コードはこんな感じ

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で線を描くのに、始点と終点をきめて引くんだけども、その点を求めるための関数を作ろうと思って、一つ前の点と、現在の点を計算して線ひかなきゃいけないからね。

一応関数を作って、返り値のためにストラクト作って、って感じで(普通か)

コメント

タイトルとURLをコピーしました