4 de diciembre de 2012

Cómo programar a tu tortuga

El lenguaje de programación Python incluye un módulo que permite programar gráficas de tortuga. Las gráficas de tortuga aparecieron por vez primera en el lenguaje de programación Logo por ahí de finales de los años sesenta. La idea central de este tipo de gráficas consiste en desplazar un cursor (al que se le denomina «tortuga») por la pantalla a partir de diferentes comandos programados. Normalmente la tortuga deja un rastro por el lugar donde se va desplazando.

En mi experiencia las gráficas de tortuga resultan muy atractivas a todo tipo de estudiantes de programación, ya que éstas permiten experimentar y ver resultados de manera fácil, rápida e intuitiva.

Para comenzar a usar gráficas de tortuga en Python primero es necesario importar el contenido del módulo turtle:
from turtle import *
Posteriormente se debe colocar el código de nuestro programa, el cual incluye los comandos para controlar a la tortuga. Por ejemplo, el siguiente código dibuja un rectángulo de 100 píxeles de ancho por 50 píxeles de alto:
fd(100)
rt(90)
fd(50)
rt(90)
fd(100)
rt(90)
fd(50)
En este ejemplo la función fd() (abreviación de forward) avanza la tortuga hacia adelante una cierta cantidad de pasos, en donde un paso es un píxel. Así mismo, la función rt() (abreviación de right) gira la tortuga hacia la derecha un cierto número de grados. Los desplazamientos y giros se hacen siempre relativos a donde la tortuga apunta en un momento dado. Cuando el programa se ejecuta aparece una nueva ventana similar a la que se muestra a continuación:

La ventana con el rectángulo
dibujado por la tortuga.
Conviene hacer notar una par de cosas:
  • La tortuga se representa con un símbolo similar a un pequeño triángulo. Con ello se puede identificar claramente hacia donde apunta.
  • La tortuga se coloca automáticamente al inicio del programa en el centro de la ventana apuntando en dirección al este.

Un ejemplo más elaborado

Con ayuda de ciclos y definición de funciones se pueden comenzar a construir nuevas abstracciones. Por ejemplo, la siguiente función permite dibujar un simple cuadrado de x píxeles de longitud de cada lado:
def cuadro(x):
    for i in range(4):
        fd(x)
        rt(90)
Al llamar cuadro(100) obtenemos algo así:


Ahora bien, usando la función cuadro() podemos construir algo más interesante:
def figura():
    for i in range(36):
        cuadro(50)
        fd(15)
        rt(10)
Invocando figura() se obtiene una imagen que es una reminiscencia de un juguete conocido como espirógrafo:


¿Qué más se puede hacer?

Los ejemplo anteriores solo utilizan dos instrucciones del módulo de gráficas de tortuga de Python: fd() y rt(). Sin embargo la documentación de Python incluye más de 50 funciones en el módulo turtle. Para conocer otros comandos para programar a la tortuga sugiero consultar los siguientes recursos:
  • Gráficas de tortuga con Python. Este es un documento PDF que elaboré en el 2011 para unos talleres que di para alumnos de preparatoria. Contiene un resumen de los comandos más comunes utilizados para programar gráficas de tortuga en Python. Esta información aplica de manera idéntica para las versiones 2 y 3 de Python.
  • The Python Standard Library: Turtle Graphics. Documentación oficial (en inglés) sobre el módulo turtle de Python 3.
A continuación muestro una imagen de lo que pueden llegar a hacer nuestros alumnos usando gráficas de tortuga.

Imagen generada por un programa en Logo escrito por
Katherine Ruiz y Stephany García, alumnas de
nuevo ingreso a la carrera de Ingeniero en
Tecnologías Computacionales (ITC), agosto 2006.

Resulta evidente que tanto en el arte como en la programación, el límite de lo que podemos hacer está en nuestra imaginación.

2 comentarios:

  1. Muchas gracias Maestro!

    ResponderEliminar
  2. Por favor, me podría indicar cómo guardar los dibujos que hago con turtle python 3.4 en algún tipo de formato p.ej. *.jpg
    Llevo tiempo buscando información y no lo consigo.
    Gracias y perdón por las molestias.
    alacasta@telefonica.net

    ResponderEliminar