Función cubo usando una tortuga Logo
Artículo en construcción.
En el ejercicio Construir un cubo a partir de una tortuga Logo 3D , se explica detalladamente un algoritmo para construir un cubo.
En este ejercicio construiremos un cubo, cuyo origen esta en el centro del mismo, para ello plantearemos una función cubo, que utiliza otra función que construye un cuadrado que tiene su origen en el centro del mismo. Esta función cuadrado, se utilizan otras dos funciones andar, que hace avanzar a la tortuga y a su vez carga las nuevas coordenadas en la lista coords, la otra función es carga_cara que va cargando en una lista los datos de cada cara del cubo.
En principio parece algo complejo, pero lo explicaremos detalladamente. La ventaja que se obtiene es que cada vez que llamamos a la función cubo, hemos acumulado sus coordenadas y caras para luego poder usarlas al crear un objeto en blender.
Si Usted ya hizo el ejercicio Construir un cuadrado a partir de una tortuga Logo 3D , este ejercicio le resultara muy fácil de entender.
Este es el script
import bpy
from tortuga import Tortuga
coords=[]
faces=[]
t=Tortuga()
t.Rolar(90)
def createMesh(name, origin, verts, edges, faces):
# Create mesh and object
me = bpy.data.meshes.new(name+'Mesh')
ob = bpy.data.objects.new(name, me)
ob.location = origin
ob.show_name = True
# Link object to scene
bpy.context.scene.objects.link(ob)
# Create mesh from given verts, edges, faces. Either edges or
# faces should be [], or you ask for problems
me.from_pydata(verts, edges, faces)
# Update mesh with new data
me.update(calc_edges=True)
return ob
def carga_coords():
coordenada=[]
coordenada.append(t.X)
coordenada.append(t.Y)
coordenada.append(t.Z)
coords.append(coordenada)
def andar(paso):
t.Andar(paso)
carga_coords()
def carga_cara(v1,v2,v3,v4,lista):
cara=[]
cara.append(v1)
cara.append(v2)
cara.append(v3)
cara.append(v4)
lista.append(cara)
def cuadrado(lado):
t.Andar(-lado/2)
t.Virar(-90)
andar(lado/2)
t.Virar(90)
i=0
cara=[]
while i < 3:
andar(lado)
t.Virar(90)
i = i + 1
t.Andar(lado/2)
t.Virar(90)
t.Andar(lado/2)
carga_cara(len(coords)-4,len(coords)-3,len(coords)-2,len(coords)-1,faces)
def cubo(lado):
t.Cabecear(90)
t.Andar(-lado/2)
t.Cabecear(-90)
cuadrado(lado)
t.Cabecear(90)
t.Andar(lado)
t.Cabecear(-90)
cuadrado(lado)
t.Cabecear(90)
t.Andar(-lado/2)
t.Cabecear(-90)
carga_cara(len(coords)-8,len(coords)-4,len(coords)-3,len(coords)-7,faces)
carga_cara(len(coords)-7,len(coords)-6,len(coords)-2,len(coords)-3,faces)
carga_cara(len(coords)-6,len(coords)-5,len(coords)-1,len(coords)-2,faces)
carga_cara(len(coords)-8,len(coords)-5,len(coords)-1,len(coords)-4,faces)
Video que explica los pasos que se van dando en la funcion cuadrado(lado).
Video que explica los pasos que se van dando en la funcion cubo(lado)