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á.
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 |
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 |
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 |
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 |