miércoles, 18 de febrero de 2015

Latido mestizo

(es) Latido mestizo

(eo) Mestiza korbato

Latido mestizo

http://dx.doi.org/10.13140/RG.2.2.34092.90243

Descripción artística:

Un corazón humano latiendo al interior de un exterior mestizo.

Motivación:

El autor es mestizo.

Descripción técnica:

Una vista girada del conjunto de Mándelbrot en el que los puntos que no pertenecen al conjunto se dibujan como capas blancas y grices (según si el número de pasos requerido para determinar que no pertenecen es par o impar), mientras que para los puntos c que sí pertenecen se dibujan como puntos rojos con brillo máximo y con saturación igual a la expresión cos (32(( c ) 2 +( c ) 2 ) ) .
El conjunto de Mándelbrot es el conjunto M de todos los puntos c del plano complejo tal que la sucesión z n+1 = z n 2 +c (con z 0 =0+0i ) no diverge (es decir, tal que es acotada).
El criterio usado para determinar si las sucesiones divergen o no, es si z k , con kN , tiene un módulo mayor que 2, es decir | z k |2 (procedimiento estándar para los conjuntos de Julia y de Mándelbrot). Puesto que no puede evaluarse hasta el infinito, se usa una cota: N . Si la sucesión no “diverge” antes de llegar al N -ésimo término de las sucesiones, se considera que no diverge, es decir que es acotada.

Código (CFDG):

# Copyright 2015 Eduardo Adam Navas López
# Este archivo es Software Libre liberado bajo la licencia GNU GPLv3 o su versión más reciente:
# http://www.gnu.org/licenses/gpl.html


#Para generar la imagen:
#$ cfdg -b 0 -s 1000 mestizo.cfdg mestizo.png


startshape corazon2

PI = 3.14159

LIMITE = 1000 #Resolución de la imagen
MAXPASOS = 100
LIMIZQ = -2.0
LIMDER = 1.0
LIMARRIBA = 1.5
LIMABAJO = -1.5

TAMX = (LIMDER-LIMIZQ)/(LIMITE-1)
TAMY = (LIMARRIBA-LIMABAJO)/(LIMITE-1)


pasos(numPasos,z_r,z_i,c_r,c_i) = 
 if((numPasos < MAXPASOS) && (z_r*z_r+z_i*z_i<4),
  pasos(numPasos+1, z_r*z_r - z_i*z_i + c_r, 2*z_r*z_i + c_i, c_r, c_i),
  numPasos)

#Versión con suficiente memoria RAM
shape corazon {
 loop i = LIMITE []  {
  c_i = (LIMARRIBA-LIMABAJO)*i/(LIMITE-1) + LIMABAJO #y
  loop j = LIMITE [] {
   c_r = (LIMDER-LIMIZQ)*j/(LIMITE-1) + LIMIZQ #x
   
   numPasos = pasos(0, 0.0, 0.0, c_r, c_i)
   if (numPasos==MAXPASOS){
    SQUARE[x c_i y c_r size TAMX TAMY sat (cos(32*(c_i*c_i+c_r*c_r)*180/PI)) b 1]
   } else {
    if (mod(numPasos,2))
     SQUARE[x c_i y c_r size TAMX TAMY b 0.4]
    else
     SQUARE[x c_i y c_r size TAMX TAMY b 0.95]
   }
  }
 }
}

#Versión con optimización por simetría bilateral
shape corazon2 {
 loop i = LIMITE/2 []  {
  c_i = (LIMARRIBA-LIMABAJO)*i/(LIMITE-1) + LIMABAJO #y
  loop j = LIMITE [] {
   c_r = (LIMDER-LIMIZQ)*j/(LIMITE-1) + LIMIZQ #x
   
   numPasos = pasos(0, 0.0, 0.0, c_r, c_i)
   if (numPasos==MAXPASOS){
    saturacion = (cos(32*(c_i*c_i+c_r*c_r)*180/PI))
    SQUARE[x c_i    y c_r size TAMX TAMY sat saturacion b 1]
    SQUARE[x (-c_i) y c_r size TAMX TAMY sat saturacion b 1]
   } else {
    if (mod(numPasos,2)){
     SQUARE[x c_i    y c_r size TAMX TAMY b 0.4]
     SQUARE[x (-c_i) y c_r size TAMX TAMY b 0.4]
    }else{
     SQUARE[x c_i    y c_r size TAMX TAMY b 0.95]
     SQUARE[x (-c_i) y c_r size TAMX TAMY b 0.95]
    }
   }
  }
 }
}

No hay comentarios:

Publicar un comentario