Reutilizando el código anterior con mínimas modificaciones tenemos como resultado el Conjunto de Cantor (http://es.wikipedia.org/wiki/Conjunto_de_Cantor).
Solo colocaré la parte modifcada del código anterior, no se olviden de importar mayavi!
def generar(self, nivel, cursor, distancia):
if nivel == 0:
a = (cursor.x, cursor.x, cursor.x)
b = (cursor.x + distancia*np.cos(cursor.ang),
cursor.y + distancia*np.sin(cursor.ang))
mlab.points3d(a, a, a, colormap="copper", scale_factor=.25)
cursor.x = b[0]
cursor.y = b[1]
else:
print "nivel = ", nivel
for i in self.gramatica[self.inicial]:
if i == 'A':
self.generar(nivel-1, cursor, distancia/3.0)
elif i == 'B':
cursor.x += 3*distancia
if __name__ == "__main__":
miSistema = SistemaL(gramatica = {'A':"ABA", 'B':"BBB"},
inicial = 'A',distancia = 1, nivel = 5)
miSistema.iniciar()
miSistema.generar(miSistema.nivel, miSistema.cursor, miSistema.distancia)
print "termine con todos los niveles"
mlab.show()
Y así quedaría …
btw: puede haber quedado algo residual del anterior problema 🙂