Español   Ejemplos: Cuadrículas.

Una cuadrícula elástica

Imagina una cuadrícula elástica. En su forma original, la malla consta de celdas cuadradas regulares. Al aplicar una deformación, cada celda se estirará o torcerá.
Si quieres que XLOGO no dibuje las celdas horizontales o las verticales, "comenta" la correspondiente línea del programa.
También puedes cambiar la dimensión de la malla modificando el valor de la variable: en el procedimiento empezar

para empezar
# Inicializamos papel, lapiz y tortuga
  reponetodo pontamañopantalla [400 400]
  poncolorpapel negro poncolorlapiz verde subelapiz ocultatortuga
#
  haz "lado 19 # aumenta este valor (p.e. 29) para malla mas estrecha
  repitepara [l 0 1]
   [ repitepara frase lista "i 0 :lado
     [subelapiz repitepara frase lista "j 0 :lado [
       si :l=0 [ # lineas verticales
        ponposicion pos.cuad :i :j :lado bajalapiz]
       si :l=1 [ # lineas horizontales
        ponposicion pos.cuad :j :i :lado bajalapiz]
  ]]]
fin

para pos.cuad :i :j :lado
  haz "x (:i/(0.5*:lado))-1
  haz "y (:j/(0.5*:lado))-1
  haz "rect funcion :x :y
  devuelve lista 180*primero :rect 180*ultimo :rect
fin

para funcion :x :y
  devuelve lista :x :y # Sin cambios
fin


Cambia el procedimiento función por uno de los siguintes para "estirar" o "retorcer" la cuadrícula. Aumenta el valor a 29.

para funcion :x :y
  si :x< 0 [haz "signox cambiasigno 1][haz "signox 1]
  si :y< 0 [haz "signoy cambiasigno 1][haz "signoy 1]
  haz "x potencia :x 2
  haz "y potencia :y 2
  devuelve lista :signox*:x :signoy*:y
fin

para funcion :x :y
  haz "x :x + 0.05 * seno 360* :y
  haz "y :y + 0.05 * coseno 360* :x
  devuelve lista :x :y
fin


A continuación, añade estos dos procedimientos, que permiten trabajar con coordenadas polares. La primera convierte coordenadas polares a cartesianas, y el segundo opera a la inversa.

para pol.cart :raddist :theta
# convierte polares a cartesianas
  haz "x :raddist * seno :theta
  haz "y :raddist * coseno :theta
  devuelve lista :x :y
fin

para cart.pol :x :y
# usa una segunda tortuga para convertir cartesianas a polares
  pontortuga 1 subelapiz ponxy :x :y
  haz "raddist raizcuadrada ((:x*:x) + (:y*:y))
  ponrumbo hacia [0 0] haz "myrumbo rumbo pontortuga 0
  devuelve lista :raddist :myrumbo+180
fin


Ahora, vete sustituyendo sucesivamente los siguientes procedimientos:

para funcion :x :y
  haz "polar cart.pol :x :y
  haz "raddist primero :polar haz "theta ultimo :polar
  si :raddist <1 [
  haz "raddist potencia :raddist 0.4] #cambia 0.4 por 2
  devuelve pol.cart :raddist :theta
fin

para funcion :x :y
  haz "polar cart.pol :x :y
  haz "raddist primero :polar haz "theta ultimo :polar
  si :raddist <1 [
  haz "theta :theta-100*(1-:raddist)] #cambia 100 por 200
  devuelve pol.cart :raddist :theta
fin

para funcion :x :y
  haz "polar cart.pol :x :y
  haz "raddist primero :polar haz "theta ultimo :polar
  haz "raddist potencia :raddist 0.4
  devuelve pol.cart :raddist :theta
fin
Probar este programa ahora

Procedimiento a ejecutar:
empezar