tag:blogger.com,1999:blog-58362396210846788172024-02-20T19:42:26.928-03:00noTint()Experimentos con ProcessingFedericohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-5836239621084678817.post-67623960787575600352008-02-19T21:25:00.007-02:002008-02-19T23:28:06.489-02:00Bots I<p><a href="http://caco.homelinux.org/processing/bots/" target="_blank" style="text-decoration: none;"><img src="http://caco.homelinux.org/processing/bots/bots.jpg" style="text-decoration: none;" border="0" /><br /><span style="text-decoration: underline;">Ver Sketch</span></a></p><p>La misión de cada punto verde es encontrar al punto rojo. Para esto, cada punto verde traza lineas a lo largo y ancho de la pantalla (se pueden ver haciendo click en el sketch). Cuando lo encuentran se mueven directo hacia él y una vez allí, se genera una nueva posición random y el ciclo vuelve a empezar.<br /></p>Federicohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.com1tag:blogger.com,1999:blog-5836239621084678817.post-29614195295830031852007-11-25T19:12:00.000-03:002007-11-25T19:23:05.225-03:00Shake It!<p><a href="http://caco.homelinux.org/processing/cubos/applet/" target="_blank" style="text-decoration: none;"><img src="http://caco.homelinux.org/processing/cubos/shake.jpg" style="text-decoration: none;" border="0" /><br /><span style="text-decoration: underline;">Ver Sketch</span></a></p><br /><br />Simples cubos que rebotan dejando una estela con un pequeño agregado: cuando dibujo cada cubo agrego una pequeña variación random de unos pocos pixeles. Esto les da un efecto "shake" interesante.<br /><br />Esta vez no agregue nada para reiniciar el sketch, hay que hacer un refresh en el browser para que vuelva a empezar con otra configuración.Federicohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.com0tag:blogger.com,1999:blog-5836239621084678817.post-68250471317578335402007-11-25T17:56:00.000-03:002007-11-25T18:45:20.674-03:00Rebotes<p><a href="http://caco.homelinux.org/processing/rebotes/applet/" target="_blank" style="text-decoration: none;"><img src="http://caco.homelinux.org/processing/rebotes/rebotes.jpg" style="text-decoration: none;" border="0" /><br /><span style="text-decoration: underline;">Ver Sketch</span></a></p><br /><br />Esto surgió a partir de un círculo. Estaba haciendo que un simple círculo rebote, cuando pensé en agregarle un punto en el centro para poder ver la trayectoria completa del círculo. Dejando solamente el punto y agregando un poco de color quedó terminado.<br /><br />Es muy común que pasen estas cosas. Uno empieza con algo en la mente y termina haciendo completamente otra cosa con solo cambiar un par de parámetros. La única desventaja es que cuesta mucho ponerle fin a las posibilidades y decidirse por alguna.<br /><br />Haciendo click sobre el sketch, se resetea y vuelve a empezar.Federicohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.com0tag:blogger.com,1999:blog-5836239621084678817.post-42030197903320684652007-11-12T16:05:00.000-03:002007-11-25T17:54:16.310-03:00Cellular Automata<p><a href="http://caco.homelinux.org/processing/ca/applet" target="_blank">Ver Sketch</a></p><br /><br />Esta es mi versión de "<a href="http://es.wikipedia.org/wiki/Juego_de_la_vida">Conway's Game of Life</a>" o de un <a href="http://es.wikipedia.org/wiki/Aut%C3%B3mata_celular">cellular automata</a>.<br /><br />Primero se tiene una grilla donde cada pixel es una célula muerta. Se generan random cantidad de células vivas usando la variable "density" en posiciones elegidas de igual forma.<br />Una vez establecido el estado inicial, se empieza a evaluar el ciclo de vida de la siguiente forma:<br /><ul><li>Una célula muerta <span style="font-weight: bold;">cobra vida</span> cuando tiene mas de 3 células vecinas vivas.</li><li>Por el contrario, una célula viva <span style="font-weight: bold;">muere</span> cuando tiene menos de 2 (soledad) o mas de 3 (hacinamiento) células vecinas vivas.</li></ul>Haciendo click se resetea el estado inicial y el ciclo vuelve a empezar.<br /><br />Tengo pensado seguir trabajando sobre este sketch. Por ejemplo, se podría hacer con dos tipos diferentes de células (con colores diferentes) donde cada célula interactúa con las de su mismo tipo (o no, también se podría setear un ciclo de vida diferente cuando interactúan las de un tipo con las del otro).<br /><br />El código a continuación:<br /><br /><pre><br />// Defino un array para las células<br />int[][][] cells;<br /><br />void setup() {<br /> size(200, 200);<br /> stroke(255);<br /> frameRate(15);<br /> reset();<br />}<br /><br />void draw() {<br /> // Con cada click se resetea el estado<br /> if (mousePressed == true) {<br /> reset();<br /> }<br /> // Comienza el ciclo de reproducción/muerte<br /> ca();<br />}<br /><br />// Función reset() resetea el estado<br />void reset() {<br /> // Densidad de células en el estado inicial<br /> float density = random(7);<br /> cells = new int[width][height][2];<br /> for (int i=0; i < width * height * density; i++) {<br /> cells[(int)random(width)][(int)random(height)][1] = 1;<br /> }<br /> background(0);<br />}<br /><br />// Función ca() dibuja los ciclos de reproducción/muerte<br />void ca() {<br /> background(0);<br /> // Primero, dibujo las células vivas<br /> for (int x=0; x < width; x++) {<br /> for (int y=0; y < height; y++) {<br /> if (cells[x][y][1] == 1) {<br /> point(x, y);<br /> }<br /> }<br /> }<br /><br /> // Recorro cada célula para decidir si vive o muere<br /> for (int x=0; x < width; x++) {<br /> for (int y=0; y < height; y++) {<br /> // Cantidad de vecinos vivos<br /> int count = vecinos(x, y);<br /> // Reproducción, solo células muertas con 3 vecinos vivos<br /> if (count == 3 && cells[x][y][1] == 0) {<br /> cells[x][y][1] = 1;<br /> }<br /> // Muerte, células vivas con menos de 2 o mas de 3 vecinos vivos<br /> if ((count < 2 || count > 3) && cells[x][y][1] == 1) {<br /> cells[x][y][1] = 0;<br /> }<br /> }<br /> }<br />}<br /><br />// Función vecinos() devuelve la cantidad de vecinos vivos de una célula<br />int vecinos(int x, int y) {<br /> return cells[(x + 1) % width][y][1] + <br /> cells[x][(y + 1) % height][1] + <br /> cells[(x + width - 1) % width][y][1] + <br /> cells[x][(y + height - 1) % height][1] + <br /> cells[(x + 1) % width][(y + 1) % height][1] + <br /> cells[(x + width - 1) % width][(y + 1) % height][1] + <br /> cells[(x + width - 1) % width][(y + height - 1) % height][1] + <br /> cells[(x + 1) % width][(y + height - 1) % height][1];<br />}<br /></pre>Federicohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.com0tag:blogger.com,1999:blog-5836239621084678817.post-14419894276246627672007-11-11T13:11:00.001-03:002007-11-25T17:55:53.258-03:00Letras Random<p><a href="http://caco.homelinux.org/processing/letra_grande/applet" target="_blank">Ver Sketch</a></p><br /><br />En esta prueba lo que hago es generar caracteres <a href="http://processing.org/reference/random_.html">random()</a> y les asigno, también usando random(), un <a href="http://processing.org/reference/fill_.html">color</a> en la escala de grices.<br />Cada vez que se presiona una tecla se vuelven a generar las 6 líneas de 7 caracteres cada una (no se olviden de hacer foco en el sketch para que funcione).<br /><br />Acá esta el código:<br /><br /><pre><br />void setup() {<br /> size(200, 200);<br /> background(0);<br /> smooth();<br /><br /> // Cargo la fuente que voy a usar<br /> PFont fontA = loadFont("CourierNew36.vlw");<br /> textFont(fontA, 36);<br />}<br /><br />// Variable donde guardo cada caracter<br />char letter;<br />// Posición X<br />int x = 0;<br />// Posición Y<br />int y = 0;<br /><br />void draw() {<br /> // Los caracteres se actualizan cuando se presiona una tecla<br /> if (keyPressed == true) {<br /> background(0);<br /> // 6 líneas<br /> for (int k=0; k<=5; k++) {<br /> if (k==0) {<br /> y=32;<br /> } else {<br /> y=y+32;<br /> }<br /> // 7 caracteres por línea<br /> for (int i=0; i<=6; i++) {<br /> // Elijo un caracter random<br /> letter = char(round(random(40, 90)));<br /> if (i==0) {<br /> x=10;<br /> } else {<br /> x=x+27;<br /> }<br /> // Seteo un color random<br /> fill(random(50,240));<br /> // Escribo el caracter a pantalla<br /> text(letter, x, y);<br /> if (i==6) {<br /> x=0;<br /> }<br /> }<br /> if (k==5) {<br /> y=0;<br /> }<br /> }<br /> }<br /> // Un poco de delay para que no sea tan rápido<br /> delay(70);<br />}<br /></pre>Federicohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.com0tag:blogger.com,1999:blog-5836239621084678817.post-58875235924711725982007-11-11T00:01:00.000-03:002007-11-11T12:41:09.162-03:00PresentaciónDescubrí <a href="http://www.processing.org/">Processing</a> hace unos meses gracias a una <a href="http://www.painstasis.com.ar/">compañera de trabajo</a>, mientras intentaba reencontrar la emoción que me brindaba la programación antes de que se convirtiera en mi herramienta de trabajo.<br />Mi intención es hacer de este blog una suerte de sandbox de mis experiencias en el aprendizaje de este lenguaje. Espero que, además de reflejar los adelantos que vaya haciendo, sirva como forma de intercambio de ideas y experiencias.Federicohttp://www.blogger.com/profile/04435533080416309493noreply@blogger.com1