added labyrinth script
This commit is contained in:
@@ -3,6 +3,7 @@ Where I store small Python projects
|
|||||||
|
|
||||||
* [EZ Net](#ez-net)
|
* [EZ Net](#ez-net)
|
||||||
* [Graph (french)](#graph-french-)
|
* [Graph (french)](#graph-french-)
|
||||||
|
* [Labyrinth](#labyrinth)
|
||||||
* [PI Dichotomy](#pi-dichotomy)
|
* [PI Dichotomy](#pi-dichotomy)
|
||||||
|
|
||||||
|
|
||||||
@@ -16,6 +17,11 @@ A tool to make beautiful mathematical curves
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Labyrinth
|
||||||
|
Encode a text into a labyrinth image like this :
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## PI Dichotomy
|
## PI Dichotomy
|
||||||
What happens when you execute dichotomy on PI starting with 4 ? Result : an infinite binary data, i used it to generate bitmaps and sound.
|
What happens when you execute dichotomy on PI starting with 4 ? Result : an infinite binary data, i used it to generate bitmaps and sound.
|
||||||
Obviously I didn't had infinite PI digits but "only" the 1st million.
|
Obviously I didn't had infinite PI digits but "only" the 1st million.
|
||||||
|
|||||||
@@ -0,0 +1,135 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
import math
|
||||||
|
import binascii
|
||||||
|
|
||||||
|
HEIGHT = 750 #px
|
||||||
|
WIDTH = 750 #px
|
||||||
|
RSTEP = 20 #px
|
||||||
|
|
||||||
|
STARTTXT = "Never gonna give you up; Never gonna let you down;"
|
||||||
|
|
||||||
|
arcs = 6
|
||||||
|
|
||||||
|
def vline(c,a,r0,r1,med):
|
||||||
|
if not(med):
|
||||||
|
ar = math.radians(a)
|
||||||
|
x0 = WIDTH / 2 + r0 * math.cos(ar)
|
||||||
|
x1 = WIDTH / 2 + r1 * math.cos(ar)
|
||||||
|
y0 = HEIGHT / 2 + r0 * math.sin(ar)
|
||||||
|
y1 = HEIGHT / 2 + r1 * math.sin(ar)
|
||||||
|
c.create_line(x0, y0, x1, y1)
|
||||||
|
else:
|
||||||
|
ar0 = math.radians(a-ASTEP)
|
||||||
|
ar1 = math.radians(a+ASTEP)
|
||||||
|
x0 = WIDTH / 2 + r0 * math.cos(ar0)
|
||||||
|
x1 = WIDTH / 2 + r1 * math.cos(ar0)
|
||||||
|
y0 = HEIGHT / 2 + r0 * math.sin(ar0)
|
||||||
|
y1 = HEIGHT / 2 + r1 * math.sin(ar0)
|
||||||
|
x2 = WIDTH / 2 + r0 * math.cos(ar1)
|
||||||
|
x3 = WIDTH / 2 + r1 * math.cos(ar1)
|
||||||
|
y2 = HEIGHT / 2 + r0 * math.sin(ar1)
|
||||||
|
y3 = HEIGHT / 2 + r1 * math.sin(ar1)
|
||||||
|
c.create_line((x0 + x2)/2, (y0+y2)/2, (x1+x3)/2, (y1+y3)/2)
|
||||||
|
|
||||||
|
def hline(c,a0,a1,r,med):
|
||||||
|
if not(med):
|
||||||
|
ar0 = math.radians(a0)
|
||||||
|
ar1 = math.radians(a1+ASTEP)
|
||||||
|
x0 = WIDTH / 2 + r * math.cos(ar0)
|
||||||
|
x1 = WIDTH / 2 + r * math.cos(ar1)
|
||||||
|
y0 = HEIGHT / 2 + r * math.sin(ar0)
|
||||||
|
y1 = HEIGHT / 2 + r * math.sin(ar1)
|
||||||
|
c.create_line(x0, y0, (x0+x1)/2, (y0+y1)/2)
|
||||||
|
else:
|
||||||
|
ar0 = math.radians(a0-ASTEP)
|
||||||
|
ar1 = math.radians(a1)
|
||||||
|
x0 = WIDTH / 2 + r * math.cos(ar0)
|
||||||
|
x1 = WIDTH / 2 + r * math.cos(ar1)
|
||||||
|
y0 = HEIGHT / 2 + r * math.sin(ar0)
|
||||||
|
y1 = HEIGHT / 2 + r * math.sin(ar1)
|
||||||
|
c.create_line((x0+x1)/2,(y0+y1)/2, x1, y1)
|
||||||
|
|
||||||
|
def text2bin(txt):
|
||||||
|
b = ' '.join(format(ord(x), 'b') for x in txt)
|
||||||
|
return b.replace(' ','')
|
||||||
|
|
||||||
|
def addArc(*args):
|
||||||
|
global arcs
|
||||||
|
arcs += 1
|
||||||
|
update()
|
||||||
|
|
||||||
|
def lessArc(*args):
|
||||||
|
global arcs
|
||||||
|
arcs -= 1
|
||||||
|
if arcs < 3:
|
||||||
|
arcs = 3
|
||||||
|
else:
|
||||||
|
update()
|
||||||
|
|
||||||
|
def update(*args):
|
||||||
|
global c, ASTEP, ASTART
|
||||||
|
|
||||||
|
ASTEP = 180/arcs #angle in degrees
|
||||||
|
ASTART = 0 #int * ASTEP
|
||||||
|
|
||||||
|
c.create_rectangle(0, 0, WIDTH, HEIGHT, fill="white")
|
||||||
|
|
||||||
|
val = text2bin(txt.get())
|
||||||
|
|
||||||
|
a = ASTART
|
||||||
|
d = 40
|
||||||
|
outer = False
|
||||||
|
|
||||||
|
while a*ASTEP < 360:
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d, a%2 == 0)
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d-1, a%2 == 0)
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d-2, a%2 == 0)
|
||||||
|
a += 1
|
||||||
|
|
||||||
|
a = ASTART
|
||||||
|
|
||||||
|
for ch in val:
|
||||||
|
if (ch == '1') ^ a%2 == 0:
|
||||||
|
if outer:
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d+RSTEP, a%2 == 0)
|
||||||
|
else:
|
||||||
|
vline(c,a*ASTEP,d,d+RSTEP,a%2 == 0)
|
||||||
|
a += 1
|
||||||
|
if a*ASTEP > 360:
|
||||||
|
a -= int(360/ASTEP)
|
||||||
|
outer = not(outer)
|
||||||
|
if not(outer):
|
||||||
|
d += RSTEP
|
||||||
|
|
||||||
|
a = ASTART
|
||||||
|
|
||||||
|
if outer:
|
||||||
|
d += RSTEP
|
||||||
|
|
||||||
|
while a*ASTEP < 360:
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d+RSTEP, a%2 == 0)
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d+RSTEP+1, a%2 == 0)
|
||||||
|
hline(c,a*ASTEP,(a+1)*ASTEP,d+RSTEP+2, a%2 == 0)
|
||||||
|
a += 1
|
||||||
|
|
||||||
|
top = tk.Tk()
|
||||||
|
|
||||||
|
txt = tk.StringVar()
|
||||||
|
txt.set(STARTTXT)
|
||||||
|
txt.trace('w',update)
|
||||||
|
|
||||||
|
e = tk.Entry(top,width=100,textvariable=txt)
|
||||||
|
e.grid(row=0,column=0)
|
||||||
|
|
||||||
|
bl = tk.Button(top, text="-", command=lessArc)
|
||||||
|
bl.grid(row=0,column=1)
|
||||||
|
|
||||||
|
bp = tk.Button(top, text="+", command=addArc)
|
||||||
|
bp.grid(row=0,column=2)
|
||||||
|
|
||||||
|
c = tk.Canvas(top, height=HEIGHT, width=WIDTH)
|
||||||
|
c.grid(row=1,column=0,columnspan=3)
|
||||||
|
|
||||||
|
update()
|
||||||
|
|
||||||
|
top.mainloop()
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 135 KiB |
Reference in New Issue
Block a user