-
-
Notifications
You must be signed in to change notification settings - Fork 303
/
8_3_recursion.rs
47 lines (39 loc) · 1.14 KB
/
8_3_recursion.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// The Nature of Code
// Daniel Shiffman
// http://natureofcode.com
//
// Example 8-3: Simple Recursion
use nannou::prelude::*;
fn main() {
nannou::app(model).run();
}
struct Model;
fn model(app: &App) -> Model {
app.set_loop_mode(LoopMode::loop_once());
let _window = app.new_window().size(640, 360).view(view).build().unwrap();
Model
}
fn view(app: &App, _model: &Model, frame: Frame) {
// Begin drawing
let draw = app.draw();
draw.background().color(WHITE);
draw_circle(&draw, 0.0, 0.0, 200.0);
// Write the result of our drawing to the window's frame.
draw.to_frame(app, &frame).unwrap();
}
// Recursive function
fn draw_circle(draw: &Draw, x: f32, y: f32, r: f32) {
let norm_radius = map_range(r, 2.0, 360.0, 0.0, 1.0);
draw.ellipse()
.x_y(x, y)
.radius(r)
.hsva(norm_radius, 0.75, 1.0, norm_radius)
.stroke(BLACK);
if r > 8.0 {
// Four circles! left right, up and down
draw_circle(&draw, x + r, y, r / 2.0);
draw_circle(&draw, x - r, y, r / 2.0);
draw_circle(&draw, x, y + r, r / 2.0);
draw_circle(&draw, x, y - r, r / 2.0);
}
}