File: springs.py

package info (click to toggle)
pyx3 0.17-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,328 kB
  • sloc: python: 27,656; makefile: 225; ansic: 130; sh: 17
file content (28 lines) | stat: -rw-r--r-- 864 bytes parent folder | download | duplicates (3)
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
# contributed by Gert-Ludwig Ingold

from pyx import *

n = 3                 # number of masses
r = 3.0               # system radius
rcyc = 0.3            # radius of cycloid
nl = 13               # number of loops
rc = 0.5              # radius of masses
eps = 0.03            # extra spacing for surrounding circles

c = canvas.canvas()
springcircle = path.circle(0, 0, r)
masspositions = [i*springcircle.arclen()/n
                 for i in range(n)]
for springsegment in springcircle.split(masspositions):
    c.stroke(springsegment,
             [deformer.cycloid(rcyc, nl),
              deformer.smoothed(radius=0.1)])
for x, y in springcircle.at(masspositions):
    c.fill(path.circle(x, y, rc))

c.stroke(springcircle, [deformer.parallel(rc+eps)])
c.stroke(springcircle, [deformer.parallel(-rc-eps)])

c.writeEPSfile()
c.writePDFfile()
c.writeSVGfile()