1extern 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}