summaryrefslogtreecommitdiff
path: root/util/cairo-script/examples/pythagoras-tree.cs
blob: 96b4b39bcefa3c26c2e5ae65558c321a5dc8db67 (plain)
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
48
49
50
51
52
53
%!CairoScript

/pi4 0.785398163 def
/sqrt2 1.414213562 def

/R { % cr size *R* cr
  dup 1 lt { pop } {
      exch /current-point get % size cr x y
      4 2 roll % x y size cr

      % draw a rectangle in relative co-ordinates
      1 index 2 div neg dup exch M
      1 index 0 L
      0 2 index L
      1 index neg 0 L
      h

      save
      1 index dup 2 div neg exch translate
      4 2 roll 3 copy % size cr x y cr x y
      m
      //pi4 rotate
      pop 4 2 roll % x y size cr
      1 index //sqrt2 div
      R
      restore

      save
      1 index dup 2 div exch translate
      4 2 roll 3 copy % size cr x y cr x y
      m
      //pi4 neg rotate
      pop 4 2 roll % x y size cr
      1 index //sqrt2 div
      R
      restore

      4 1 roll pop pop pop
  } ifelse
} bind def

dict
  /width  1024 set
  /height 512 set
  surface context

1 1 1 set-source-rgb paint

0 512 translate 1 -1 scale
512 64 m 128. R 0 0 0 set-source-rgb fill

/target get (out.png) write-to-png pop
pop