1extern crate pdf_canvas;
3
4use pdf_canvas::graphicsstate::{Color, Matrix};
5use pdf_canvas::Pdf;
6use std::env;
7use std::f32::consts::PI;
8
9fn main() {
11 let mut document = Pdf::create("mandala.pdf").expect("Create PDF file");
13 let mut args = env::args().skip(1);
14 let n: u8 = args.next().map(|s| s.parse().expect("number")).unwrap_or(7);
15
16 document
18 .render_page(600.0, 600.0, |c| {
19 c.concat(Matrix::translate(300., 300.))?;
20 c.set_stroke_color(Color::gray(0))?;
21 let segment = 2. * PI / n as f32;
22 for _i in 0..n {
23 c.move_to(0., 33.5)?;
24 c.line_to(0., 250.)?;
25 let r = 99.;
26 c.circle(0., r, r * 1.25 * segment)?;
27 let d = 141.4;
28 let rr = 36.;
29 c.circle(0., d + rr, rr)?;
30 c.stroke()?;
31 c.concat(Matrix::rotate(segment))?;
32 }
33 c.concat(Matrix::rotate(segment / 2.))?;
34 for _i in 0..n {
35 let mut r0 = 58.66;
36 let mut r = 0.7705 * r0 * segment;
37 for _j in 0..(n + 1) / 3 {
38 c.circle(0., r0, r)?;
39 let r2 = 1.058 * r;
40 r0 = r0 + r + r2;
41 r = r2;
42 }
43 c.stroke()?;
44 c.concat(Matrix::rotate(segment))?;
45 }
46
47 Ok(())
48 })
49 .unwrap();
50 document.finish().unwrap();
51}