mandala/
mandala.rs

1///! Example program drawing mandalas on a page.
2extern crate pdfpdf;
3
4use pdfpdf::{Color, Matrix, Pdf};
5use std::env;
6use std::f32::consts::PI;
7
8fn main() {
9    let mut args = env::args().skip(1);
10    let n: usize = args.next().map(|s| s.parse().expect("number")).unwrap_or(7);
11
12    let angle = 2.0 * PI / n as f32;
13    let r = 99.0;
14    let d = 141.4;
15    let rr = 36.0;
16
17    let mut document = Pdf::new();
18    document
19        .add_page(600.0, 600.0)
20        .transform(Matrix::translate(300.0, 300.0))
21        .set_color(&Color::gray(0));
22
23    for _ in 0..n {
24        document
25            .draw_line(vec![(0.0, 33.5), (0.0, 250.0)].into_iter())
26            .draw_circle(0.0, r, r * 1.25 * angle)
27            .draw_circle(0.0, d + rr, rr)
28            .transform(Matrix::rotate(angle));
29    }
30    document.transform(Matrix::rotate(angle / 2.0));
31    for _ in 0..n {
32        let mut r0 = 58.66;
33        let mut r = 0.7705 * r0 * angle;
34        for _ in 0..(n + 1) / 3 {
35            document.draw_circle(0., r0, r);
36            let r2 = 1.058 * r;
37            r0 += r + r2;
38            r = r2;
39        }
40        document.transform(Matrix::rotate(angle));
41    }
42
43    document.write_to("mandala.pdf").unwrap();
44}