(Vedi Asteroidi) Il terzo vertice può essere uno a piacere tra i successivi (+1, +2, +3, …)
Web VPython 3.2
#from numpy import linspace
#from vpython import *
DIM = 800 # Dimensione della finestra
MAX = 24 # Num. massimo vertici e tratti
MAXDIST = 1 # Ascissa / ordinata massima
VERTICI = 6
SALTO = +2 # Vertice collegato
TRATTI = 20 # Numero di tratti
tau = 2*pi
def linspace(start=0, stop=tau, num=50, endpoint=True):
if(endpoint):
step = (stop-start)/(num-1)
else:
step = (stop-start)/(num)
return [(start+i*step) for i in range(num)]
def string_art(p1, p2, p3):
X12 = linspace(p1[0], p2[0], num=TRATTI, endpoint=True)
X23 = linspace(p2[0], p3[0], num=TRATTI, endpoint=True)
Y12 = linspace(p1[1], p2[1], num=TRATTI, endpoint=True)
Y23 = linspace(p2[1], p3[1], num=TRATTI, endpoint=True)
gt = gcurve(color=color.blue, width=1)
for x12, y12, x23, y23 in zip(X12, Y12, X23, Y23):
gt.plot(x12, y12)
gt.plot(x23, y23)
gt.plot(x12, y12)
def disabilita():
for x in RADIO1: x.disabled=True
for x in RADIO2: x.disabled=True
for x in RADIO3: x.disabled=True
def abilita():
global SALTO
for x in RADIO1: x.disabled=False
for x in RADIO2: x.disabled=False
if(VERTICI % 2 == 0): ultimo=VERTICI//2-1
else: ultimo=VERTICI//2
if(SALTO > ultimo):
SALTO = ultimo
RADIO3[SALTO-1].checked=True
for i in range(ultimo):
RADIO3[i].disabled=False
def disegna():
disabilita()
global g
g.delete()
g = graph(fast=False)
g.width = g.height = DIM
g.xmin = g.ymin = -1.1*MAXDIST
g.xmax = g.ymax = +1.1*MAXDIST
ANGOLI = linspace(start=pi/2, stop=tau+pi/2, num=VERTICI, endpoint=False)
PUNTI = [(MAXDIST*cos(angolo), MAXDIST*sin(angolo)) for angolo in ANGOLI]
for i in range(VERTICI):
rate(6)
punto1 = PUNTI[i]
punto2 = (0, 0)
punto3 = PUNTI[(i+SALTO)%VERTICI]
string_art(punto1, punto2, punto3)
abilita()
def bind_vertici(evt):
global VERTICI
VERTICI = int(evt.text)
disegna()
def bind_salto(evt):
global SALTO
SALTO = int(evt.text)
disegna()
def bind_tratti(evt):
global TRATTI
TRATTI = int(evt.text)
disegna()
c=canvas()
c.append_to_caption("Vertici\t")
RADIO1 = []
for i in range(3, MAX//2+3):
RADIO1.append(radio(bind=bind_vertici, name="vertici", text=str(i)))
c.append_to_caption(" ")
c.append_to_caption("\n\t\t")
for i in range(MAX//2+3, MAX+1):
RADIO1.append(radio(bind=bind_vertici, name="vertici", text=str(i)))
c.append_to_caption(" ")
RADIO1[VERTICI-3].checked=True
c.append_to_caption("\nSalto?\t")
RADIO3 = []
for i in range(1, MAX//2):
RADIO3.append(radio(bind=bind_salto, name="salto", text=str(i)))
c.append_to_caption(" ")
RADIO3[SALTO-1].checked=True
c.append_to_caption("\nTratti\t\t")
RADIO2 = []
for i in range(3, MAX//2+3):
RADIO2.append(radio(bind=bind_tratti, name="tratti", text=str(i)))
c.append_to_caption(" ")
c.append_to_caption("\n\t\t")
for i in range(MAX//2+3, MAX+1):
RADIO2.append(radio(bind=bind_tratti, name="tratti", text=str(i)))
c.append_to_caption(" ")
RADIO2[TRATTI-3].checked=True
c.append_to_caption("\n\n")
c.delete()
g = graph()
disegna()