|
@@ -0,0 +1,75 @@
|
|
|
+#!/usr/bin/python
|
|
|
+
|
|
|
+'''
|
|
|
+Schotter pdf reproduction
|
|
|
+
|
|
|
+It design SchotterR
|
|
|
+Author: Jan Bodnar
|
|
|
+Website: zetcode.com
|
|
|
+Last edited: April 2016
|
|
|
+'''
|
|
|
+
|
|
|
+import math,cairo,random
|
|
|
+
|
|
|
+def plotSquares(ctx):
|
|
|
+ global rsum
|
|
|
+ for i in xrange(1,w):
|
|
|
+
|
|
|
+ rsum += i*rs # add to the random value
|
|
|
+
|
|
|
+ ctx.translate(s*i, 0)
|
|
|
+ for j in xrange(1,h):
|
|
|
+
|
|
|
+ rv = random.uniform(-rsum, rsum)
|
|
|
+ # here comes the box :-)
|
|
|
+ #box = shapes.square(s)
|
|
|
+
|
|
|
+ # box position
|
|
|
+ #curr_cx = - w*s/2 + i*s + rv*dp ; curr_cy = - h*s/2 + j*s + rv*dp
|
|
|
+ # transforms.center_at(box, [curr_cx, curr_cy])
|
|
|
+ #
|
|
|
+ # # rotate the box of rv degrees around its center
|
|
|
+ # transforms.rotate(box, rv, pivot=(curr_cx, curr_cy))
|
|
|
+ #
|
|
|
+ # draw the damn box
|
|
|
+ # plotter.write(box)
|
|
|
+ #
|
|
|
+ ctx.translate(0, s*j)
|
|
|
+ #ctx.rotate(math.pi * 1 / 4)
|
|
|
+ ctx.rotate(rv)
|
|
|
+ ctx.rectangle(0,0, s, s)
|
|
|
+ ctx.stroke()
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#float RGB touple
|
|
|
+FG_RGB_COLOR=(0,0,0)
|
|
|
+#A4 in 300 DPI
|
|
|
+width, height = 3508,2480
|
|
|
+w = 1 # width (how many squares - es. 22)
|
|
|
+h = 12 # height (how many squares - es. 12)
|
|
|
+s = 100 # square size (es. 15)
|
|
|
+
|
|
|
+rs = 0.015 # random step (rotation increment in degrees)
|
|
|
+dp = 2.25 # dampen (soften random effect for position)
|
|
|
+rsum = 0 # dummy initial value for rsum
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+surface = cairo.PDFSurface ("/tmp/circle.pdf",width,height)
|
|
|
+ctx = cairo.Context (surface)
|
|
|
+
|
|
|
+ctx.set_source_rgb(FG_RGB_COLOR[0],FG_RGB_COLOR[1],FG_RGB_COLOR[2])
|
|
|
+ctx.set_line_width(1)
|
|
|
+ctx.translate(100, 500)
|
|
|
+plotSquares(ctx)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ctx.show_page()
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|