03: Fibonacci forever
This commit is contained in:
parent
fbfab3f334
commit
ecb8104ee8
47
03/fibomod.py
Executable file
47
03/fibomod.py
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
def fibomod(n):
|
||||||
|
values = [0, 1]
|
||||||
|
while not ( values[-2] == 1 and values[-1] == 0):
|
||||||
|
x = (values[-1] + values[-2]) % n
|
||||||
|
values.append(x)
|
||||||
|
return values[:-1]
|
||||||
|
|
||||||
|
def fibopoint(cx, cy, r, p, n):
|
||||||
|
theta = 2 * math.pi * p / n
|
||||||
|
return ( cx + r * math.sin(theta), cy - r * math.cos(theta) )
|
||||||
|
|
||||||
|
def fibopoly(cx, cy, r, n):
|
||||||
|
return [ fibopoint(cx, cy, r, p, n) for p in fibomod(n) ]
|
||||||
|
|
||||||
|
def svgpoly(points):
|
||||||
|
ps = " ".join([ f"{x},{y}" for (x, y) in points ])
|
||||||
|
return f'<polygon points="{ps}" stroke="black" opacity="50%" fill="none" />'
|
||||||
|
|
||||||
|
def svgline(p1, p2):
|
||||||
|
return f'<line x1="{p1[0]}" y1="{p1[1]}" x2="{p2[0]}" y2="{p2[1]}" stroke="black" opacity="20%"/>\n'
|
||||||
|
|
||||||
|
def svglines(points):
|
||||||
|
lines = ""
|
||||||
|
for i in range(1, len(points)):
|
||||||
|
p2 = points[i]
|
||||||
|
p1 = points[i - 1]
|
||||||
|
lines += svgline(p1, p2)
|
||||||
|
lines += svgline(points[-1], points[0])
|
||||||
|
return lines
|
||||||
|
|
||||||
|
print('<svg width="800" height="1200" xmlns="http://www.w3.org/2000/svg">')
|
||||||
|
|
||||||
|
n = 2
|
||||||
|
for j in range(11):
|
||||||
|
for i in range(7):
|
||||||
|
cx = 50 + i * 100
|
||||||
|
cy = 50 + j * 100
|
||||||
|
r = 40
|
||||||
|
print(svglines(fibopoly(cx, cy, r, n)))
|
||||||
|
n += 1
|
||||||
|
|
||||||
|
print('</svg>')
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user