Joder, a ver como me las arreglo con mis muy limitados conocimientos de mate de 4 de la ESO XDD
#121 si lees con un poco de paciencia verás que son mates de 3º/4º de la ESO: números complejos y poco más. Ni siquiera hay que hacer límites en infinito
Sé que asusta, por eso la he puesto como kata, para "obligaros" a hacerlo. En su día no intenté hacer fractales porque me parecían complejos. Cuando me puse a ello y vi lo simples que eran fue como:
De hecho es la gracia de los fractales, un resultado complejo a partir de unas reglas simples.
Aún así... este hilo no está solo para postear resultados Cuando necesitéis un cable estamos los karatekas tanto por aquí como en #mv.nerd @ Quakenet.
Yo tengo que tener por ahí una práctica de 2º de carrera que por lo menos calculaba los puntos, luego ya los mostrábamos con el matplotlib
#126 Es cosa mia o los 2 links son iguales?
PD: En el curro mi pc tiene una shitty GPU asi que hasta que no llegue a casa no podre ver nada, pero te he dado manita pork tiene buena pinta
Y sobre la pregunta, porque la imagen donde ejecutas GLSL tiene como limite los pixeles que le das al canvas?
Si al hacer zoom, cambiaras el offset para pintar, en vez desde 0,0 a 3,2, una region especifica como (-0.5,0.5), (0.5,-0.5), todos los pixeles que has usado para pintar todo el conjunto seriviria para pintar ese rectangulo.
#127 woopsies, es verdad, fixed (el primero era http://glsl.heroku.com/e#6895.23 )
#127 buen intento pero no es eso (si te he entendido bien).
Cada vez que hago zoom recalculo la región de la imagen... es decir, no es una imagen y hago zoom sobre ella, sino que como dices, en lugar de dibujar entre [-1, 1] dibujo entre [-0.5, 0.5] (menos region del fractal) y como tengo el mismo nº de pixeles en pantalla obtengo más detalle (a cada pixel de mi pantalla le corresponde una región más chiquitita del fractal).
En teoría el fractal es infinito, así que por mucho que esté en la región entre [0.000001, 0.000002] siempre debería poder seguir haciendo zoom.
¿Qué está ocurriendo?
#130 los fractales con pocas iteraciones tienen más bien este aspecto (15 iteraciones)
¿Ves los bordes redondeados? Si haces más iteraciones se van definiendo "hacia dentro" (como si se esculpiera).
16: http://i.imgur.com/rtjyVhF.png
17: http://i.imgur.com/CpqaYkV.png
18: http://i.imgur.com/jeCvnEM.png
19: http://i.imgur.com/hfZtaoG.png
Es curioso como cada iteración va dejando su huella.
Boton izq: mover.
Boton derecho: escalar.
Si se os queda colgadete es que esta calculando.
No uso nada tan avanzado como un shader aunque era la intención. Por eso ni me he molestado en animar el color, aunque quería meterle mas colores en el degradado pero no se si me dará tiempo hoy
Edit:
Le he metido un editor de los colores del gradiente pero no consigo mapearlos correctamente cuando son mas de 2 algo hago mal... Por ejemplo en esta captura el centro de la figura, donde se pasa de iteraciones deberia ser negro si mis calculos no me fallan, como en la captura de arriba pero naa
Edit2:
Tengo una segunda build con doubles que mete zoom chachi
Iva a hacer el mio en aplicación OpenGL de escritorio, pero despues de ver la pagina de elkaoD decidí hacerlo ahí y la verdad mola un rato. Link
Tuve que mirar unas cuantas cosas en wikipedia para poder hacerlo (no el pseudocódigo en si, pero si lo de la condición de escape).
Hay unas cuantas cosas que no me funcionaban que creo que son por la pagina en si y no porque no sea GLSL valido (aunque hace bastante que no toco GLSL y tampoco hice mucha cosa con el):
#134 Gracias! Al principio pensé que tendria algo que ver con que intentara desenrollarlo y no pudiera, pero no sabía que en ES era obligatorio que se pudiera desenrollar. Para lo de los colores al principio hice que variara en la escala del rojo tipo r=iteraciones/MAX_ITERACIONES, pero el problema era que con 200 iteraciones casi ni se percibia el cambio si cambiaba solo el rojo, así que he hecho que lo divida entre 20 en ved de entre las iteraciones maximas y que simplemente se repita cuando se acaba el gradiente, aunque es verdad que se ve mucho mejor con algo progresivo como lo tuyo (supongo que se notará mas el cambio entre iteraciones porque varias los tres canales y no solo el rojo).
Esta vez he decidido probar Processing, que parece más indicado para el problema. No está mal.
Eso sí, no he conseguido hacerlo funcionar en processing.js, así que se queda en binarios. Lo siento.
Ejecutables para Windows, Linux y MacOS.
Podéis usar + y - para aumentar y reducir el numero máximo de iteraciones, y con el ratón elegir un pedazo de la imagen para ampliarlo.
KATA: Cuboides ASCII
Dibuja un cuboide ASCII art dado el tamaño en X Y Z azulejos.
Ejemplos:
3 3 3 ->
____ ____ ____
/____/____/____/|
/____/____/____/||
/____/____/____/|||
|____|____|____|||/
|____|____|____||/
|____|____|____|/
5 2 3 ->
____ ____ ____ ____ ____
/____/____/____/____/____/|
/____/____/____/____/____/||
/____/____/____/____/____/||/
|____|____|____|____|____||/
|____|____|____|____|____|/
4 6 5 ->
____ ____ ____ ____
/____/____/____/____/|
/____/____/____/____/||
/____/____/____/____/|||
/____/____/____/____/||||
/____/____/____/____/|||||
|____|____|____|____||||||
|____|____|____|____|||||/
|____|____|____|____||||/
|____|____|____|____|||/
|____|____|____|____||/
|____|____|____|____|/
Entrega
-
Todo programa posteado se debe acompañar de AL MENOS una screenshot de la salida o resultado en intérprete online.
-
La kata acabará el jueves 28 de febrero a las 23:59.
#140 Se nota lo depre que te ha dejado la kata anterior por las pocas descripciones que has puesto XD
Explicación de la kata y de F#
Antes de empezar me gustaría introducir un poco F# para todos aquellos que lo ven por primera vez.
Introducción Wikipedia
F# (pronunciado F Sharp) es un lenguaje de programación multiparadigma de código abierto, para la plataforma .NET, que conjunta la programación funcional con las disciplinas imperativa y orientada a objetos. Es una variante del lenguaje de programación ML y es compatible con la implementación Objective Caml. F# fue inicialmente desarrollado por Don Syme de Microsoft Research, pero actualmente está siendo desarrollado por la División de Desarrolladores de Microsoft y es distribuido como un lenguaje totalmente soportado en la plataforma .NET y Visual Studio 2010.
Vamos, viene a ser al .NET lo que scala a la JVM.
En F# se utiliza mucho el operador pipe "|>" para facilitar la lectura. En verdad su definición es tan sencilla como:
let (|>) x f = f x
Pero nos permite cambiar este churro
List.reduce((fun a b -> a + b) List.map((fun x -> x*x) [1 .. 10]))
por este poema
[1 .. 10]
|> List.map (fun x -> x*x)
|> List.reduce (fun a b -> a + b)
que sigue de forma más fiel el razonamiento de una persona (sana)
Y vista esta pequeña introducción ahora os explico mi kata
let cuboide a b c =
Aquí defino la función cuboide que toma 3 parámetros. Verdad que no véis tipos por ningún lado? Gracias a la inferencia de tipo F# sabe que se trata de ints. Para mi el tipado es la vida pero si no los tengo que especificar directamente es el cielo.
let rep = String.replicate
Para simplificar el código que viene luego creo una funcion rep que hace lo mismo que String.replicate
let top =
[0 .. c]
|> List.rev
Aquí creo la parte de arriba de los cubos. Empiezo con una lista que va de c a 0.
|> List.map (fun i -> rep i " " + "/" + rep a "____/")
|> fun x -> (x.Head.Replace("/", " ")::x.Tail)
Creo los espacios del principio y la parte superior del cubo. A la primera fila le reemplazo los "/" por " ".
|> List.mapi (fun i x -> x + rep (min i b) "|")
|> List.mapi (fun i x -> if i > b then x + "/" else x)
Relleno el lateral del cubo tal y como toca. Es dificil de explicar en texto pero si coges un papel verás que tiene sentido.
La parte frontal del cubo es muy parecida a la de arriba.
El mio en Python
http://ideone.com/Rk9Wsg
Nada nuevo por el horizonte, optimización -4 (en verdad antes hacía un print en vez de almacenarlo en la variable y sacarlo más tarde, así que -3 mejor)
Espero impaciente el de otra persona en python o cualquier cosa que se pueda leer (va por ti #142)
Me ha dado por aprender python así que he hecho la kata con el, pero es la primera cosa que hago (menos algun cacascript que hice hace tiempo para blender) así que no me crucifiquéis demasiado xD
#144 Tienes una columna de mas a la derecha
#148 Almenos la tienes hecha xD yo aun no la he empezado
#147 jode que fail de kata xD. Como tenia los "azulejos" de arriba echados hacia la derecha tambien no me di cuenta