Si prenda una strisciolina di carta la si pieghi a metà e poi ...
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import array as arr
import numpy as np
Per iniziare la classe piega: la piega è memorizzata con una lettera
si parte da AB prima piega poi come si può notare la seconda parte è la stessa ma ruotata di $\frac{\pi}{2}$
class piega:
def __init__(self, dr):
self.dr = dr
def failapiega(self):
stringa=self.dr
l=len(stringa)
pdrago=""
p1='U'
i=l-1
#si legge la stringa al contrario e si duplica ruotando di pi/2
while i>=0:
p=stringa[i]
if p=='A':
p1='B'
if p=='B':
p1='C'
if p=='C':
p1='D'
if p=='D':
p1='A'
i=i-1
pdrago=pdrago+p1
#qui si unisce la stringa in ingresso con quella ruotata di pi/2 nel while
return stringa+pdrago
class disegna:
def __init__(self,dr1):
self.dr1=dr1
def traccia(self):
stringa=self.dr1
l=len(stringa)
x=0
y=0
delta=1
puntiX=arr.array('l')
puntiY=arr.array('l')
puntiX.append(x)
puntiY.append(y)
delta=1
for k in range(1,l-1):
if stringa[k]=='A':
y=y-delta
elif stringa[k]=='B':
x=x+delta
elif stringa[k]=='C':
y=y+delta
elif stringa[k]=='D':
x=x-delta
else:
#default
pass
puntiX.append(x)
puntiY.append(y)
plt.figure(figsize=(10,10))
plt.axes().set_aspect('equal', 'datalim')
plt.plot(puntiX, puntiY, 'r-', label='line 2')
plt.show()
def traccia_numpy(self):
stringa=self.dr1
l=len(stringa)
x=0
y=0
delta=1
puntiX = [x]
puntiY = [y]
delta=1
for k in range(1,l-1):
if stringa[k]=='A':
y=y-delta
elif stringa[k]=='B':
x=x+delta
elif stringa[k]=='C':
y=y+delta
elif stringa[k]=='D':
x=x-delta
else:
#default
pass
puntiX.append(x)
puntiY.append(y)
puntiX = np.array(puntiX, dtype=np.int64)
puntiY = np.array(puntiY, dtype=np.int64)
plt.figure(figsize=(10,10))
plt.axes().set_aspect('equal', 'datalim')
plt.plot(puntiX, puntiY, 'r-', label='line 2')
plt.show()
stringa='AB'
#attenzione diventa subito molto grande ... non esagerare con le iterazioni
for k in range(0,20):
passo=piega(stringa)
stringa=passo.failapiega()
drago=disegna(stringa)
drago.traccia_numpy()