<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>diario de processing</title>
	<atom:link href="http://ddpde.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ddpde.wordpress.com</link>
	<description>del programador autodidacta</description>
	<lastBuildDate>Wed, 12 Aug 2009 21:47:57 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ddpde.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>diario de processing</title>
		<link>http://ddpde.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ddpde.wordpress.com/osd.xml" title="diario de processing" />
	<atom:link rel='hub' href='http://ddpde.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Capítulo 8: Funciones.</title>
		<link>http://ddpde.wordpress.com/2009/07/16/capitulo-8-funciones/</link>
		<comments>http://ddpde.wordpress.com/2009/07/16/capitulo-8-funciones/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 02:54:37 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Boolean]]></category>
		<category><![CDATA[char]]></category>
		<category><![CDATA[definición]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[int]]></category>
		<category><![CDATA[modularidad]]></category>
		<category><![CDATA[pestañas]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=425</guid>
		<description><![CDATA[Anteriormente mencionamos el concepto de modularidad, y de cómo nos ayudaría a mantener nuestro código legible. En esta lección nos introduciremos a un primer nivel de modularidad que nos permita limpiar nuestro código del ejemplo del capítulo 7 para obtener un sketch más legible y fácil de arreglar. Más adelante vendrán otras formas más sofisticadas, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=425&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Anteriormente mencionamos el concepto de <strong>modularidad</strong>, y de cómo nos ayudaría a mantener nuestro código legible. En esta lección nos introduciremos a un primer nivel de modularidad que nos permita limpiar nuestro código del ejemplo del capítulo 7 para obtener un <em>sketch </em>más legible y fácil de arreglar. Más adelante vendrán otras formas más sofisticadas, pero esta es una suerte de base de todas ellas.</p>
<p><span id="more-425"></span></p>
<h2>Funciones.</h2>
<p>Las funciones, en los lenguajes de programación son bloques de instrucciones que pueden ser llamadas para obtener ciertos resultados requeridos en nuestro programa cuantas veces sea necesario. Por otro lado escribir funciones en nuestro software nos ayuda a implementar una estructura más organizada en nuestro código y a permitirnos leerlo posteriormente con más claridad, y, eventualmente, facilita encontrar pulgas en el código que interrumpan el funcionamiento correcto del programa.</p>
<p>Para utilizar una función esta debe ser definida previo a su llamada. Las funciones en <em>Processing </em>de definen así.</p>
<pre>tipoDeRetorno nombreDeLaFuncion(argumentos) {
//código ejecutable de la función o;
llamadasAOtrasFunciones();
}</pre>
<p>Todas las funciones retornan al programa algún un tipo de datos (tipo de Retorno). Podemos tener funciones que retornan números int con una definición como:</p>
<pre>int calcular(int pre) {
pre = pre * pre;
return pre;
}</pre>
<p>Lo que esto significa es que esta función al ser llamada a esta función retorna al programa un número entero igual al cuadrado del número que se le pasó a la funcion en la llamada. Para comprobar que la funcion sirve la ejecutamos en <em>Processing</em>:</p>
<pre>//crea una variable
int num = 5;

void setup() {
//introduce el valor de num en la funcion calcular() y luego le agisna el resultado a num
num = calcular(num);
//al final imprime en la consola el valor nuevo en num
println(num);
}

//la funcion calcular recibe un argumento de tipo int
int calcular(int pre) {
//luego lo multiplica por si mismo y lo asigna a pre
pre = pre * pre;
//la funcion retorna el valor almacenado en pre
return pre;
}</pre>
<p>Este ejemplo en particular no presenta mayir utilidada a nuestros propósitos por ahora pero muy posiblemente utilizaremos funciones propias parecidas a esta en el futuro, muy probablemente mas complejas que esta.</p>
<p>Podemos definir funciones que devuelvan datos <em>float</em>, <em>String</em>, <em>char</em>, <em>int </em>o <em>Boolean</em>, sólo hay que cuidar que utilizamos adecuadamente cada tipo de función según su tipo de datos de retorno.</p>
<p>En <em>Processing </em>hay aún un tipo de datos de retorno más importante para nosotros como programadores de gráficos: void. cuando ponemos void <code>setup() { ... }</code> en nuestro <em>sketch </em>no estamos haciendo nada más que llamar una función que no devuelve datos como las funciones normales, sino que influye más globalmente ahí donde se la llama. Podemos declarar tantas funciones void, int, float o cualquier otro tipo de retorno como queramos, siempre y cuando estas sean únicas.y con una cantidad de argumentos que recibe establke y no cambiante en cada función.</p>
<p>Los argumentos que recibe una función es lo que está en medio de los paréntesis en la definición de la función. La definición int <code>calcular(int pre) { ... } </code>define una función llamada calcular que recibe un argumento y retorna un número entero al final de su ejecución. Posibles usos de <code>calcular()</code> son: <code>calcular(5);</code> <code>calcular(100);</code> <code>calcular(347);</code><br />
Calcular no puede recibir dos argumentos: <code>calcular(27,34);</code> no es una expresión válida y <em>Processing </em>lo indicará como un error en el área de mensajes. para poder usar <code>calcular(27,34);</code> es necesario hacer una nueva definición:</p>
<pre>//la funcion calcular recibe dos argumentos de tipo int
int calcular(int pre1, int pre2) {
//luego los multiplica entre sí
pre1 = pre1 * pre2;
//y la funcion retorna el valor almacenado en pre1
return pre1;
}</pre>
<p>¡De hecho, las dos definiciones diferentes de la función <code>calcular()</code> pueden coexistir en el mismo <em>sketch </em>sin provocar el más mínimo problema!</p>
<pre>//crea una variable
int num = 5;

void setup() {
//introduce el valor de num en la funcion calcular() y luego le agisna el resultado a num
num = calcular(num);
//al final imprime en la consola el valor nuevo en num
println(num);
num = calcular(num,20);
println(num);
}

//la funcion calcular recibe un argumento de tipo int
int calcular(int pre) {
//luego lo multiplica por si mismo y lo asigna a pre
pre = pre * pre;
//la funcion retorna el valor almacenado en pre
return pre;
}

//la funcion calcular recibe dos argumentos de tipo int
int calcular(int pre1, int pre2) {
//luego los multiplica entre sí
pre1 = pre1 * pre2;
//y la funcion retorna el valor almacenado en pre1
return pre1;
}</pre>
<p>Esta modificación del <em>sketch </em>nos lanzará los valores 25 y 500 en el área de la consola de texto, comprobando que dos funciones con el mismo nombre pueden estar en el mismo <em>sketch </em>sin presentar problemas, siempre y cuando la cantidad de argumentos que reciba cada definición sea diferente <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><code>size(300,200);</code> es una llamada a la función <code>size()</code> de <em>Processing </em>que recibe dos argumentos, uno para el ancho de la ventana y uno para el alto. De igual forma que en el ejemplo anterior, <em>Processing </em>tiene en su biblioteca central funciones que reciben diferentes cantidades de argumentos. Por ejemplo <code>fill()</code> puede recibir uno, dos, tres, y cuatro argumentos, y en cada llamado diferente hace cosas diferentes.</p>
<p><code>fill(Gr);</code> con un argumento, hace escalas de grises.</p>
<p><code>fill(Gr,A);</code> con dos argumentos, controla el relleno gris y la transparencia del color o Alfa.</p>
<p><code>fill(#RGB,A);</code> con dos argumentos, el primero de estos en RGB-HEX, controla el color RGB más el canal Alfa</p>
<p><code>fill(R,G,B);</code> con tres argumentos, controla cada color por separado en modo estándar de color (R,G,B)</p>
<p><code>fill(R,G,B,A);</code> con cuatro argumentos, controla cada color de relleno por separado en el modo estándar RGB y el canal Alfa o transparencia.</p>
<p>Nuestras funciones pueden aprovechar esta funcionalidad nativa de <em>Processing </em>para tener variantes de la misma función que responden diferente según la cantidad de argumentos que se ingresan en las llamadas a esta.</p>
<h3>Ejemplo práctico.</h3>
<p>El ejemplo del capítulo anterior reescrito con funciones. Nótese el reducido tamaño de <code>draw()</code>. Las diferentes secciones del programa están definidos más abajo. <code>draw()</code> entonces se dedica a hacer llamadas más complejas. limpiando mucho el área de trabajo. Si pasa que la bola no se mueve, sólo tenemos que buscar la función que realiza el cálculo de las posiciones nuevas en cada ciclo y revisar si tiene una pulga que deba ser eliminada.</p>
<pre>

<div id="attachment_434" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_8_1.png"><img class="size-thumbnail wp-image-434" title="La bola rebota correctamente con el código fuente correctamente modularizado." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_8_1-150x150.png" alt="La bola rebota correctamente con el código fuente correctamente modularizado." width="150" height="150" /></a><p class="wp-caption-text">La bola rebota correctamente con el código fuente correctamente modularizado.</p></div>

//variables:
int diam = 30;
float posX = 100;
float posY = 0;
float velX = 3;
float velY = 0;
int voltea = -1;
int tope = -10000;
float friccion = 0.95;
float gravedad = 1;
void setup() {
size(300,300);
frameRate(30);
smooth();
ellipseMode(CENTER);
background(50);
}

/*un muy reducido draw()*/
void draw() {
background(50);
//llamadas a funciones "custom"
dibujaBola();
movimiento();
pngexp();
}

/*transformamos todos los comandos que dibujan
la bolita en una funcion modular fuera de draw()*/
void dibujaBola() {
posX = constrain(posX, diam/2, width-diam/2);
posY = constrain(posY, -1000, height-diam/2);
stroke(255);
fill(abs(velY*15),abs(velY*3),0);
ellipse(posX, posY, diam, diam);
}

/*La funcion que controla el movimiento
de la bolita está también fuera de draw()*/
void movimiento() {
//llamada a la funcion posicion()
//desde dentro de otra funcion:
posicion();
//control de colisiones con los bordes:
if (posX &gt; width-diam/2 || posX &lt; diam/2) {
 velX = velX * -friccion;
}
else if (posY &gt; height-diam/2 || posY &lt; tope) {
 velY = velY * -friccion;
 velX = velX * friccion;
 }
}

//La funcion que calcula la siguiente posicion de la bola
//es llamada desde movimiento() para realizar su tarea.
void posicion() {
posX = posX + velX;
velY = velY + gravedad;
posY = posY + velY;
}

/*El exportador de imagenes esta fuera tambien
conservando su declaracion condicional este se ejecuta
solo cuando se presiona el mouse dentro de la ventana del sketch*/
void pngexp() {
if (mousePressed) {
saveFrame("Capitulo_8_1.png");
}
}</pre>
<p>Este programa es extenso visualmente, pero no es mucho más largo que el proyecto progenitor del capítulo anterior. Sin embargo, a pesar de ser más extenso en más legible, y los comentarios en cada sección del código clarifican lo que hace esa sección muy bien.</p>
<p>Podemos llevar el ejemplo aún más allá demostrando una característica de <em>Processing </em>que nos ayuda a dividir más claramente nuestros programas en módulos: las perstañas del editor.</p>
<p>Como vimos en el paseo por la interfaz de <em>Processing</em>, en la barra de pestañas hay un pequeño icono con una flecha. Al hacer click sobre esta aparece un menú de edición de pestañas. Si seleccionamos &#8220;New Tab&#8221; el área de mensajes se tornará amarilla y nos presentará un diálogo donde introduciremos el nombre de la nueva pestaña; acto seguido hacemos click en ok o presionamos ENTER y, así de simple, nuestra pestaña está creada. Si presionamos <strong>Ctrl + K</strong>, <em>Processing </em>nos mostrará la carpeta del proyecto y dentro de ella ahora veremos dos documentos .pde, cada uno con el nombre de una pestaña. Cada uno de estos documentos contiene el código de una pestaña y solamente ese código. Cuando entremos a estudiar Classes, la utilidad de esta característica saltará a la vista. Por ahora podemos copiar todas nuestras funciones en otra pestaña o varias de ellas, separándolas por tipo de funciones que es precisamente lo que yo he hecho. Cuando <em>Processing </em>ejecuta el <em>sketch </em>todo es juntado como si lo hubiésemos escrito en un solo .pde sin importar la separación del código. Podemos aumentar la legibilidad del código con pocos pasos, separando unas cosas de otras.</p>
<h2>Suma:</h2>
<p>Partiendo el programa en módulos logramos una claridad insospechada, y, aún más importante que la legibilidad es el ailamiento de fallas a secciones pequeñas, de revisión rápida en caso de que ocurra un error en una parte del código. La modularización de los programas facilita las tareas de despulgue y revisión de errores de todo tipo Sumado a esto, la posibilidad de partir nuestro código en diferentes documentos permite la portabilidad de cada trozo de código por separado. Veremos mucho más sobre reciclaje de código más adelante cuando entremos en el mundo de los Classes.</p>
<blockquote><p>¡Descarga el código fuente de este tutorial!<br />
[download id="6" format="1"]</p></blockquote>
<p>Déjanos feedback, preguntas o infórmanos de cualquier error en este post dejando un comentario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong> </strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/425/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=425&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/16/capitulo-8-funciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_8_1-150x150.png" medium="image">
			<media:title type="html">La bola rebota correctamente con el código fuente correctamente modularizado.</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 7: Declaraciones Condicionales.</title>
		<link>http://ddpde.wordpress.com/2009/07/16/capitulo-7-declaraciones-condicionales/</link>
		<comments>http://ddpde.wordpress.com/2009/07/16/capitulo-7-declaraciones-condicionales/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 02:21:31 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[!]]></category>
		<category><![CDATA[!=]]></category>
		<category><![CDATA[&&]]></category>
		<category><![CDATA[>]]></category>
		<category><![CDATA[>=]]></category>
		<category><![CDATA[==]]></category>
		<category><![CDATA[and]]></category>
		<category><![CDATA[constrain()]]></category>
		<category><![CDATA[else]]></category>
		<category><![CDATA[else if]]></category>
		<category><![CDATA[gravedad simulada]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[not]]></category>
		<category><![CDATA[operadores lógicos]]></category>
		<category><![CDATA[operadores relacionales]]></category>
		<category><![CDATA[or]]></category>
		<category><![CDATA[||]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=424</guid>
		<description><![CDATA[Cuando nuestros programas comienzan a crecer en complejidad y más cosas comienzan a ocurrir a la vez, necesitamos empezar a controlarlas a todas ellas separadamente. El problema es que no tenemos tres brazos para controlar tres bolitas en pantalla que deberían moverse por cuenta propia, y mucho menos podremos hacerlo para cada una cuando haya [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=424&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cuando nuestros programas comienzan a crecer en complejidad y más cosas comienzan a ocurrir a la vez, necesitamos empezar a controlarlas a todas ellas separadamente. El problema es que no tenemos tres brazos para controlar tres bolitas en pantalla que deberían moverse por cuenta propia, y mucho menos podremos hacerlo para cada una cuando haya mil de estas en la ventana de nuestro sketch.</p>
<p>En los últimos capítulo hemos visto el empleo de una estructura de control que requiere de una condición para ejecutarse. Acá estudiaremos esta estructura con más detenimiento. Probando algunas posibilidades creativas que se pueden lograr con tres instrucciones simples.</p>
<p><span id="more-424"></span></p>
<h2>Condiciones:</h2>
<p>Puede que ahora cada uno quiera crear su propio mundillo en la computadora, y esto es muy comprensible; una vez que vimos que el movimiento es relativamente simple de lograr nuestro impulso será quere más movimiento, más objetos, y, tal vez, más realismo.</p>
<p>Nuestro ejemplo de este capítulo es simple, pero requiere comprender el funcionamiento del mundo físico para traducirlo en un modelo que la computadora entienda y ejecute como nosotros mismos lo esperamos.</p>
<p>Sin embargo antes de sumergirnos en el mundo &#8216;condicionado&#8217; debemos entender unas cuantas operaciones lógicas que nos ayudarán cuando creemos nuestras propias condiciones a cumplirse:</p>
<h3>Operadores Relacionales:</h3>
<p>En el ejemplo del capítulo anterior la declaración condicional que verificaba el valor de posX lo hacía esperando a que este alcanzara un valor mayor o igual al ancho de la ventana del sketch:</p>
<pre>if ( posX &gt;= width ) {
posX = 0;
}</pre>
<p>Esta es una declaración condicional muy simple que se repite en cada ciclo del programa y su funcionamiento puede ser descrito como sigue: &#8220;Al entrar en este bloque de código primero compara el valor de posX con el del ancho de la ventana; si el valor de posX es mayor o igual que el ancho de la ventana, ejecutar el código dentro de los corchetes; de lo contrario, si el valor de posX es menor que el ancho de la ventana, saltar el código por ejecutar&#8221;.</p>
<p>La lógica de estas declaraciones es simple y directa, el código dentro de los corchetes no se ejecuta hasta que la condición se cumple. Como en nuestro ejemplo del capítulo anterior el valor de posX aumentaba invariablemente en 1 con cada ciclo del <code>draw()</code>, era de espoerarse que después de 300 cuadros este llegaría a ser igual al ancho de la ventana, cuando el cuadrado alcanzaba el lado derecho de esta. La condición se cumplía entonces y el código dentro de los corchetes se ejecutaba, devolviendo la variable posX a su valor inicial.</p>
<p>En esta declaración utilizamos un operador relacional; esto es que analiza la relación entre dos valores diferentes, en ese caso, el valor en aumento de posX con el valor constante del ancho de la ventana. En profundidad la declaración condicional es una verificación de verdad o falsedad: Cuando el programa llega a la declaración condicional checa el contenido de los paréntesis <code>( posX &gt;= width )</code> para comprobar si la condición puesta ahí se cumple de acuerdo con el valor que el programa almacenó en la variable posX; cuando la condición se cumple la condición retorna true (verdadera) y el código entre los corchetes se ejecuta; cuando la condición no se cumple la expresión retorna false (falso) y el código entre los corchetes es ignorado. Estas evaluaciones son efectuadas por la computadora una y otra vez, en cada vuelta de <code>draw()</code> sin importar si la condición se cumple o no.</p>
<p>Los operadores relacionales son casi siempre necesarios en las declaraciones condicionales, aunque estas se pueden verificar con variables tipo Boolean que cambien de estado a partir de interacciones en el programa o desde fuera de este. En un sentido estricto Las declaraciones condicionales son declaraciones <em>Boolean </em>en el que el resultado de la expresión busca un resultado no numérico sino de verdadero o falso. Esto es, que cada vez que la función del ejemplo se ejecutaba</p>
<p>Los operadores relacionales son los siguientes:</p>
<ul>
<li><code>&lt;</code> menor que</li>
</ul>
<ul>
<li><code>&gt; </code> mayor que</li>
</ul>
<ul>
<li><code>&lt;=</code> menor o igual que</li>
</ul>
<ul>
<li><code>&gt;=</code> mayor o igual que</li>
</ul>
<ul>
<li><code>==</code> igual que</li>
</ul>
<ul>
<li> <code>!= </code> diferente de (en sentido literal &#8220;no igual&#8221;)</li>
</ul>
<p>Estos operadores se usan según los requerimientos de nuestro programa o según nos convenga a nosotros y la forma en que resolvamos el problema, porque como veremos más adelante las declaraciones condicionales se pueden escribir de diferentes formas.</p>
<h3>Operadores Lógicos:</h3>
<p>Un tipo más de operadores que nos ahorrarán trabajo son los operadores lógicos. Estos funcionan para encadenar varias operaciones relacionales en las que se comparan variables o eventos diferentes en una sola línea de código, podemos, por ejemplo unir dos condiciones diferentes para tener nuevas condiciones que puedan cumplirse para que el cuadrado sea reiniciado a cero. Remplace la declaración condicional del ejemplo del capítulo anterior con esta y además de esperar a que el cuadrado llegue al lado derecho de la ventana, de clicks antojadizos sobre la ventana del sketch cuando se esté ejecuando:</p>
<pre>if (posX &gt;= width || mousePresssed) {
posX = 0;
}</pre>
<p>Lo que hicimos en esta variación del código fue encademar a la condición de evaluar posX, la condición de evaluar si el mouse ha sido presionado durante cualquier momento de la ejecución. El operador || , que significa OR (&#8220;O&#8221; disyuntivo: [esto O esto...]), y el programa lo interpreta, en palabras simples, como &#8220;Si el valor de posX es mayor o igual que el ancho de la ventana Ó el mouse es presionado, reiniciar posX a 0&#8243;. El operador OR busca por cualquiera de las dos condiciones para reiniciar el valor en la variable posX; cuando cualquiera de las dos condiciones se cumple, la variable posX es reiniciada, sea que el cuadrado llegue al lado derecho de la ventana depués de 300 ciclos, o que en cualquier momento uno presione el mouse. Nótese que combinamos dos tipos diferentes de datos, una operación matemástica comparativa con un dato boolean que es true cuando el mouse es presionado, Estas declaraciones son tan válidas como deseables, sobre todo si el objetivo es hacer programas interactivos e interesantes.</p>
<p>Los operadores lógicos son tres:</p>
<ul>
<li><code>||    OR    "O"    esto o aquello</code></li>
</ul>
<p>busca que cualquiera de las condiciones se cumplan, sin importar el orden o el moemento en que lo hagan. Cualquier condición se puede cumplir, separadamente en el tiempo. cuando al menos una se cumple, if retorna true y el código se ejecuta</p>
<ul>
<li><code>&amp;&amp;    AND:    "Y"    esto y aquello</code></li>
</ul>
<p>busca que las dos condiciones a ambos lados del operador se cumplan al mismo tiempo, si una no se cumple el código entre los corchetes no se ejecuta. Cuando las dos condiciones se cumplen if retorna true y el código se ejecuta.</p>
<ul>
<li><code>!     NOT:    "NO"    esto no se cumple</code></li>
</ul>
<p>Se usa de manera que el no cumplimiento de una condición retorna true, esto puede parecer confuso pero en el futuro ahondaremos en algún ejemplo que use esta lógica. Su uso es más claro con datos de tipo Boolean como argumentos condicionales.</p>
<p>De aquí en adelante seguiremos isando estos dos grupos de operadores, Relacionales y Lógicos, para ir añadiendo complejidad y autonoomía y automatización a los objetos en pantalla.</p>
<h2>if () {} else if () {} else {}</h2>
<p>La esturctura if busca entre la condiciones dadas por el cumplimiento de estas para ejecutar el código entre los corchetes y como veremos a continuación puede contener varias declaraciones de diferentes condiciones. Una estructura if completa se ve así:</p>
<pre>if (condicionesACumplir) {
//si estas condiciones se cumplen
//ejecuta este código
} else if (otrasCondiciones) {
//si las primeras condiciones no se cumplen
//pero estas nuevas condiciones se cumplen
//ejecuta este otro código
} else {
//si nada de lo anterior se cumplió
//entonces ejecuta este código
}</pre>
<p>En nuestra declaración condicional del ejemplo anterior no utilizamos else, puesto que no era necesario, sin embargo pudimos escribir el aumento y el reinicio de posX de esta otra forma y habría sucedido exactamente lo mismo:</p>
<pre>if (posX &gt;= width) {
posX = 0;
} else {
posX = posX + 1;
}</pre>
<p>&#8220;Si el valor almacenado en posX es mayor o igual al ancho de la ventana, reinicia posX a 0; si no, suma 1 a posX&#8221;</p>
<p>La claridad del código aumenta, ya que tenemos en la misma declaración condicional todo el código necesario para mover el cuadrado de un lado a otro. Podemos reescribir muestro ejemplo de más arriba con la interacción del mouse así:</p>
<pre>if (posX &gt;= width) {
posX = 0;
} else if (mousePressed) {
posX = 0;
} else {
posX = posX + 1;
}</pre>
<p>Con cada evaluación aparte. El problema es que nos complica un poco el código y es mejor como lo hicimos a la primera; evaluando dos posibilidades al mismo tiempo, unidas en la misma línea por un OR.</p>
<blockquote><p>Actividad:<br />
Reescriba el ejemplo con interacción del mouse para que posX sea reiniciada cuando el valor en esta sólo sea mayor que el ancho de la pantalla Y el mouse sea presionado. Las dos condiciones deben cumplirse al mismo tiempo para que posX sea reiniciado.</p></blockquote>
<h3>Gravedad simulada:</h3>
<p>En este capítulo utilizaremos todo lo que hemos aprendido hasta ahora para simular un sistema simple con gravedad simulada. Pondremos una bolita en nuestro pequeño universo bidimensional y la lanzaremos para que se detenga por su propia interacción con el medio.</p>
<p>Cuando estamos ante la simulación de la realidad las cosas se pueden poner un poco más complicadas, pero con orden en nuestro código todo se vuelve más fácil. Primero necesitamos un ambiente y un par de variables para comenzar. Utilizaremos sobre todo variables tipo float, porque los cálculos requieren más precisión que en los ejemplos anteriores.</p>
<p>Nuestro sketch teminado luce así:</p>
<pre>

<div id="attachment_428" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_7_1.png"><img class="size-thumbnail wp-image-428" title="La nola cae acelerando y sube desacelerando." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_7_1-150x150.png" alt="La nola cae acelerando y sube desacelerando." width="150" height="150" /></a><p class="wp-caption-text">La nola cae acelerando y sube desacelerando.</p></div>

//variables:
int diam = 30;          //diametro de la bola
float posX = 100;
float posY = 0;
float velX = 3;
float velY = 0;
int voltea = -1;
//el tope de la ventana
int tope = -10000;//variables de la física de nuestro mundillo
float friccion = 0.95;
float gravedad = 1;
void setup() {
size(300,300);
frameRate(30);
smooth();
ellipseMode(CENTER);
background(50);
}
void draw() {
posX = constrain(posX, diam/2, width-diam/2);
posY = constrain(posY, -1000, height-diam/2);
//refresca el fondo
background(50);
stroke(255);
fill(120,posX/2,posY);
ellipse(posX, posY, diam, diam);
//mueve la bola horizontalmente
posX = posX + velX;

//aumenta la velocidad vertical en cada ciclo de draw
velY = velY + gravedad;
posY = posY + velY;//Condicional:
//si la bolita toca cualquiera de los bordes de la ventana
//invertir la velocidad para que se mueva en sentido contrario
if (posX &gt; width-diam/2 || posX &lt; diam/2) {
velX = velX * -friccion;
}
//además, si la bola toca el fondo de la ventana
//invertir el valor de la velocidad
else if (posY &gt; height-diam/2 || posY &lt; tope) {
velY = velY * -friccion;
velX = velX * friccion;
}
}</pre>
<p>Este sketch puede parecer un poco intimidante pero si miran el código detenidamente verán que sólo hay una función nueva al comienzo de <code>draw()</code> la cual todo lo que hace es evitar que la bola se dibuje fuera de la ventana; esto para que el rebote sea fiel al borde de la ventana.</p>
<p>En profundidad lo que hicimos fue dibujar una elipse en las posiciones posX y posY con diámentro diam y luego de esto empezamos a operar posX y posY para que nos den la posición que se usará en el próximo ciclo de <code>draw()</code> La nueva posición resulta de sumar la posición actual con la velocidad en cada círculo. Pero recordemos que la gravedad acelera las cosas, entonces se usa la variable gravedad para calcular la velocidad en aumento de la bolita antes de pasarle este valor al cálculo de la posición.</p>
<p>La declaración condicional, que ocupa la segunda mitad de nuestro loop <code>draw()</code> se encarga de asegurar que las colisiones con los bordes de la ventana sucedan.</p>
<pre>if (posX &gt; width-diam/2 || posX &lt; diam/2) {
velX = velX * -friccion;
}
else if (posY &gt; height-diam/2 || posY &lt; tope) {
velY = velY * -friccion;
velX = velX * friccion;
}</pre>
<p>Esto significa: &#8220;si el valor en posX es mayor o igual que el ancho de la ventana menos el radio de la bola, O, si el valor en posX es menor que el radio de la bola, invertir el valor de la velX sustrayendo el 5% de la velocidad por concepto de fricción; hacer esto si cualquiera de las dos condiciones se cumple; sin importar si alguno se cumple o no pasar al siguiente paso: si el valor en posY es mayor que la altura de la ventana, invertir el valor de velY y sustraer 5% de la velocidad por concepto de fricción y hacer lo mismo con velX, si ninguna de las condiciones anteriores se cumple, ignorar los contenidos de los corchetes y seguir con el resto del programa&#8221;.</p>
<p>La sustracción de 5% de la velocidad al multiplicar <code>velX</code> y <code>velY </code>por friccion (0.95) garantiza que la bola se detendrá.</p>
<blockquote><p><img class="alignright size-thumbnail wp-image-429" title="Sin el fondo actualizándose constantemente." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_7_2-150x150.png" alt="Sin el fondo actualizándose constantemente." width="150" height="150" />Actividad:<br />
- Pruebe este ejemplo con un valor de friccion de 1.<br />
- Pruebe este ejemplo quitando la actualización del fondo para que la bola deje un rastro.<br />
- Pruebe con diferentes valores de inicializacion en las variables al inicio de sketch. Es posible hacer arrancar la bola a gan velocidad y obtener resultados muy diferentes.</p></blockquote>
<p>De acuerdo a la variable <code>int tope = -10000;</code> la expresión:</p>
<pre>else if (posY &gt; height-diam/2 || posY &lt; tope) {
velY = velY * -friccion;
velX = velX * friccion;
}</pre>
<p>establece que el tope donde la bola rebotará hacia abajo está 10000 píxeles por encima del borde superior de la ventana. ¿Recuerdan que las coordenadas negativas podrían ser útiles? Bueno aquí tienen el primer ejemplo, le ponemos un tope bien alto a la bola para que esta pueda rebotar fuera de la ventana pero sólo en sentido vertical y por encima de esta. Aún si la bola está en este espacio fuera de la ventana, las condiciones que posimos para el comportamiento de posX no dejarán que la bola avance en sentido horizontan más allá de el amcho de la ventana.</p>
<blockquote><p>Actividad:<br />
Intente inicializando la variable velY en un valor negativo alto como -50 y vea los resultados del experimento <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<h2>Suma:</h2>
<p>Las declaraciones condicionales agregan funcionalidad automatizada a nuestro software, esta y otras estructuras que veremos más adelante aportan funcionalidad extendida y mejores prestaciones para generar programas interactivos y con mayores cantidades de datos, objetos y comandos.</p>
<blockquote><p>¡Descarga el código fuente de este tutorial!<br />
[download id="5" format="1"]</p></blockquote>
<p>Déjanos feedback, preguntas o infórmanos de cualquier error en este post dejando un comentario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong> </strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/424/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/424/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/424/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/424/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/424/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/424/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/424/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/424/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=424&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/16/capitulo-7-declaraciones-condicionales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_7_1-150x150.png" medium="image">
			<media:title type="html">La nola cae acelerando y sube desacelerando.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_7_2-150x150.png" medium="image">
			<media:title type="html">Sin el fondo actualizándose constantemente.</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 6: Movimiento y Animación.</title>
		<link>http://ddpde.wordpress.com/2009/07/16/capitulo-6-movimiento-y-animacion/</link>
		<comments>http://ddpde.wordpress.com/2009/07/16/capitulo-6-movimiento-y-animacion/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 09:09:30 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[animación]]></category>
		<category><![CDATA[draw()]]></category>
		<category><![CDATA[else]]></category>
		<category><![CDATA[frameRate()]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[loop]]></category>
		<category><![CDATA[mouseX]]></category>
		<category><![CDATA[mouseY]]></category>
		<category><![CDATA[movimiento]]></category>
		<category><![CDATA[rectMode()]]></category>
		<category><![CDATA[setup()]]></category>
		<category><![CDATA[smooth()]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[void]]></category>
		<category><![CDATA[{}]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=390</guid>
		<description><![CDATA[En el mundo real, las cosas se mueven según las leyes de la Física de formas predecibles (dejando por fuera la Energía Oscura y la Física Cuántica, claro&#8230;). En el mundo de la computación el movimiento se describe a partir de ecuaciones matemásticas, algunas simples, otras más complejas. En este capítulo estudiamos cómo comenzar a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=390&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En el mundo real, las cosas se mueven según las leyes de la Física de formas predecibles (dejando por fuera la Energía Oscura y la Física Cuántica, claro&#8230;). En el mundo de la computación el movimiento se describe a partir de ecuaciones matemásticas, algunas simples, otras más complejas. En este capítulo estudiamos cómo comenzar a poner en movimiento nuestros objetos en la pantalla.</p>
<p><span id="more-390"></span></p>
<h2>Movimiento:</h2>
<p>Para una computadora No existen las leyes de la física en su mundo virtual, hay que traducirlas a este dominio, para que la máquina pueda calcular el comportamiento de los objetos a partir de modelos matemáticos definidos por nosotros en el mundillo que estamos por crear. En ese sentido, la animación puede volverse un poco cansada de lograr, pero sus resultados son un premio a nuestro esfuerzo mucho más satisfactorio que simplemente dibujar círculos y rectángulos en pantalla.</p>
<p>Comenzaremos con un ejemplo muy simple pero gracioso: dibujar un círculo que sigue los movimientos del mouse. Para que este ejemplo funcione, debemos introducir nuevas funciones y estructura a nuestro código.</p>
<h3>void setup() {&#8230;}</h3>
<p><code>setup()</code> es nuestra función de inicialización para <em>sketches </em>que realizan tareas de animación, prepara todo el ambiente para lo que está por ocurrir. Hasta esta lección todo el código que hemos visto se ejecuta una sola vez y luego el programa se detiene y nos muestra los resultados en una ventana aparte del editor. Ahora, lo que haremos será construir un <em>sketch </em>que repite cíclicamente cálculos para refrescar la pantalla varias veces por segundo. <code>setup()</code> para nuestro nuevo campo, la animación, es como los <em>sketches </em>que hemos hecho hasta ahora, esta sección del <em>sketch </em>correrá una sola y nada más, sin más oportunidades de volverl a ejecutar su código una vez que ha comenzado la animación. La mayor ventaja que presenta <code>setup()</code> es que da estructura a nuestro código diciéndonos a nosotros ya la máquina que en efecto nos estamos preparando para una carga más fuerte de consumo de procesador que la exigida hasta ahora. dentro de <code>setup()</code> pondremos todas las inicializaciones necesarias (u opcionales) para entrar en la siguente etapa del <em>sketch</em>: el <strong>Loop </strong><code>draw()</code>.</p>
<h3>void draw() {&#8230;}</h3>
<p><code>draw()</code> es nuestra máquina de animación real, es una función que se llama una vez y se ejecuta cíclicamente sin fin, una y otra vez, hasta que le indiquemos que se detenga (con código o presionando el botón <em>cerrar</em> de la ventana del <em>sketch</em>). El código que pongamos dentro de <code>draw()</code> se ejecutará repetidamente, y entregará en pantalla actualizaciones de lo que sucede en el código a la velocidad suficiente como para hacernos creer que existe un movimiento real. La función <code>draw()</code> se ejecutará, predeterminadamente, 60 veces por segundo; esto quiere decir que veremos una animación muy fluida, ya que <code>draw()</code> nos entrega 60 cuadros por segundo, el doble de rápido que la televisión estándar en occidente. Esta rapidez también significa que <code>draw()</code> requiere bastante poder de procesador y que alguna computadora viejita podría verse en problemas para dibujar nuestras figuras. sin embargo esto no es problema para sistemas más nuevos, y por otra parte has opciones para resolver la carencia de un procesador poderoso.</p>
<p>Entonces nuestro código para animaciones lucirá más o menos así:</p>
<pre>//espacio para las variables

void setup() {
 //código de inicialización
 //del ambiente del sketch
}

void draw() {
 //código que anima las figuras;
 //lo que esté aquí adentro
 //se repite 60 veces por segundo
}</pre>
<p>Los corchetes ( <code>{}</code> ) son estrictamente necesarios, ya que dentro de ellos se encierran bloques de código con funciones muy diferentes entre sí. Arriba en el <em>sketch</em>, por convención y por amor a la claridad en el código de nuestros programas, pondremos las variables que necesite el programa para ejecutarse. Podemos ponerlas ahí o en el fondo del programa, después de todo el código ejecutable, el orden no es importante, lo importante es que escojamos un lugar y nos apeguemos a él manteniendo el orden por el bien de la legibilidad de nuestro código.</p>
<h2>Persiguiendo un ratón:</h2>
<p>Por regla general, no obligatoria, pero sí buena costumbre, los programadores experimentados (yo no soy uno de ellos) recomiendan que todo dato una vez nombrado sea convertido en una variable, así que comenzaremos por declarar las variables que necesitaremos en nuestro <em>sketch </em>de una vez.</p>
<h3>Variables:</h3>
<pre>int diametro = 30, posX = 0, posY = 0;</pre>
<p>En una sola línea he inicializado tres variables. Esto es posible porque las tres variables son del mismo tipo de datos: int, si necesitara una o más variables de tipo float necesitaría una línea más para declararla e inicializarla. Esta declaración es quivalente a esta:</p>
<pre>int dimetro = 30;
int posX = 0;
int posY = 0;</pre>
<p>Pero me ahorra el problema de tener que escribir unas cuantas palabra, lo cual es más cómodo que las tyres declaraciones separadas.</p>
<h3>setup()</h3>
<p>Una vez inicializadas estas variables pasamos al setup, donde pondremos las condiciones bajo las que se ejecutará nuestro código:</p>
<pre>//variables globales
int diametro = 30, posX = 0,posY = 0;

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
}</pre>
<h3>draw()</h3>
<p>Alcanzado este punto estamos listos para escribir nuestro loop <code>draw()</code> y en este caso todo lo que le indicaremos es que nos dibuje una y otra vez un círculo según los valores que le introduzcamos a la función <code>ellipse()</code></p>
<pre>

<div id="attachment_408" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_1.png"><img class="size-thumbnail wp-image-408" title="Círculo estático en (0,0)" src="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_1-150x150.png" alt="Círculo estático en (0,0)" width="150" height="150" /></a><p class="wp-caption-text">Círculo estático en (0,0)</p></div>

//variables globales
int diametro = 30, posX = 0,posY = 0;

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
}

void draw() {
 //código que anima las figuras;
 ellipse(posX,posY,diametro,diametro);
}</pre>
<p>Si corremos este <em>sketch </em>efectivamente tenemos un círculo dibujado donde lo estipulamos según las variables que declaramos al principio del <em>sketch</em>&#8230; pero no sucede nada, ni siquiera cuando pasamos el mouse encima de la ventana.</p>
<p>Eso es porque los valores que efectivamente pasa el mouse a las variables <code>mouseX </code>y <code>mouseY </code>no están siendo pasados a ninguna función u operación en el <em>sketch</em>. No tenemos que preocuparnos por declarar estas variables, Processing lo hace de gratis por nosotros, sólo tenemos que usarlas. Entonces haremos un par de operaciones donde se asigne el valor de <code>mouseX </code>a <code>posX </code>al inicio del loop, alterando el valor de posición horizontal y una operación similar para pasar el valor de <code>mouseY </code>a <code>posY </code>para controlar la posición vertical del círculo:</p>
<pre>

<div id="attachment_409" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_2.png"><img class="size-thumbnail wp-image-409" title="Círculo persigue-raton con rastro en ventana." src="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_2-150x150.png" alt="Círculo persigue-raton con rastro en ventana." width="150" height="150" /></a><p class="wp-caption-text">Círculo persigue-raton con rastro en ventana.</p></div>

//variables globales
int diametro = 30, posX = 0,posY = 0;

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
}

void draw() {
 //código que anima las figuras;
 //asigna los valores de posicion del mouse
 //a las variables que utiliza el circulo para ubicarse
 posX = mouseX;
 posY = mouseY;
 //dibuja el círculo en la pisicion actual del mouse
 ellipse(posX,posY,diametro,diametro);
}</pre>
<h3>background() en el loop draw()</h3>
<p>Finalmente tenemos nuestro circulo moviéndose por la pantalla, pero hay algo inesperado: el rastro del círculo persiguiendo el mouse permanece en pantalla. Este puede ser un efecto artístico muy interesante, pero fuera de lo deseable o indeseable que pueda resultar: ¿Por qué sucede esto?</p>
<p>Porque nuestra computadora es una máquina, sin intuición y hay que pensar como máquina para descifrar el problema, y el problema es que nosotros no fuimos específicos en indicarle a la computadora que cada vez que draw se repita lo primero que debe hacer es rellenar el fondo para crear un cuadro completamente nuevo:</p>
<pre>

<div id="attachment_410" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_3.png"><img class="size-thumbnail wp-image-410" title="El fondo se actualiza constantemente creando una animación y no una &quot;pintura&quot;." src="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_3-150x150.png" alt="El fondo se actualiza constantemente creando una animación y no una &quot;pintura&quot;." width="150" height="150" /></a><p class="wp-caption-text">El fondo se actualiza constantemente creando una animación y no una &quot;pintura&quot;.</p></div>

//variables globales
int diametro = 30, posX = 0,posY = 0;

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
}

void draw() {
 //refresca el fondo en cada ciclo
 background(255);
 //código que anima las figuras;
 //asigna los valores de posicion del mouse
 //a las variables que utiliza el circulo para ubicarse
 posX = mouseX;
 posY = mouseY;
 //dibuja el círculo en la pisicion actual del mouse
 ellipse(posX,posY,diametro,diametro);
}</pre>
<p>De hecho podemos simplificar más el programa quitando del medio las dos variables int para la posición del círculo enla ventana y tener un programa más corto y, posiblemente, eficiente:</p>
<pre>//variables globales
int diametro = 30;

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
}

void draw() {
 //refresca el fondo en cada ciclo
 background(255);
 //código que anima las figuras;
 //dibuja el círculo en la pisicion actual del mouse
 ellipse(mouseX,mouseY,diametro,diametro);
}</pre>
<p>Las variables del sistema son accesibles desde cualquier parete del programa puesto que son variables globales. Hablaremos en un capítulo futuro sobre el alcance o disponibilidad de variables a través de programas más extensos que este y con mayor cantidad de partes, pero por ahora sólo diremos que hay variables que pueden ser vistas sólo en ciertos lugares de un programa dependiendo de su uso y/o lugar de declaración.</p>
<h2>Movimiento automatizado:</h2>
<p>Nuestro pequeño círculo responde al movimiento del ratón, pero: ¿Qué tal si tenemos dos o más objetos en pantalla que queremos animar de diferentes formas? Usando el ejemplo con operaciones de asignación de variables reescribiremos el código para  que incluya un cuadrado que se mueva por su propia cuenta y le daremos también un giro al color de las figuras.</p>
<pre>

<div id="attachment_411" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_4.png"><img class="size-thumbnail wp-image-411" title="Círculo controlado por el mouse y cuadrado autómata." src="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_4-150x150.png" alt="Círculo controlado por el mouse y cuadrado autómata." width="150" height="150" /></a><p class="wp-caption-text">Círculo controlado por el mouse y cuadrado autómata.</p></div>

//variables globales
<strong>int diametro = 30, posX;   //re-declaramos posX para reutilizarla</strong>

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
<strong> rectMode(CENTER);    //dibuja los rectangulos desde el centro</strong>
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
}

void draw() {
 //refresca el fondo en cada ciclo
 background(255);
 //código que anima las figuras;
<strong> //modifica el color de relleno seun la posicion del mouse
 fill(mouseX,mouseY,100);</strong>
 ellipse(mouseX,mouseY,diametro,diametro);
<strong> //modifica el color de relleno segun la posX
 fill(posX);
 rect(posX,height/2,diametro,diametro);
 //añade 1 cada vez que el ciclo finaliza
 posX = posX +1;</strong>
}</pre>
<p>Nótese la operación matemática realizada sobre la variable de sistema height la cual ha sido dividida entre dos para colocar el cuadrado en el medio de la ventana, estas declaraciones son totalmente válidas (de hecho, deseables).</p>
<p>Lo que resulta es bastante curioso. Una vez que el loop <code>draw()</code> comienza, nada fuera de él se ejecuta (pronto veremos que esto puede cambiar) por lo tanto si al final de cada ciclo añadimos 1 a <code>posX</code>, cuando inicie el siguiente nuestro cuadrado debería dibujarse un píxel más a la derecha en la ventana puesto que el valor de <code>posX </code>va de 0 a 1, a 2, a 3, a 4, a 5, a 6&#8230; etc. A 60 cuadros por segundo nuestro cuadradito abandona la pantalla muy rápidamente, así que utilizaremos una función para ralentizar la frecuencia de los cuadros (lo cual nos ahorrará ciclos de processador también <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Finalmente incluímos una verificación condicional al final del <em>sketch </em>para regresar nuestro cuadrito a donde empezó en 0 en <code>posX</code>.</p>
<pre>//variables globales
int diametro = 30, posX;

void setup() {
 //código de inicialización
 size(300,300);      //ventana de 300x300 px
 ellipseMode(CENTER);//dibuja los circulos desde el centro
 smooth();           //gráficos suavizados
 background(255);    //fondo de la ventana blanco
 frameRate(30);      //refresca la ventana 30 veces por segundo
}

void draw() {
 //refresca el fondo en cada ciclo
 background(255);
 //código que anima las figuras;
 fill(mouseX,mouseY,100);
 ellipse(mouseX,mouseY,diametro,diametro);
 fill(posX);
 rect(posX,height/2,diametro,diametro);
 //si posX en mayor o igual que el ancho de la ventana...
 if (posX &gt;= width) {
 posX = 0;  //resetear posX a 0
 }
 else {  //si posX es cualquier otra cosa diferente...
 posX = posX +1;  //sumarle 1 a posX
 }
}</pre>
<p>Nuestro verificador condicional se ejecuta en cada vuelta de <code>draw()</code> en busca de que la condición puesta entre los paréntesis se cumpla, si esta no se cumple, ejecuta lo que está entre los conrchetes de else, y si se cumple ejecuta sus propios corchetes, lo cual en este ejemplo es resetear la variable <code>posX </code>a 0 si esta alcanza un valor mayor o igual que el del ancho de la ventana.</p>
<blockquote><p>Actividad:</p>
<p>Intente alterar el número que espera if para que el cuadro se mueva diferentes distancias. Puede también alterar el valor de reset para reiniciar el cuadrado en otras partes de la ventana.</p>
<p>Aplique operaciones similares sobre el eje Y del cuadrado con nuevas variables y operaciones condicionadas. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<h2>Suma:</h2>
<p>Estos son sólo dos ejemplos simples de movimiento automatizado en Processing, más ejemplos más complejos serán tratados en próximos capítulos. En este capítulo hemos visto el poder de las matemásticas más simples para crear movimiento en Procesing con objetos simples y fáciles de dibujar. El movimiento en Processing siempre se atiene a modelos matemáticos para describir diferentes fenómenos, la aceleración puede hacerse con una suma doble al final del <em>sketch </em>y una variable más para lograrlo, le propongo como reto, escribir ese simple código para lograr que el cuadrado acelere hacia la derecha y se devuelva de nuevo a 0 cuando toque el borde derecho.</p>
<blockquote><p>¡Descarga el código fuente de este tutorial!<br />
[download id="4" format="1"]</p></blockquote>
<p>Déjanos feedback, preguntas o infórmanos de cualquier error en este post dejando un comentario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong> </strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/390/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=390&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/16/capitulo-6-movimiento-y-animacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_1-150x150.png" medium="image">
			<media:title type="html">Círculo estático en (0,0)</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_2-150x150.png" medium="image">
			<media:title type="html">Círculo persigue-raton con rastro en ventana.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_3-150x150.png" medium="image">
			<media:title type="html">El fondo se actualiza constantemente creando una animación y no una &#34;pintura&#34;.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/capitulo_6_4-150x150.png" medium="image">
			<media:title type="html">Círculo controlado por el mouse y cuadrado autómata.</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Checando los cambios en cada actualización de PDE.</title>
		<link>http://ddpde.wordpress.com/2009/07/16/checando-los-cambios-en-cada-actualizacion-de-pde/</link>
		<comments>http://ddpde.wordpress.com/2009/07/16/checando-los-cambios-en-cada-actualizacion-de-pde/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 06:29:22 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[actualizaciones]]></category>
		<category><![CDATA[bugfixes]]></category>
		<category><![CDATA[cambios]]></category>
		<category><![CDATA[pde]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[revisiones]]></category>
		<category><![CDATA[revisions.txt]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=396</guid>
		<description><![CDATA[Descubrí que se pueden buscar los cambios de cada actualización en un archivo que Processing.org hace disponible con cada actualización; en el que salen listados los cambios hechos y las pulgas aniquiladas para ese release. Visten http://processing.org/download/revisions.txt para enterarse de las modificaciones, arreglos y nuevas cacacterísticas de cada actualización de Processing<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=396&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Descubrí que se pueden buscar los cambios de cada actualización en un archivo que Processing.org hace disponible con cada actualización; en el que salen listados los cambios hechos y las <em>pulgas aniquiladas</em> para ese release.</p>
<p>Visten <a href="http://processing.org/download/revisions.txt">http://processing.org/download/revisions.txt</a> para enterarse de las modificaciones, arreglos y nuevas cacacterísticas de cada actualización de Processing <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/396/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=396&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/16/checando-los-cambios-en-cada-actualizacion-de-pde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 5: Variables y Tipos de Datos.</title>
		<link>http://ddpde.wordpress.com/2009/07/15/capitulo-5-variables-y-tipos-de-datos/</link>
		<comments>http://ddpde.wordpress.com/2009/07/15/capitulo-5-variables-y-tipos-de-datos/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 03:55:48 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Boolean]]></category>
		<category><![CDATA[char]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[height]]></category>
		<category><![CDATA[int]]></category>
		<category><![CDATA[keyPressed]]></category>
		<category><![CDATA[keyReleased]]></category>
		<category><![CDATA[mousePressed]]></category>
		<category><![CDATA[mouseReleased]]></category>
		<category><![CDATA[mouseX]]></category>
		<category><![CDATA[mouseY]]></category>
		<category><![CDATA[print()]]></category>
		<category><![CDATA[println()]]></category>
		<category><![CDATA[screen.height]]></category>
		<category><![CDATA[screen.width]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[tipos de datos]]></category>
		<category><![CDATA[variables]]></category>
		<category><![CDATA[variables de sistema]]></category>
		<category><![CDATA[width]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=368</guid>
		<description><![CDATA[Como mencionábamos en un capítulo anterior, el mundo para un ser humano es entendible intuitivamente; Este se compone de imágenes, olores, sabores, sonidos y estímulos táctiles interpretados por nuestro cerebro de una forma predeterminada, y eso nos permite no preocuparnos por decodificar los datos, ya que esto sucede automáticamente, y por ello podemos concentrarnos en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=368&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Como mencionábamos en un capítulo anterior, el mundo para un ser humano es entendible intuitivamente; Este se compone de imágenes, olores, sabores, sonidos y estímulos táctiles interpretados por nuestro cerebro de una forma predeterminada, y eso nos permite no preocuparnos por decodificar los datos, ya que esto sucede automáticamente, y por ello podemos concentrarnos en la interpretación de esos estímulos y sus causas.</p>
<p>Para las computadoras el mundo no se trata de interpretaciones, sino de datos crudos, altamente abstractos. Las variables nos ayudan a decirle a la máquina, punto por punto lo que deseamos que ocurra con nuestro skecth.</p>
<p><span id="more-368"></span></p>
<h2>Variables.</h2>
<p>Para funcionar, nuestro programa debe reservar en la memoria de la computadora espacio para todas las instrucciones que le vamos a dar. Hasta ahora, nuestros <em>sketches </em>han sido muy simples y directos, pero cuando nuestro deseo es empezar a crear ambientes complejos, movimiento e interacción, las cosas funcionan en una manera completamente diferente, y uno de los primeros pasos que tomaremos será reservar espacio en memoria para poner esas instrucciines y datos nuevos que harán moverse y vivir a nuestras creaciones.</p>
<p>Las variables son, en el sentido más simple, espacios que reservamos en la memoria de la computadora para guardar datos. Podemos pensar en una variable como una gaveta vacía, en la que ponemos una cosa a la vez. Esta cosa puede ser reemplazada por otra o por una alteración de la misma cosa. En una variable sólo cabe una cosa a la vez. Podemos también pensar en nuestro programa o <em>sketch </em>como nosotros mismos frente al gavetero, tomando la cosa que hay dentro, alterándola y devolviéndola a la gaveta para reutilizarala, reemplazarla, modificarla o mostrarla a otra persona en otro momento futuro.</p>
<p>Las variables vienen en tipos diferenciados, con prorósitos según nos convenga durante el desarrollo de nuestro programa. Volveríamos entonces al tema de los <a href="http://0p0media.com/processing/2009/07/capitulo-1-principios-de-programacion-en-processing/#Tipos%20de%20datos:">Tipos de Datos</a>. Cada tipo diferente de variables nos puede servir para poner valores numéricos enteros, o con decimales, o letras, o cadenas de letras (básicamente). Podemos utilizar el poder de las variables para almacenar valores que son utilizados por instrucciones más complejas para lanzar un resultado o dibujar un círculo; por ejemplo:</p>
<pre>

<div id="attachment_370" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_1.png"><img class="size-thumbnail wp-image-370" title="Círculo dibujado con variables." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_1-150x150.png" alt="Círculo dibujado con variables." width="150" height="150" /></a><p class="wp-caption-text">Círculo dibujado con variables.</p></div>

/*
Este programa utiliza variables tipo "int"
para dibujar un círculo en el centro de la
ventana del sketch
*/

//variables
int centro = 150;
int diametro = 98;

//inicializacion
size(300,300);
smooth();

//el circulo
ellipse(centro,centro,diametro,diametro);</pre>
<p>El ejemplo anterior nos enseña el primer operador computacional que aprendemos en Diario de PDE: el operador de asignación [<code>=</code>] (un igual). Utilizamos este operador para asignar valores a variables del tipo que sean. El operador de asignación <strong>NO ES</strong> una declaración de igualdad. Las declaraciones o verificaciones de igualdad se hacen con el operador [<code>==</code>] (dos iguales seguidos). Esto puede parecer un poco confuso ahora, pero conforme uno se va acostumbrando a estar programando, la diferencia se vuelve natural. Las declaraciones de variables se pueden hacer de dos formas:</p>
<pre>//EN UNA LINEA
int centro = 150; //la variable es creada e inicializada de una vez

//EN DOS LINEAS
int diametro;    //esta linea crea la variable
diametro = 98;   //esta la inicializa</pre>
<p>Cualquiera de las dos maneras el válida y queda a criterio propio el uso de ellas. Es importante aclarar que una variable debe ser inicializada antes de ser usada en el programa. Inicializar la variable, como vimos arriba, se trata simplemente de asignarle un valor, aunque este vaya a cambiar en el programa luego. Una variable no se puede utilizar en otra función si no es rellenada previamente con algo.</p>
<h2>Tipos de Datos en detalle:</h2>
<h3>Datos &#8220;int&#8221;:</h3>
<p>las variables tipo int sólo almacenan números enteros, negativos o positivos. Estas no admiten que se les asignen valores numéricos con punto decimal. Un buen ejemplo del uso de este tipo de datos se hizo en el primer ejemplo de este capítulo con el dibujo de un círculo en el centro del <em>sketch</em>. Podemos hacerlo un poco más avanzado y reutilizar el ejemplo de una manera más sofisticada para producir coloraciones diferentes y otras formas en el mismo <em>sketch </em>a partir de unas pocas líneas más.</p>
<pre>

<div id="attachment_371" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_2.png"><img class="size-thumbnail wp-image-371" title="Variables utilizadas en los colores y el rectángulo." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_2-150x150.png" alt="Variables utilizadas en los colores y el rectángulo." width="150" height="150" /></a><p class="wp-caption-text">Variables utilizadas en los colores y el rectángulo.</p></div>

//VARIABLES
//declaracion en una sola linea
int centro = 150; //la variable es creada e inicializada de una vez

//declaracion en dos lineas
int diametro; //esta linea crea la variable
diametro = 98;//esta la inicializa

int val = 10;

//EJECUCION
size(300,300);
background(val*10);
smooth();

fill(val*21,val*13,val*8);
ellipse(centro,centro,diametro,diametro);
fill(val*5,val*16,val*20);
rect(diametro/2,val*13,val,diametro);</pre>
<p>Este ejemplo demuestra una habilidad más de <em>Processing</em>, la de operar matemásticamente las variables mientras dentro de las funciones. La llamada <code>fill(val*21,val*13,val*8)</code> es igual a <code>fill(210,130,80)</code>. Esto implementa cierto nivel de modularización en el programa. para alterar el color del fondo sólo tendré que cambiar el valor de <code>val</code> y no el de todos los valores pasados a la función <code>fill(val*21,val*13,val*8)</code>. Sin embargo esto también quiere decir que si cambio el valor de val, también cambiará el tamaño y color del rectángulo a la izquierda, ya que estas características de la fiigura dependen de <code>val</code> para darse.</p>
<h3>Datos &#8220;float&#8221;:</h3>
<p>Los datos <em>float </em>son valores numéricos con o sin punto decimal, lo cual les otorga una mayor precisión de cálculo que los valores <em>int</em>. Esto los hace aptos para tareas donde la precisión de los resultados es muy importante, como puede ser el cálculo de posiciones en 3D, en fractales, cambios situles y muy progresivos en la imagen y simulación de sistemas biológicos o caóticos, entre muchas otras aplicaciones. Los datos <em>int</em>, son más útiles cuando se quiere estableceruna posición absoluta, o para llevar cuentas exactas de eventos que nos sean informadas en pantalla o en la consola de texto.</p>
<p>Los datos <em>float </em>se declaran exactamente igual que los datos <em>int</em>:</p>
<pre>float fibo = 1.618;</pre>
<p>Utilizando una variable float podemos reescribir el ejemplo:</p>
<pre>

<div id="attachment_373" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_4.png"><img class="size-thumbnail wp-image-373" title="Rectángulo y fondo variado por fibo." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_4-150x150.png" alt="Rectángulo y fondo variado por fibo." width="150" height="150" /></a><p class="wp-caption-text">Rectángulo y fondo variado por fibo.</p></div>

//VARIABLES
int centro = 150;
int diametro;
diametro = 98;
int val = 10;

<strong>//una variable tipo Float
float fibo = 1.618;</strong>

//EJECUCION
size(300,300);
background(val*10,val*fibo,diametro/fibo);
smooth();

fill(val*21.3,val*13.1,val*8.9);
ellipse(centro,centro,diametro,diametro);
fill(val*5,val*16,val*20);
rect(20*fibo,val*13,diametro/fibo,diametro);</pre>
<p>Podemos emplear datos <em>float </em>para muchas de las funciones de <em>Processing </em>aún si estas sólo necesitan de in dato <em>int </em>para funcionar, ya que muchas de ellas convierten los valores a <em>int </em>automáticamente; cuando esto no sea así, el área de mensaje se pondrá roja y nos avisará que el tipo de datos que estamos tratando de pasar a la función no es válido para esta.</p>
<h3>Datos &#8220;char&#8221; y &#8220;String&#8221;:</h3>
<p>Los datos de texto se almacenan en variables tipo char y String; el primer tipo es para almacenar caracteres individuales y el segundo para almacenar cadenas de caracteres como oraciones completas o reordenamientos de caracteres. La declaración e inicialización de cada uno d eestos tipos es diferente a la de los datos numéricos y ligeramente diferentes entre sí:</p>
<pre>//almacena el caracter "!"
char letra = '!';
//almacenar una oracion completa
String mensaje = "el programa se ejecuto correctamente";</pre>
<p>Los datos char son muy útiles cuando se efectua análisis de texto, o cuando queremos generar arte ASCII, hay utilidades más sutiles que veremos en profundidad mucho más adelante. Los datos tipo String son muy útiles para almacenar cantidades de texto en pedazos relativamente grandes o muy grandes. Son especialmente útiles cuando realizamos revisiones activas de nuestro código al usar la función print o  println() que pone texto en la consola de texto.</p>
<p>Por ejemplo, podemos usar una variable String y una char para verificar que nuestro programa se ejecuta completo y correctamente así:</p>
<pre>

<div id="attachment_369" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_5.png"><img class="size-thumbnail wp-image-369" title="Texto en la consola de texto con println()" src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_5-150x150.png" alt="Texto en la consola de texto con println()" width="150" height="150" /></a><p class="wp-caption-text">Texto en la consola de texto con println()</p></div>

//VARIABLES
int centro = 150;
int diametro;
diametro = 98;
int val = 10;
float fibo = 1.618;

//variable tipo char y String:
char letra = '!';
String mensaje = "el programa se ejecuto correctamente";

//EJECUCION
size(300,300);
background(val*10,val*fibo,diametro/fibo);
smooth();

fill(val*21.3,val*13.1,val*8.9);
ellipse(centro,centro,diametro,diametro);
fill(val*5,val*16,val*20);
rect(20*fibo,val*13,diametro/fibo,diametro);

<strong>//Imprime en la consola una mensaje de ejecucion correcta
println(mensaje + letra);</strong></pre>
<p>Es importante notar que cuando se declara una variable &#8220;<em>String</em>&#8221; esta <strong>siempre </strong>se escribe con la primera letra en mayúscula. Las variables <em>String </em>se inicializan poniendo siempre el valor asignado, la cadena de caracteres, entre comillas dobles (<code>"cadena asignada a String"</code>), y las variables <em>char </em>poniendo el caracter asignado entre comillas simples (<code>'F'</code>).</p>
<pre>//String siempre con mayúscula
string mensaje = 'b'; //invalido
String mensaje = 'b'; //legal

//String con comillas dobles (" ")
String mensaje = 'oracion asignada'  //invalido
String mensaje = "oracion asignada"  //legal

char con comillas simples (' ')
char letra = "F"   //invalido
char letra = 'F'   //legal</pre>
<h3>Datos &#8220;Boolean&#8221;:</h3>
<p>Los datos <strong><em>Boolean </em></strong>son datos especiales usados en funciones o expresiones que requieren del cumplimiento de una condición para darse del todo. Los datos <em>Boolean </em>sólo tienen dos posibles valores, <code>true</code> (cierto) o <code>false</code> (falso); cualquier intento de introducir otro valor a una variable tipo <em>Boolean </em>resultará en un error. Podemos incluir en nuestro <em>sketch </em>un ejemplo simple que requiere de condiciones para la ejecución de los últimos pasos en el <em>sketch</em>.</p>
<p>Primero introduciremos la operación <code>fibo = fibo / fibo;</code> al final de la ejecución de los dibujos. Lo que esta línea quiere decir es &#8220;<strong><em>divide el valor fibo entre el valor de fibo y asigna el resultado a fibo</em></strong>&#8220;. Puede sonar extraño pero funcionará a la perfección. Con el tiempo, operar matemáticamente una variable para luego asignarla a sí misma se harán más comunes así que es bueno acostumbrarse a esta mecánica. El ejemplo terminado luce así:</p>
<pre>

<div id="attachment_374" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_6.png"><img class="size-thumbnail wp-image-374" title="Cuando la condición se cumple se imprime el mensaje." src="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_6-150x150.png" alt="Cuando la condición se cumple se imprime el mensaje." width="150" height="150" /></a><p class="wp-caption-text">Cuando la condición se cumple se imprime el mensaje.</p></div>

int centro = 150;
int diametro;
diametro = 98;
int val = 10;
float fibo = 1.618;
char letra = '!';
String mensaje = "ejecucion correcta";

//VARIABLE BOOLEAN
//INICIA SIENDO FALSA!!!
Boolean boing = false;

//EJECUCION
size(300,300);
background(val*10,val*fibo,diametro/fibo);
smooth();

fill(val*21.3,val*13.1,val*8.9);
ellipse(centro,centro,diametro,diametro);
fill(val*5,val*16,val*20);
rect(20*fibo,val*13,diametro/fibo,diametro);

<strong>
//OPERACION MATEMATICA SOBRE FIBO
fibo = fibo / fibo;

//PRIMERA CONDICION:
//si fibo es mayor o igual que uno...
if (fibo &gt;= 1) {
  //volver boing verdadera
  boing = true;
}
</strong>

println(mensaje + letra);
//mensajes extra
print("este mensaje ");
println("tambien es valido");

<strong>
//SEGUNDA CONDICION
//si boing es verdadero...
if (boing) {
  //imprime todos estos mensajes en la consola!
  print("el valor de fibo es ");
  println(fibo);
}
</strong></pre>
<p>En este ejemplo utilizamos una expresión <code>if</code>, que verifica el contenido de los paréntesis detrás de ella; si la condición es verdadera se ejecuta el código entre los corchetes ( <code>{}</code> ), de lo contrario no ocurre nada. Estudiaremos un poco más a fondo las declaraciones condicionales en un capítulo posterior <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***</p>
<p>Existen más tipos de Datos empleados en Processing que tienen diferentes utilidades, sin embargo, por ahora, con estos 5 fundamentales tenemos para empezar a hacer sketches muy entretenidos. De hecho es posible que nunca utilicemos alguno de los otros tipos de Datos. con <em>float</em>, <em>int</em>, <em>String</em>, <em>char </em>y <em>Boolean </em>estamos muy bien equipados para los capítulos por venir.</p>
<h2>Variables de sistema de Processing:</h2>
<p><em>Processing </em>viene además con una serie de variables internas que no nos tenemos que preocupar en declarar excepto algunos casos en los que estas pueden ser variadas. Existe una buena cantidad de ellas pero las principales son:</p>
<h3>&#8220;width&#8221; y &#8220;height&#8221;</h3>
<p>Variables <em>int </em>que almacenan el ancho y el alto de la ventana del <em>sketch</em>. Por defecto las dos tiene un valor de 100, pero cuando declaramos <code>size(300,289)</code> estamos asignando los valores 300 a width y 289 a height. Estas variables siempre están disponibles para todo el programa hayan sido modificadas en la función <code>size()</code> o no</p>
<h3>&#8220;screen.width&#8221; y &#8220;screen.height&#8221;</h3>
<p>Similares a las anteriores, pero estas guardan dentro de sí el ancho y el alto, en píxeles, del monitor de nuestra computadora. Desde la computadora en la que escribo este artículo tienen los valores 1280 y 800. estas variables no son modificables, por supuesto, pero se pueden utilizar desde cualquier parte del progra, incluso así: <code>size(screen.width,screen.height)</code>.</p>
<h3>&#8220;keyPressed&#8221;, &#8220;keyReleased&#8221;, &#8220;mousePressed&#8221;, &#8220;mouseButton&#8221;, mouseReleased</h3>
<p>Variables Boolean que reaccionan a las acciones del teclado o el ratón como presionar una tecla o el ratón o soltarlos.</p>
<h3>key</h3>
<p>Variable <em>char</em> que almacena la última tecla del presionada en el teclado.</p>
<h3>&#8220;mouseX&#8221; y &#8220;mouseY&#8221;</h3>
<p>Variables tipo <em>int</em> que almacenan la posición del mouse cuando este está sobre la ventana del <em>sketch </em>en ejecución. Muy útiles para hacer modificaciones interactivas que sigan los movimientos del ratón o reaccionen a este.</p>
<p>Hay muchas más variables de sistema incluídas en Processing y que no hay que preocuparse por declarar porque ya son parte del lenguaje. Estas ofrecen una gran rapides de trabajo y se mantienen constantes a través de diferentes plataformas, lo cual aumenta la compatibilidad del software que escribimos.</p>
<h2>print() y println()</h2>
<p>Adicionalmente en este tutorial usamos la función <code>println()</code> y <code>print()</code> que imprimen mensajes y valores de variables intactas u operadas en la consola de texto. Ambas funciones imprimen el texto ligeramente diferente a la otra.</p>
<p><code>print()</code> imprime el texto en una línea y deja a <em>Processing </em>esperando por la siguiente <code>print()</code> o <code>prinln()</code> para imprimirla justo después, en la misma línea de la consola.</p>
<p>En cambio <code>println()</code> porque imprime una línea completa y luego salta a la siguiente línea.</p>
<p>Estas dos funciones como vimos en el ejemplo de arriba son tremendamente útiles para confirmar la ejecución de otras líneas y ver si existen errores ne nuestro código durante la ejecución del mismo.</p>
<p>Para mostrar mensajes en la consola se puede hacer de varia formas:</p>
<blockquote><p>//variable de texto<br />
<code>String mensaje = "_ejecucion correcta";<br />
//variable char<br />
char letra = '!';<br />
//variable numerica<br />
int numero = 5 ;<br />
//variable boolean<br />
Boolean boing = true;</code></p>
<p>//poniendo el mensaje dentro de la funcion<br />
<code>println("mensaje 'hardcoded'");</code> == mensaje &#8216;hardcoded&#8217;</p>
<p>//llamando una variable con texto<br />
<code>println(mensaje);</code> == ejecucion correcta<br />
<code>println(letra);</code> == !</p>
<p>//sumando dos o más variables con texto<br />
<code>println(mensaje + letra);</code> == _ejecucion correcta!</p>
<p>//sumando variables de texto con variables numéricas<br />
<code>println(mensaje + numero);</code> == _ejecucion correcta5<br />
Círculo dibujado con variables<br />
//sumando variables de texto con variables Boolean<br />
<code>println(mensaje + boing);</code> == _ejecucion correctatrue</p>
<p>//Operando variables numéricas<br />
<code>println(numero * numero); </code>== 25</p>
<p>//Cualquier combinación de las anteriores EXCEPTO:<br />
//operar una variable numerica junto a una boolean<br />
<code>println(mensaje + numero + boing);</code> == ¡ERROR!<br />
<code>println(boing + mensaje + numero);</code> == true_ejecucion correcta 5</p></blockquote>
<p>Los nombres de variables pueden ser cualquiera siempre que empiecen con una letra u un guión bajo ( _ ) . Un nombre para una variable puede ser &#8220;_tant&#8221;, &#8220;altur&#8221;, o &#8220;tocaLasPiezas&#8221;. El último ejemplo está escrito con una técnica llamada espalda de camello que consiste en identificar cada palabra que forma el nombre poniendo la primera letra en mayúscula, es muy útil para hacer legible el código y entende lo que almacena la variable. Lo último que queda por mencionar es que, por convención, los nombres de las variables (y de las funciones también) siempre deben comenzar con minúscula, para evitar confusiones con otros tipos de datos más complejos y que son identificados en el código porque sus nombres comienzan con mayúscula; esto lo entenderemos a fondo cuando estudiemos <em>Classes</em>, mucho más adelante.</p>
<h2>Suma</h2>
<p>Con el conocimiento de los tipos básicos de variables nos dirigimos hacia un nuevo momento de nuestro aprendizaje de <em>Processing</em>; llegaremos rápidamente a interactuar con nuestros <em>sketches </em>y a generar animaciones más interesantes que los dibujos planos que hemos hecho hasta ahora. Saber cómo utilizar los tipos de datos para generar variables que sirvan a nuestros propósitos es básico para poder avanzar en el mundo de la programación, del apropiado uso de los tipos de datos depende la resolución de problemas más avanzados y la disminución de errores y dolores de cabeza.</p>
<blockquote><p>¡Descarga el código fuente de este tutorial!<br />
[download id="3" format="1"]</p></blockquote>
<p>Déjanos feedback, preguntas o infórmanos de cualquier error en este post dejando un comentario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong> </strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/368/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=368&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/15/capitulo-5-variables-y-tipos-de-datos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_1-150x150.png" medium="image">
			<media:title type="html">Círculo dibujado con variables.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_2-150x150.png" medium="image">
			<media:title type="html">Variables utilizadas en los colores y el rectángulo.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_4-150x150.png" medium="image">
			<media:title type="html">Rectángulo y fondo variado por fibo.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_5-150x150.png" medium="image">
			<media:title type="html">Texto en la consola de texto con println()</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/Capitulo_5_6-150x150.png" medium="image">
			<media:title type="html">Cuando la condición se cumple se imprime el mensaje.</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 4: Explorando Processing.</title>
		<link>http://ddpde.wordpress.com/2009/07/14/capitulo-4-explorando-processing/</link>
		<comments>http://ddpde.wordpress.com/2009/07/14/capitulo-4-explorando-processing/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 03:33:34 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ambiente]]></category>
		<category><![CDATA[archivo]]></category>
		<category><![CDATA[ayuda]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[color selector]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[editar]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[menú]]></category>
		<category><![CDATA[menúes]]></category>
		<category><![CDATA[pde]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=351</guid>
		<description><![CDATA[Aparte de la acción que ocurre en el Editor de Processing, existen en el programa un número de funciones adicionales que nos serán de gran ayuda y nos minimizarán trabajo mientras desarrollamos nuestros programas. Muchas de esas funciones no se pueden lograr con comandos en el Editor, sino buscando entre los menúes en la parte [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=351&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Aparte de la acción que ocurre en el <em>Editor </em>de <em>Processing</em>, existen en el programa un número de funciones adicionales que nos serán de gran ayuda y nos minimizarán trabajo mientras desarrollamos nuestros programas. Muchas de esas funciones no se pueden lograr con comandos en el <em>Editor</em>, sino buscando entre los menúes en la parte superior de la ventana de Processing.</p>
<p><span id="more-351"></span></p>
<h2>El menú principal:</h2>
<h3>Menú &#8220;File&#8221;:</h3>
<div id="attachment_358" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_file.jpg"><img class="size-thumbnail wp-image-358" title="Menu &quot;File&quot;" src="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_file-150x150.jpg" alt="Menu &quot;File&quot;" width="150" height="150" /></a><p class="wp-caption-text">Menu &quot;File&quot;</p></div>
<p>Acá están situadas las funciones básicas de todo editor o programa para actuar sobre los archivos que genera, como abrir, cerrar o crear un nuevo <em>sketch</em>, además están las opciones para exportar el <em>sketch</em> como un <em>applet </em>Java o como una aplicación independiente para diferentes plataformas. Entre estos comandos se encuentran los dos submenúes que contienen los ejemplos incluídos con el programa y un acceso a todos los proyectos que se salven en su <em><strong>sketchbook</strong></em>. Predeterminadamente, al salvar un proyecto <em>Processing </em>ofrece una carpeta en <em>Mis Documentos</em> (diferente en otras plataformas) llamado &#8220;<strong>Processing/</strong>&#8221; que desde el programa es llamado <em>sketchbook</em>, lo mejor es seguir la sugerencia de <em>Processing</em> y guardar todos los proyectos ahí, donde estarán seguros y donde podemos ordenarlos arbitrariamente en diferentes carpetas; <em>Processing </em>lee cada subcarpeta y la presenta como un submenú en el <em>sketchbook</em>.</p>
<div id="attachment_361" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_sketchbook.jpg"><img class="size-thumbnail wp-image-361" title="Árbol de carpetas del Sketchbook. Cada uno puede hacer su propio árbol de proyectos haciendo carpetas dentro del Sketchbook." src="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_sketchbook-150x150.jpg" alt="Árbol de carpetas del Sketchbook." width="150" height="150" /></a><p class="wp-caption-text">Árbol de carpetas del Sketchbook.</p></div>
<div id="attachment_363" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/preferencias_de_processing.jpg"><img class="size-thumbnail wp-image-363" title="Ventana de preferencias de PDE" src="http://0p0media.com/processing/wp-content/uploads/2009/07/preferencias_de_processing-150x150.jpg" alt="Ventana de preferencias de PDE" width="150" height="150" /></a><p class="wp-caption-text">Ventana de preferencias de PDE</p></div>
<p>A continuación están las opciones de impresión en papel del contenido del <em>Editor</em>, y luego de este las muy importantes <strong>preferencias de <em>Processing</em></strong>. La instalación predeterminada de <em>PDE </em>funciona perfectamente, sin embargo es posible que desee cambiar la ubicación de nuestro <em>sketchbook</em>, cambiar el tamaño de la fuente en el Editor, asignarle más <a href="http://es.wikipedia.org/wiki/RAM">memoria RAM</a> a <em>Processing </em>o cambiar alguna de las opciones avanzadas. Estas opciones más avanzadas son para gente lo que sabe lo hace, así que si no tienen idea de los resultados de las opciones, no las toquen. como dije, <em>Processing </em>corre de maravilla en su instalación predeterminada y no es necesaria ninguna customización para mejorar el funcionamiento del programa.</p>
<h3>El menú &#8220;Edit&#8221;</h3>
<div id="attachment_357" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_edit.jpg"><img class="size-thumbnail wp-image-357" title="Menú &quot;Edit&quot;." src="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_edit-150x150.jpg" alt="Menú &quot;Edit&quot;." width="150" height="150" /></a><p class="wp-caption-text">Menú &quot;Edit&quot;.</p></div>
<p>El área del <em>Editor </em>funciona básicamente igual que un editor común de texto y en el menú &#8220;<strong>Edit</strong>&#8221; encontraremos los comando que tienen que ver precisamente con la edición del texto con comandos estándar como, copiar, cortar, pegar, repetir, deshacer, sleccionar todo; y otros comando propios de Processing, como aumentar o siminuir la sangría de la selección, o copiar la selección con un formato adecuado (<a href="http://es.wikipedia.org/wiki/Bbcode">BBCode</a>) para postearlo en el foro de <em>Processing </em>(&#8220;Copy for Discourse&#8221;), finalmente está la opción para encontrar texto en el <em>Editor </em>si estamos en la situación de tener un sketch demasiado grande y no encontramos lo que buscamos.</p>
<h3>El menú &#8220;Sketch&#8221;</h3>
<div id="attachment_360" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_sketch.jpg"><img class="size-thumbnail wp-image-360" title="Menú &quot;Sketch&quot;." src="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_sketch-150x150.jpg" alt="Menú &quot;Sketch&quot;." width="150" height="150" /></a><p class="wp-caption-text">Menú &quot;Sketch&quot;.</p></div>
<p>El menu &#8220;<strong>Sketch</strong>&#8221; contene los comandos básicos para ejecutar, detener y presentar el <em>sketch </em>en el que estemos trabajando. Debajo de estos están tres comando avanzados y de gran utilidad. <strong><em>Import Library</em></strong> coloca el código necesario al rpincipio del <em>sketch </em>para usar las funciones adicionales de las bibliotecas de funciones incluídas con <em>Processing </em>o instaladas por nosotros mismos que aportan nuevas posibilidades y funciones a nuestro <em>sketch</em>. El siguiente es <strong>Show Sketch Folder</strong>, el cual nos abre una ventana de nustro explorador de carpetas mostrando el contenido del proyecto en el que estemos trabajando; esto es especialmente útil cuando queremos revisar lo archivos que puede exportar nuestro <em>sketch </em>como imágenes y películas, documentos PDF u otros tipos de archivo generados en la ejecución de nuestro código. Finalmente, en el fondo del menú está el comando <strong>Add File</strong>, con el que se puede importar, a una carpeta dentro del proyecto llamada &#8220;<strong>data</strong>/&#8221;, todos los archivos que nuestro sketch pueda necesitar, sean mp3, imágenes o películas.</p>
<h3>El menú &#8220;Tools&#8221;.</h3>
<div id="attachment_362" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_tools.jpg"><img class="size-thumbnail wp-image-362" title="Menú &quot;Tools&quot;." src="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_tools-150x150.jpg" alt="Menú &quot;Tools&quot;." width="150" height="150" /></a><p class="wp-caption-text">Menú &quot;Tools&quot;.</p></div>
<p>En el menú tools encontraremos comandos especiales que brindan funcionalidades especiales para operar nuestro <em>sketch</em>. La primera de estas es <strong>Auto Format</strong>, con la que <em>Processing</em> revisa el formato de nuestro <em>sketch</em> y pone todo en orden, aumentando la legibilidad de nuestro código con sangrías adecuadas.</p>
<p>Seguido está <strong>Create Font&#8230;</strong>, un pequeño diálogo con el que se convierten archivos de fuentes en nuestro sistema al formato utlizado por <em>Processing</em> para la representación de texto en la ventana del <em>sketch</em> cuando este se ejecuta.</p>
<p>Luego encontramos <strong>Color Selector</strong>, el cual abre una pequeña ventana independiente con el que podemos seleccionar gráficamente un color para su uso en el <em>sketch </em>editado. Esta pequeña ventana nos muestra los valores en <a href="http://0p0media.com/processing/2009/07/capitulo-3-color-en-processing/"><strong><acronym title="Red-Green-Blue">RGB</acronym></strong> y <strong><acronym title="Red-Green-Blue en valores Hexadecimales ">RGB-HEX</acronym></strong></a> y nos facilitará enormemente la búsqueda de colores y, a los más novatos, la comprensión de los dos estándares de color más comunes en Processing.</p>
<div id="attachment_364" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/ventana_color_selector.jpg"><img class="size-thumbnail wp-image-364" title="Ventana de selección de color." src="http://0p0media.com/processing/wp-content/uploads/2009/07/ventana_color_selector-150x150.jpg" alt="Ventana de selección de color." width="150" height="150" /></a><p class="wp-caption-text">Ventana de selección de color.</p></div>
<p>En la cuarta plaza está <strong>Archive Sketch</strong>; este comando guarda al <em>sketch</em> actual en formato <em>Zip</em> con todos los archivos contenidos en la carpeta <em>data</em> del proyecto para que los almacenemos o lo redistribuyamos por Internet. Así es como se han hecho los <em>Zips</em> descargables que contienen los códigos fuentes de nuestros tutoriales en <em>Diario de PDE</em>. En la última posición de este menú está un comando muy conveniente: <strong>Fix Encoding and Reload</strong> arregla los caracteres inválidos en el Editor salva el <em>sketch </em>y recarga el código fuente. Este comando debe usarse después de salvar el sketch para que los cambios realizados no se pierdan.</p>
<h3>El menú &#8220;Help&#8221;.</h3>
<div id="attachment_359" class="wp-caption alignright" style="width: 160px"><a href="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_help.jpg"><img class="size-thumbnail wp-image-359" title="Menú &quot;Help&quot;." src="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_help-150x150.jpg" alt="Menú &quot;Help&quot;." width="150" height="150" /></a><p class="wp-caption-text">Menú &quot;Help&quot;.</p></div>
<p>El menú más útil, sobre todo para los que estamos comenzando en <em>PDE</em>, es el menú <strong>Help</strong>, en el encontraremos una cantidad de recursos extremadamente útiles para comenzar con el ambiente y para ir aprendiendo el lenguaje, investigando la referencia incluída con la descarga oficial de <em>PDE</em> (<strong>todo en inglés</strong>). En <em>Diario de PDE</em> alentamos a nuestros lectores a navegar a través de la documentación de referencia accesible desde este menú además de leer nuestros tutoriales, encontrarán todas las funciones nativas de <em>Processing </em>y podrán venir de vuelta a este sitio para contribuir con ejemplos, correcciones e ideas para compartir con los demás <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Suma:</h2>
<p><em>Processing </em>es un ambiente de desarrollo y un lenguaje de programación más vasto de los que uno se imagina a primera vista, y sus funciones están desarrolladas para ayudarnos a agilizar nuestra labor en el ambiente del programa, pero sobre todo, las herramientas son intuitivas y van directo al punto, fomentando nuestra curiosidad y ansias de aprender más sobre el ambiente y sus posibilidades.</p>
<p>Adelante!</p>
<p>Déjanos feedback, preguntas o infórmanos de cualquier error en este post dejando un comentario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong></strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/351/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=351&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/14/capitulo-4-explorando-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_file-150x150.jpg" medium="image">
			<media:title type="html">Menu &#34;File&#34;</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_sketchbook-150x150.jpg" medium="image">
			<media:title type="html">Árbol de carpetas del Sketchbook. Cada uno puede hacer su propio árbol de proyectos haciendo carpetas dentro del Sketchbook.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/preferencias_de_processing-150x150.jpg" medium="image">
			<media:title type="html">Ventana de preferencias de PDE</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_edit-150x150.jpg" medium="image">
			<media:title type="html">Menú &#34;Edit&#34;.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_sketch-150x150.jpg" medium="image">
			<media:title type="html">Menú &#34;Sketch&#34;.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_tools-150x150.jpg" medium="image">
			<media:title type="html">Menú &#34;Tools&#34;.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/ventana_color_selector-150x150.jpg" medium="image">
			<media:title type="html">Ventana de selección de color.</media:title>
		</media:content>

		<media:content url="http://0p0media.com/processing/wp-content/uploads/2009/07/menu_help-150x150.jpg" medium="image">
			<media:title type="html">Menú &#34;Help&#34;.</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 3: Color en Processing.</title>
		<link>http://ddpde.wordpress.com/2009/07/14/capitulo-3-color-en-processing/</link>
		<comments>http://ddpde.wordpress.com/2009/07/14/capitulo-3-color-en-processing/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 00:23:03 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[background()]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[fill()]]></category>
		<category><![CDATA[HEX]]></category>
		<category><![CDATA[RGB]]></category>
		<category><![CDATA[stroke()]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=331</guid>
		<description><![CDATA[Para un humano es fácil dar por sentados los datos que recibe del mundo a través de sus sentidos. Para las computadoras, en cambio, todos los datos que nosotros vemos como normales no lo son, o sea, que la computadora no atrapa intuitivamente los datos del ambiente para traducirlos en información; en cambio en la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=331&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para un humano es fácil dar por sentados los datos que recibe del mundo a través de sus sentidos. Para las computadoras, en cambio, todos los datos que nosotros vemos como normales no lo son, o sea, que la computadora no atrapa intuitivamente los datos del ambiente para traducirlos en información; en cambio en la computadora todo se trata de instrucciones, unos y ceros, switches microscópicos que realizan tareas lógigas sumamente abstractas. El color es una de esos datos que la computadora no entiende como nosotros.</p>
<p><span id="more-331"></span></p>
<h2>Datos de color.</h2>
<h3>fill() y stroke()</h3>
<p>Todos los datos se tratan dentro de una computadora se tratan como cadenas de unos y ceros (1,0), y el color no es la excepción. Hoy se usa una resolución de 24 bits por píxel de pantalla como estándar de la industria computacional, lo cual nos puede ofrecer más de 16 millones de colores. Eso de 24 bits quiere decir que en RGB se usan 8 bits para cada componente; 8 bits para el rojo, 8 bits para el verde y 8 bits para el azul. La computadora recibe los datos de color de una forma muy diferente a como nosotros lo vemos en pantalla pero no ahondaremos en esto por ahora.</p>
<p>Existen diferentes formas de tratar el color en <em>Processing</em>, pero en este capítulo nos enfocaremos sólo en dos de ellas: RGB y HEX.</p>
<p>RGB es un acrónimo que significa Red &#8211; Green &#8211; Blue, o, en español, Rojo &#8211; Verde &#8211;  Azul. RGB es el modo más simple de usar en <em>Processing</em> y todas las funciones que requieren de argumentos de color para entrar en acción lo entienden a  la perfección.</p>
<p>La forma en que se usa el color en <em>Processing</em> es simple y llana, como hasta ahora ha sido todo:</p>
<pre>

<div id="attachment_582" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_003_01.png"><img class="size-thumbnail wp-image-582" title="Cuadrados coloreados." src="http://ddpde.files.wordpress.com/2009/08/tut_003_01.png?w=150&#038;h=150" alt="Cuadrados coloreados." width="150" height="150" /></a><p class="wp-caption-text">Cuadrados coloreados.</p></div>

//color en <em>Processing</em>
//la función fill() controla el color de relleno y
//la función stroke() el color del borde

size(300,300);
rectMode(CENTER);

fill(150,200,255);
stroke(80,255,0);
rect(100,100,100,100); //cuadrado AZUL con borde verde
fill(#ef8700);
stroke(#ff00ff);
rect(200,200,100,100); //cuadrado NARANJA con borde magenta</pre>
<p>De este pequeño sketch se extrae que las funciones que modifican los colores de los objetos actúan sobre todo lo que haya después de ellas hasta que aparezca una nueva modificación del color. Por ejemplo podemos hacer dos círculos después de los dos cuadrados, uno sin modificar el color tras el cuadrado y otro que sí lo modifique para dejar claro esta acaracterística del tratamiento que da <em>Processing</em> al color:</p>
<pre>

<div id="attachment_584" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_003_02.png"><img class="size-thumbnail wp-image-584" title="Círculos añadidos." src="http://ddpde.files.wordpress.com/2009/08/tut_003_02.png?w=150&#038;h=150" alt="Círculos añadidos." width="150" height="150" /></a><p class="wp-caption-text">Círculos añadidos.</p></div>

//color en <em>Processing</em>
//la función fill() controla el color de relleno y
//la función stroke() el color del borde

size(300,300);
rectMode(CENTER);
ellipseMode(CENTER);

fill(150,200,255);
stroke(80,255,0);
rect(100,100,100,100); //cuadrado AZUL con borde verde
fill(#ef8700);
stroke(#ff00ff);
rect(200,200,100,100); //cuadrado NARANJA con borde MAGENTA

//sin modificar los colores dibujamos un círculo
ellipse(100,200,100,100); // ellipse NARANJA con borde MAGENTA

//modificando los colores un nuevo círculo
fill(255,0,255);
stroke(80,255,0);
ellipse(200,100,100,100); //círculo MAGENTA con borde VERDE</pre>
<h3>RGB estándar</h3>
<p>La función fill() y stroke() que usamos más arriba toman el color en dos diferentes formas, la primera que empleamos es el RGB estándar de <em>Processing</em> que consiste de pasar a la función tres valores separados por comas así:</p>
<pre>fill(R,G,B);
stroke(R,G,B);</pre>
<p>Los valores que se les pasa a las funciones en RGB estándar deben estar entre 0 y 255, puesto que espacio de color de <em>Processing</em> está en 24 Bits y no permite mayor resolución que esta. Eso quiere decir que tenemos 256 valores para cada color y dependiendo de cómo los combinemos en nuestras instrucciones obtendremos todos los colores de la paleta de 24 bits, o sea, más de 16 millones de colores; muy por encima de lo que podemos distinguir.</p>
<pre>fill(0);       //NEGRO
fill(100,0,0);     //ROJO MUY OSCURO
fill(255,0,0);     //100% ROJO
fill(20,200,200);  //TURQUESA
fill(100,100,100); //GRIS
fill(180,255,140); //VERDE CLARO
fill(255); //BLANCO</pre>
<p>Como se ve esta corta lista de colores llamadas a <code>fill()</code>, una particularidad de estas funciones es que pueden tomar tres o un solo valor para aplicar el color. Al introducir tres valores, cada color es asignado por aparte para resultar en un color final para la figura, pero si se introduce un sólo valor entre 0 y 255, el resultado es igual a introducir el mismo valor para los tres colores RGB; el resultado es un tono de Gris debido a la igualdad entre los tres colores. de manera que <code>fill(255,255,255);</code> es lo mismo que <code>fill(255)</code>;</p>
<h3>RGB en modo HEX.</h3>
<p>Las funciones que que modifican el color también pueden hacerlo por medio del estándar usado en el desarrollo web para HTML, CSS Y JavaScript, el cual será muy familiar para los diseñadores y programadores web. Para ingresar el valor del color en la función se hace tan simple como:</p>
<pre>fill(#33af09);    //Verde
stroke(#fb8000);  //Naranja</pre>
<p>El funcionamiento es similar al RGB estándar, sólo que los valores no están separados por comas, usando el estándar HTML para el color con valores HEX para cada par de dígitos. HEX quiere decir Hexadecimal, o sea, que los números introducidos están en base 16. Si queremos contar en HEX tendremos que carlo así:</p>
<pre>00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
...
...
...</pre>
<p>En esta pequeña tabla de conteo se representan los primeros 32 números enteros en HEX, 0 sea, en base 16. el número entero 10 en HEX se escribe &#8220;<code>0a</code>&#8220;. el número que vemos escrito como &#8220;<code>10</code>&#8221; NO ES 10, sino &#8220;16&#8243;. Si seguimos la tabla hasta el final llegaremos hasta el valor &#8220;<code>ff</code>&#8221; que es equivalente a 255. Ya que el estándar de color HTM y CSS sólo permite dos dígitos por color no podemos avanzar más allá de &#8220;<code>ff</code>&#8220;, pero aún así obtenemos exacta,ente la misma cantidad de colores que con el RGB estándar de <em>Processing</em>. Tenemos entonces que <code>fill(255,0,16);</code> es exactamente lo mismo que <code>fill(#ff0010)</code>. Nótese que siempre que se use RGB en modo HEX debe anteponerse un &#8220;<code>#</code>&#8221; a los tres valores, lo cuales van juntos, sin espacio entre ellos.</p>
<p>Ustedes pueden escoger el estándar que prefieran para establecer el color de sus figuras en sus sketches, pero con el tiempo veremos que algunas son más convenientes en un entorno de programación en el que desarrollemos prográmas más dinámicos y cambiantes.</p>
<h3>background();</h3>
<p>Finalmente tal vez deseen saber que el fondo del sketch puede ser coloreado como ustedes más gusten con la función <code>background()</code>, la cual usa, igualmente, cualquiera de los dos modos para funcionar y rellenar el fondo de la pantalla.</p>
<pre>

<div id="attachment_586" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_003_03.png"><img class="size-thumbnail wp-image-586" title="Fondo del sketch coloreado" src="http://ddpde.files.wordpress.com/2009/08/tut_003_03.png?w=150&#038;h=150" alt="Fondo del sketch coloreado" width="150" height="150" /></a><p class="wp-caption-text">Fondo del sketch coloreado</p></div>

//color en <em>Processing</em>
//la función fill() controla el color de relleno,
//la función stroke() el color del borde
<strong>//y la función background() colorea el fondo de la ventana</strong>

size(300,300);
rectMode(CENTER);
ellipseMode(CENTER);

<strong>background(0,0,0);</strong>

fill(150,200,255);
stroke(80,255,0);
rect(100,100,100,100); //cuadrado AZUL con borde verde
fill(#ef8700);
stroke(#ff00ff);
rect(200,200,100,100); //cuadrado NARANJA con borde MAGENTA

//sin modificar los colores dibujamos un círculo
ellipse(100,200,100,100); // ellipse NARANJA con borde MAGENTA

//modificando los colores un nuevo círculo
fill(255,0,255);
stroke(80,255,0);
ellipse(200,100,100,100); //círculo MAGENTA con borde AZUL</pre>
<p>La función <code>background()</code> debe ser colocada justo antes de cualquier función ponga dibujos, imágenes o figuras en pantala; recuerde que <em>Processing</em> dibuja las últimas figuras por encima de las primeras que hizo durante la ejecución del sketch.</p>
<h2>Suma:</h2>
<p>El color es una de las funciones que se nos harán más agradables de usar en un entorno de programación de gráficos, y aunque podría requerir acostumbrarse al uso que se hace de este en <em>Processing</em> sin duda seguirá añadiendo una gran riqueza visual a nuestros sketches.</p>
<blockquote><p><strong>Actividad:</strong></p>
<p>Intente ver qué sucede cuando se sobreponen formas, usando las funciones para colores con 2 y 4 parámetros; podría sorprenderse&#8230; <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p></blockquote>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong></strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/331/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=331&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/14/capitulo-3-color-en-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_003_01.png?w=150" medium="image">
			<media:title type="html">Cuadrados coloreados.</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_003_02.png?w=150" medium="image">
			<media:title type="html">Círculos añadidos.</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_003_03.png?w=150" medium="image">
			<media:title type="html">Fondo del sketch coloreado</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 2: &quot;¡Hola Mundo!&quot;.</title>
		<link>http://ddpde.wordpress.com/2009/07/13/capitulo-2-hola-mundo/</link>
		<comments>http://ddpde.wordpress.com/2009/07/13/capitulo-2-hola-mundo/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 05:52:54 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[//]]></category>
		<category><![CDATA[¡hola mundo!]]></category>
		<category><![CDATA[ellipse()]]></category>
		<category><![CDATA[ellipseMode()]]></category>
		<category><![CDATA[line()]]></category>
		<category><![CDATA[point()]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[rect()]]></category>
		<category><![CDATA[size()]]></category>
		<category><![CDATA[smooth()]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=270</guid>
		<description><![CDATA[El famoso &#8220;¡Hola Mundo!&#8221; es, en casi todos los tutoriales de programación, el primer programa que los estudiantes desarrollan en cualquier plataforma, desde C++ hasta Java, e incluso Processing. Pero Processing es un ambiente para programación de gráficos y como tal lo usaremos para hacer nuestro &#8220;¡Hola Mundo!&#8221; en gráficos, una de primera exploración de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=270&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El famoso &#8220;<em>¡Hola Mundo!</em>&#8221; es, en casi todos los tutoriales de programación, el primer programa que los estudiantes desarrollan en cualquier plataforma, desde <em>C++</em> hasta <em>Java</em>, e incluso <em>Processing</em>. Pero <em>Processing</em> es un ambiente para programación de gráficos y como tal lo usaremos para hacer nuestro &#8220;<em>¡Hola Mundo!</em>&#8221; en gráficos, una de primera exploración de las funciones más simples de este ambiente de desarrollo. Este tutorial nos lleva en un recorrido por las funciones de dibujo más básicas de <em>Processing</em> junto a otras particularidades simples del ambiente y el lenguaje de programación.</p>
<p><span id="more-270"></span></p>
<h2>Tamaño de la ventana:</h2>
<p><em><img class="alignnone size-full wp-image-576" title="Ventana predeterminada" src="http://ddpde.files.wordpress.com/2009/08/tut_002_default_window.png" alt="Ventana predeterminada" width="100" height="100" /></em></p>
<p><em>Processing </em>crea gráficos en una ventana por defecto de 100&#215;100 píxeles, la cual no es muy útil cuando estamos tratando de crear arte impresionante y diéfano. Es por ello que para alterar el tamaño de la ventana en la que dibujaremos haremos una llamada a una función para ese propósito. Llamar una función es básicamente escribirla en el Editor de texto de Procesing para que esta entre en acción.</p>
<h3>size();</h3>
<p>La función para alterar el tamaño de la ventana es <code>size(int,int)</code>, donde <code>size()</code> es la función en sí y los dos <code>int</code> que aparecen dentro son parámetros que necesita la función para ejecutarse correctamente. En el caso de la función <code>size()</code> esta requiere dos números enteros, esto es, sin punto decimal (1 es un número entero pero 1.5 no es un número entero).</p>
<p>Para que nuestro <em>sketch </em>tenga un tamaño de 300 píxeles debemos escribir en el <strong>editor</strong> de <em>Processing</em>:</p>
<pre><strong>

<div id="attachment_580" class="wp-caption alignright" style="width: 160px"><strong><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_ventana-despues-de-size_300.png"><img class="size-thumbnail wp-image-580" title="Después de size(300,300);" src="http://ddpde.files.wordpress.com/2009/08/tut_002_ventana-despues-de-size_300.png?w=150&#038;h=150" alt="Después de size(300,300);" width="150" height="150" /></a></strong><p class="wp-caption-text">Después de size(300,300);</p></div>

size(300,300);</strong></pre>
<p>Esta simple declaración cambia por completo el tamaño del <em>sketch </em>a 300&#215;300 px. Hay otras variaciones que se usan con <code>size()</code> pero por ahora no es necesario verlas. Ya en el futuro las repasaremos. Es importante notar que tras cada final de línea de código, ahí donde hay que hacer un &#8220;punto y aparte&#8221; entre dos declaraciones, se cierra la línea con un &#8220;<strong><code>;</code></strong>&#8220;. Esto es parte de la sintaxis normal en <em>Processing</em> y <strong>debe hacerse obligatoriamente</strong> cada vez que un comando termina de enunciarse.</p>
<p>En estos primeros tutoriales veremos que las llamadas a funciones suelen ser muy simples y directas, sin muchas acrobacias en el código.</p>
<h2>Primeras funciones de dibujo</h2>
<p><em>Processing</em> es un ambiente de programación de gráficos, y todas sus funciones nativas están hechas para simplificar la tarea de dibujar sin demasiadas complicaciones y sin preocuparnos por lo que sucede tras bambalinas en el programa.</p>
<h3>point();</h3>
<p><code>point(float,float)</code> dibuja un punto en el <em>sketch</em>. Eso es todo lo que hace. es una de las funciones más simples de <em>Processing </em>y es sin duda muy fácil de entender. Su utilidad se extienede a que nos muestra cómo está construido el sistema de coordenadas de <em>Processing </em>en la práctica.</p>
<pre>

<div id="attachment_567" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_0000.png"><img class="size-thumbnail wp-image-567" title="Render de point();" src="http://ddpde.files.wordpress.com/2009/08/tut_002_0000.png?w=150&#038;h=150" alt="Render de point();" width="150" height="150" /></a><p class="wp-caption-text">Render de point();</p></div>

size(300,300);
<strong>point(50,50)</strong>;</pre>
<p>Al ejecutar este pequeño y simplísimo <em>sketch </em>obtenemos la ventana de 300&#215;300 px con un pequeño punto en el lado superior izquierdo (un punto que sólo apreciarán si su monitor está bien limpio <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>El sistema de coordenadas para dibujo en <em>Processing </em>recorre la ventana de nuestro <em>sketch </em>de izquierda a derecha y de arriba a abajo, es muy importante comprender esto rápidamente y que quede impreso en nuestro subconsciente para poder tratar el sistema de coordenadas de forma intuitiva, sin que nos veamos sorprendidos por resultados inesperados. Nuestro primer puntito está a 50 px horizontalmente de (0,0) y a 50 px verticalemente de (0,0). Por eso aparece en la esquina superior izquierda, del otro lado de punto hay 250 px por recorrer hasta el borde derecho de la ventana y otros 250 px hasta el fondo de la esta.</p>
<h3>line();</h3>
<p>El siguiente paso sería dibujar una línea. Ello selogra con otra función muy simple y que usa los parámetros de forma similar a <code>point()</code>. La función que dibuja una línea es <code>line(float,float,float,float)</code>. Esta función necesita, a diferencia de point de cuatro parámetros, dos para las coordenadas de origen y dos para las coordenadas del final de la línea</p>
<pre>

<div id="attachment_569" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_2.png"><img class="size-thumbnail wp-image-569" title="Render de line();" src="http://ddpde.files.wordpress.com/2009/08/tut_002_2.png?w=150&#038;h=150" alt="Render de line();" width="150" height="150" /></a><p class="wp-caption-text">Render de line();</p></div>

size(300,300);         //hace la ventana de 300x300px
point(50,50);          //dibuja un punto
<strong>line(80,50,100,180);   //dibuja una línea</strong></pre>
<p>En este último ejemplo hice uso de dos barras inclinadas (<code>//</code>). El texto que se pone detrás de estas es un comentario. <em>Processing </em>ignora los comentarios cuando el <em>sketch </em>se ejecuta. Los comentarios son importantes porque nos ayudan a identificar las partes de nuestro <em>sketch </em>y a aclarar su funcionamiento para otros que estén viendo el código fuente. De nuevo, comprender el sistema de coordenadas que emplea <em>Processing </em>para renderizar es elemental para no perderse al ir convirtiendo en código nuestras intenciones visules. En este ejemplo, los primeros dos valores son las coordenadas del punto más alto y los otros dos los del punto final de la línea en la parte más baja.</p>
<h3>rect();</h3>
<p>Subimos la complejidad con una función más atrevida. <code>rect(float,float,float,float)</code> dibuja un rectángulo que comienza en las coordenadas que se introducen en los primeros dos parámetros. El tercer y el cuarto parámetro son las extensiones horizontal y vertical respectivamente. Si los dos valores de extensión son iguales tendremos un cuadrado. En otras palabras, las dos coordenadas que se introducen actúan como el punto de origen del rectángulo. Los dos campos de extensión pueden contener números negativos para extender el rectángulo en diferentes direcciones.</p>
<pre>

<div id="attachment_578" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_rect.png"><img class="size-thumbnail wp-image-578" title="Render con rect();" src="http://ddpde.files.wordpress.com/2009/08/tut_002_rect.png?w=150&#038;h=150" alt="Render con rect();" width="150" height="150" /></a><p class="wp-caption-text">Render con rect();</p></div>

size(300,300);         //hace la ventana de 300x300px
point(50,50);          //dibuja un punto
line(80,50,100,180);   //dibuja una línea
<strong>rect(150,150,60,40);   //un rectángulo que empieza en 150,150
rect(150,150,-60,-40);   //un rectángulo que empieza en 150,15</strong></pre>
<p>Los dos rectángulos que resultan de este <em>sketch</em> empiezan ambor en el medio de la ventana pero se extienden en sentidos contrarios debido a sus valores opuestos de extensión, el segundo rectángulo es el que está más arriba, de hecho, y le pasa por encima a la línea que dibujamos antes; esto es porque <em>Processing</em> dibuja las figuras más recientes sobre las más antíguas. Los valores negativos para dibujar diferentes figuras, tanto en su extensión como en sus coordenadas, aunque usar coordenadas negativas en este moemnto no tiene mucho sentido, porque nunca veremos nuestras figuras dentro de la ventana. El uso de coordenadas negativas se hará más útil cuando empecemos a estudiar el movimiento de las figuras a través de la ventana del <em>sketch</em>, pero por ahora dejo a su criterio el uso de estas a ustedes para que exploren el sistema de coordenadas de <em>Processing</em> en profundidad.</p>
<h3>ellipse();</h3>
<p>El dibujo de ellipse y círculos en <em>Processing </em>está gobernado por una sola función para ambas figuras: <code>ellipse(float,float,float,float)</code>.</p>
<p>La función dibuja un círculo o elipse  en las coordenadas de los dos primeros parámetros ysu estensión horizontal y vertical en los últimos dos parámetros introducidos en las función.</p>
<pre>

<div id="attachment_571" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_ellipse.png"><img class="size-thumbnail wp-image-571" title="Render con ellipse();" src="http://ddpde.files.wordpress.com/2009/08/tut_002_ellipse.png?w=150&#038;h=150" alt="Render con ellipse();" width="150" height="150" /></a><p class="wp-caption-text">Render con ellipse();</p></div>

size(300,300);           //hace la ventana de 300x300px
point(50,50);            //dibuja un punto
line(80,50,100,180);     //dibuja una línea
rect(150,150,60,40);     //un rectángulo que empieza en 150,150
rect(150,150,-60,-40);   //un rectángulo que empieza en 150,15
<strong>ellipse(50,250,40,40);   //un círculo abajo a la izquierda
ellipse(250,250,40,60);  //una elipse abajo a la derecha</strong></pre>
<p>En este último ejemplo se dibujan dos nuevas formas: una círculo abajo a la izquierda y una ellipse abajo a la derecha. A diferencia de <code>rect()</code>, <code>ellipse()</code> utiliza las coordenadas de los dos primeros parámetros pasados a la función para poner el centro del círculo y no un vértices de origen lateral. Sin embargo es posible hacer que <em>Processing </em>la dibuje desde la esquina del rectángulo circunscrito de la elipse con la función <a href="http://processing.org/reference/ellipseMode_.html"><code>ellipseMode()</code></a> (seguir el link para más detalles).</p>
<pre>

<div id="attachment_573" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_ellipsemode.png"><img class="size-thumbnail wp-image-573" title="Elipse extra modificada con ellipseMode();" src="http://ddpde.files.wordpress.com/2009/08/tut_002_ellipsemode.png?w=150&#038;h=150" alt="Elipse extra modificada con ellipseMode();" width="150" height="150" /></a><p class="wp-caption-text">Elipse extra modificada con ellipseMode();</p></div>

size(300,300);           //hace la ventana de 300x300px
point(50,50);            //dibuja un punto
line(80,50,100,180);     //dibuja una línea
rect(150,150,60,40);     //un rectángulo que empieza en 150,150
rect(150,150,-60,-40);   //un rectángulo que empieza en 150,15
ellipse(50,250,40,40);   //un círculo abajo a la izquierda
ellipse(250,250,40,60);  //una elipse abajo a la derecha
<strong>ellipseMode(CORNER);     //cambia el modo de dibujo de las elipses</strong>
<strong>ellipse(50,250,40,40);   //un círculo abajo a la izquierda desde la "esquina"</strong></pre>
<p>Supongo que hasta ahora se han preguntado: ¿Por qué todo en <em>Processing</em> luce &#8220;pixelado&#8221;? ¿Hay alguna forma de hacer los gráficos más suaves y agradables a los ojos?</p>
<p>La respuesta es sí, hay una forma, y es tan simple como llamar una función que ni siquiera necesita parámetros para funcionar; hay algo más cómodo que eso?</p>
<pre>

<div id="attachment_575" class="wp-caption alignright" style="width: 160px"><a href="http://ddpde.files.wordpress.com/2009/08/tut_002_smooth.png"><img class="size-thumbnail wp-image-575" title="Render con smooth();" src="http://ddpde.files.wordpress.com/2009/08/tut_002_smooth.png?w=150&#038;h=150" alt="Render con smooth();" width="150" height="150" /></a><p class="wp-caption-text">Render con smooth();</p></div>

size(300,300);           //hace la ventana de 300x300px
<strong>smooth();                //SUAVIZA LOS GRÁFICOS EN EL SKETCH</strong>
point(50,50);            //dibuja un punto
line(80,50,100,180);     //dibuja una línea
rect(150,150,60,40);     //un rectángulo que empieza en 150,150
rect(150,150,-60,-40);   //un rectángulo que empieza en 150,15
ellipse(50,250,40,40);   //un círculo abajo a la izquierda
ellipse(250,250,40,60);  //una elipse abajo a la derecha
ellipseMode(CORNER);     //cambia el modo de dibujo de las elipses
ellipse(50,250,40,40);   //un círculo desde la "esquina"</pre>
<p>Queda a su criterio seguir explorando estas funciones de dibujo de figuras básicas hasta que aprendan a usarlas al 100%.</p>
<h2>Suma:</h2>
<p>Muy similar a lo que pasa al aprender inglés o cualquier otro lenguaje, la programación requiere de algo de práctica y repetición para que los nuevos conceptos entren en la cabeza, algunos de nosotros requerirán más repetición que otros pero lo importante es que cada uno haga tanto como sea necesario para que los conceptos vayan entrando en la cabeza a un ritmo bueno para cada uno por separado.</p>
<p>Déjanos feedback, preguntas o infórmanos de cualquier error en este post dejando un comentario <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong></strong></p>
<p><strong><span>“Diario de PDE”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=270&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/13/capitulo-2-hola-mundo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_default_window.png" medium="image">
			<media:title type="html">Ventana predeterminada</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_ventana-despues-de-size_300.png?w=150" medium="image">
			<media:title type="html">Después de size(300,300);</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_0000.png?w=150" medium="image">
			<media:title type="html">Render de point();</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_2.png?w=150" medium="image">
			<media:title type="html">Render de line();</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_rect.png?w=150" medium="image">
			<media:title type="html">Render con rect();</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_ellipse.png?w=150" medium="image">
			<media:title type="html">Render con ellipse();</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_ellipsemode.png?w=150" medium="image">
			<media:title type="html">Elipse extra modificada con ellipseMode();</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/tut_002_smooth.png?w=150" medium="image">
			<media:title type="html">Render con smooth();</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 1: principios de programación en Processing.</title>
		<link>http://ddpde.wordpress.com/2009/07/13/capitulo-1-principios-de-programacion-en-processing/</link>
		<comments>http://ddpde.wordpress.com/2009/07/13/capitulo-1-principios-de-programacion-en-processing/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 01:58:53 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[algoritmos]]></category>
		<category><![CDATA[capítulo 1]]></category>
		<category><![CDATA[desarrollo incremental]]></category>
		<category><![CDATA[modularidad]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[sintaxis]]></category>
		<category><![CDATA[tipos de datos]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=273</guid>
		<description><![CDATA[Programar requiere de ciertas nociones propias de la tarea del programador; disciplina lógica y comprensión de las reglas de lenguaje que está se aprendiendo. Esta es una breve enumeración de los principios básicos de programación que es conveniente saber antes de empezar a aprender un lenguaje de programación. Los principios puestos en esta página son [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=273&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Programar requiere de ciertas nociones propias de la tarea del programador; disciplina lógica y comprensión de las reglas de lenguaje que está se aprendiendo. Esta es una breve enumeración de los principios básicos de programación que es conveniente saber antes de empezar a aprender un lenguaje de programación. Los principios puestos en esta página son prácticamente universales pero pueden variar sutilmente entre un lenguaje y otro. Estos son sólo unos pocos, con el tiempo veremos más ejemplos y aprenderemos más variables incluídas en la tarea del programador autodidacta.</p>
<p><span id="more-273"></span></p>
<h2>Desarrollo incremental.</h2>
<p>Es importante, durante el proceso de aprendizaje de un lenguaje de programación, olvidarse de que la facilidad con que se pueda aprender es sinónimo de empezar a hacer realidad las más alocadas fantasías de inmediato. Normalmente, aprender un lenguaje es un proceso progresivo, tan rápido como uno puede permitirse. En ese sentido, uno debe ser consciente de que la realización de nuestros objetivos requiere de varios pasos uno detrás del otro, llenando poco a poco los vacíos en nuestro conocimiento hasta que podamos concretar realmente nuestra visión.</p>
<p>Igualmente, el desarrollo de software, proyecto por proyecto, requiere ser enfrentado de forma tal en que se minimicen las complicaciones que resultan de tratar de completar un proyecto grande. Y el primer paso que uno toma es ir rompiendo el proyecto en pequeñas partes o módulos para ir resolviendo cada módulo por separado y luego integrar todo en un todo. Esto es desarrollo incremental, resolver las partes para luego sumarlas, poco a poco hasta tener resuelto todo el proyecto.</p>
<p>Si nuestro objetivo es hacer un juego de Tetris entonces podríamos hacer un seudo-código de cómo funcionaría nuestro programa:</p>
<ol>
<li><code>Crea las piezas.</code></li>
<li><code>Sortea las piezas aleatiramente.</code></li>
<li><code>Lanza una pieza hacia abajo hasta que la pieza se detiene al tocar el fondo u otra pieza.</code></li>
<li><code>Si una línea se rellena, quitarla de la pantalla.</code></li>
<li><code>Seleccionar una nueva pieza y ejecutar el paso 3 de nuevo.</code></li>
</ol>
<p>Esto es seudo-código, una serie de líneas en lenguaje humano que luego serán traducidas al lenguaje de <em>Processing</em>.</p>
<p>Podemos romper aún más el programa y hacerlo más detallado.</p>
<ol>
<li><code>Crear las piezas.</code></li>
<li><code>Sortear las piezas aleatoriamente.</code></li>
<li><code>Lanzar una pieza desde el tope de la ventana hacia abajo.</code></li>
<li><code>Verificar si la pieza toca alguna otra pieza o el fondo.</code></li>
<li><code>Si la pieza ha tocado otra pieza o el fondo, detenerla y dejarla en ese lugar. Saltar al paso 7.</code></li>
<li><code>Si la pieza no ha tocado otra pieza o el fondo, mover la pieza hacia abajo.</code></li>
<li><code>Verificar si la pieza rellena una fila de la pantalla.</code></li>
<li><code>Si la pieza rellena una fila, eliminar esa fila de la pantalla y mover todo lo que está encima hacia abajo.</code></li>
<li><code>Si la pieza no rellena una fila, ejecutar al paso 3.</code></li>
</ol>
<p>Romper el programa en pedazos pequeños ayuda a ver cada parte y a solucionarla más rápidamente.</p>
<h3>Modularidad:</h3>
<p>Además de romper el programa en secciones que podamos programar una a la vez, es bueno modularizarlo para identificar perfectamente de dónde vienen las eventuales fallas en el código. La modularización se puede ilustrar así:</p>
<pre>//Juego de Tetris ejemplo.
//¡Este código no es ejecutable!

//inicializa el programa
void setup() {
  creaYSorteaPiezas();
  lanzarPieza();
}

//Ejecución en loop
void draw() {
  <strong>dibujarPieza();</strong>
}

void dibujarPieza() {
  //código para dibujar la pieza activa
    moverPieza();
  if (hayContacto) {   //evalúa el contacto entre piezas
    detenerPieza();    //si hay contacto detiene la pieza
    if (rellenaFila) { //evalúa si rellena fila
      eliminaFila();   //si la rellena elimina esa fila
    }
  }
}

void moverPieza() {
  //código para mover la pieza activa
}

boolean hayContacto {
  //código de evaluación de contacto
  //si es cierto retorna true
  //si no retorna falso
}

boolean rellenaFila {
  //código de evaluación de relleno
  //si es cierto retorna true
  //si no retorna falso
}</pre>
<p>En el ejemplo de arriba vemos que en <code>draw()</code>, la cual es la función que ejecuta el <em>sketch </em>sólo tiene una llamada a la función <code>dibujarPieza()</code>, esto se traduce en que la función se ejecuta. Como <code>dibujarPieza()</code> contiene una serie de llamadas a las demás funciones uno puede ver, a partir del comportamiento del programa de dónde viene algún eventual malfuncionamiento en el sketch.</p>
<p>El <strong>Desarrollo Incremental</strong> permite aislar las partes del programa para poder <em>despulgar </em>cada una de estas separadamente, sin perder tiempo en encontrar errores en las otras funciones. Entre más diferenciadas son las funciones, más fácil es localizar el problema incluso con sólo basarse en la salida en pantalla del sketch.</p>
<h2>Algoritmos:</h2>
<p>Los algoritmos, en el sentido más simple de entenderlos, son una serie de instrucciones ordenadas en una secuencia para cumplir una tarea u objetivo. esta idea está estrechamente relacionada con El desarrollo incremental.</p>
<p>En el ejemplo de seudo-código de más arriba presentaba una lista de pasos para tener un juego de tetris corriendo (al menos en el nivel imaginario). De igual manera podemos desarrollar un algoritmo para evaluar cuándo la pieza toca otra pieza desde arriba o el fondo de la ventana:</p>
<ol>
<li><code>Luego de mover la pieza, obtener la distancia a todas las piezas.</code></li>
<li><code>Evaluar esa distancia respecto al tamaño de la pieza actual.</code></li>
<li><code>Si la distancia entre las dos piezas evaluadas es menor o igual al apotema de uno de los cuadritos de la pieza entonces detener la pieza.</code></li>
<li><code>Adicionalmente, si la distancia es menor a la del apotema de uno de los cuadritos de la pieza actual entonces llamar a la función que evalúa si la posición actual rellena una fila de cuadritos</code>.</li>
<li><code>Si la distancia no es menor entonces salir de acá y repetir el movimiento hacia abajo de la pieza actual.</code></li>
</ol>
<p>Así, se elaboran algoritmos para cada parte del programa y es más fácil atacar cada problema por separado, contribuyendo al Desarrollo incremental de nuestro programa. Estas prácticas se volverán necesarias conforme se avance en el conocimiento del ambiente <em>Processing </em>y en cuanto se entre a formas más sofisticadas de programación (Programación Orientada a Objetos [OOP en inglés]).</p>
<h2>Sintaxis y Ortografía:</h2>
<p>La sintaxis es el orden en que pondremos los comandos o instrucciones en el <strong>Editor</strong> de <em>Processing</em>.</p>
<p>A diferencia de los lenguajes humanos, en los que se permiten flexiones sintácticas para alterar el sentido de las palabras, la computadora necesita que se le diga cada cosa que debe hacer con algoritmos precisos y obedeciendo reglas sintácticas estrictas en las instrucciones que se le dan por medio de código.</p>
<p>La sintaxis en <em>Processing </em>es estricta, esto es, que debe escribirse cada instrucción en un orden lógico, correctamente, de lo contrario sucederán errores.</p>
<h2>Tipos de datos:</h2>
<p>Processing admite muchos diferentes tipos de datos que deben declararse, inicializarse y pasarse a funciones adecuadamente, el fallo en el cumplimiento de los requisitos de tipos de datos lleva a errores de ejcución en el software que escribamos.</p>
<p>Algunos de los tipos de tados que se utilizarán en nuestros programas son:</p>
<ul>
<li><code>int</code> que corresponde a números enteros. 1, 5, y 5440 son número enteros sin decimales.</li>
<li><code>float</code> Todos los números con un punto flotante 1.0, 5.1 y 5440,8 son todos números de tipo float.</li>
<li><code>String</code> y <code>char</code> corresponde a cadenas de caracteres válidos y a caracteres individuales, respectivamente.</li>
<li>Objetos:  los objetos son tipos de datos un poco más complicados que cubriremos en algún punto en el futuro.</li>
</ul>
<h2>Suma:</h2>
<p>La programación en Processing puede ser una experiencia placentera y enriquecedora, sin embargo si no se siguen unas pocas pautas de orden y conociemiento del funcionamiento del lenguaje y el ambiente, la tarea del programador en <em>Processing </em>se puede hacer tediosa e insufrible. Con el cuidado necesario es posible aprender Processing o cualquier otro lenguaje de programación en una forma fluída y cómoda. Para el programador autodidacta existe la libertad de seguir el propio ritmo de lectura y práctica, pero siempre la disposición es más importante a la hora de definir la curva de aprendizaje que uno podrá seguir en su aprendizaje.</p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong></strong></p>
<p><strong><span>“Diario de Processing”</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/273/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=273&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/13/capitulo-1-principios-de-programacion-en-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
		<item>
		<title>Capítulo 0: El Ambiente.</title>
		<link>http://ddpde.wordpress.com/2009/07/13/capitulo-0-el-ambiente/</link>
		<comments>http://ddpde.wordpress.com/2009/07/13/capitulo-0-el-ambiente/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 20:48:54 +0000</pubDate>
		<dc:creator>Jonathan Acosta</dc:creator>
				<category><![CDATA[Por Capítulos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ambiente]]></category>
		<category><![CDATA[capítulo 0]]></category>
		<category><![CDATA[introducción]]></category>
		<category><![CDATA[pde]]></category>
		<category><![CDATA[processing development environment]]></category>

		<guid isPermaLink="false">http://0p0media.com/processing/?p=223</guid>
		<description><![CDATA[Primer tutorial introductorio sobre el ambiente de programación Processing, el contenido de la ventana y sus funciones más básicas, una introducción suave al programa. Si aún no ha conseguido Processing visite http://processing.org/download/ y obtenga su copia gratuita . Algunas imágenes en este post se hacen grandes al clickar sobre ellas, busque las imágenes que contienen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=223&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-507" title="Processing Splash" src="http://ddpde.files.wordpress.com/2009/08/processing_code_splash.jpg" alt="Processing Splash" width="475" height="138" /></p>
<p>Primer tutorial introductorio sobre el ambiente de programación <em><a href="http://processing.org">Processing</a></em>, el contenido de la ventana y sus funciones más básicas, una introducción suave al programa. Si aún no ha conseguido <em>Processing </em>visite <a href="http://processing.org/download/">http://processing.org/download/</a> y obtenga su copia gratuita <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><span id="more-223"></span></p>
<p>Algunas imágenes en este post se hacen grandes al clickar sobre ellas, busque las imágenes que contienen links para ver mayor detalle de estas <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Processing Development Environment (PDE):</h2>
<p><em><strong>Processing</strong> </em>es un ambiente de desarrollo y un lenguaje de programación dirigido a estudiantes y artistas sin un conocimiento vasto (o sin conocimiento alguno del todo) de los principios y esquemas básicos que se necesitan en el desarrollo de software, pero que están interesados en introducirse por iniciativa propia en el mundo del código y la programación desde el campo de la generación de gráficos por computadora, desde simples imágenes planas hasta tremendos espacios virtuales en 3D.</p>
<p>El ambiente de la ventana está dividido en diferentes secciones con funciones muy bien definidas que aportan información esencial cuando estamos editando nuestros sketches.</p>
<h2>La ventana principal de <em>Processing</em>:</h2>
<p>Nuestras tareas de programación se llevarán a cabo en la ventana principal de <em>Processing</em>; la cual se divide en diferentes áreas con diferentes funciones:</p>
<h3>Barras Principales:</h3>
<p>Dentro de la ventana tenemos, hasta arriba, el <strong>Menú Principal</strong> con los comandos y herramientas avanzadas de desarrollo. Debajo de este, está la <strong>Barra de Herramientas</strong>, donde los comandos básicos residen, identificables gráficamente como:</p>
<p><img class="alignnone size-full wp-image-479" title="Barra de comandos de Processing" src="http://ddpde.files.wordpress.com/2009/08/pde_barra_de_comandos.jpg" alt="Barra de comandos de Processing" width="348" height="64" /></p>
<ol>
<li>Botón &#8220;<strong>Ejecutar</strong>&#8220;, que compila el <em>sketch </em>y lo pone a correr en vivo.</li>
<li>Botón &#8220;<strong>Detener</strong>&#8220;, que detiene la ejecución del <em>sketch</em>.</li>
<li>Botón &#8220;<strong>Nuevo</strong>&#8220;, que abre una nueva instancia de processing para programar un nuevo <em>sketch</em>.</li>
<li>Botón &#8220;<strong>Abrir</strong>&#8220;, con el que buscamos un <em>sketch </em>para abrirlo.</li>
<li>Botón &#8220;<strong>Guardar</strong>&#8220;, con el que se salvan los cambios hechos al <em>sketch </em>que estemos editando.</li>
<li>Botón &#8220;<strong>Exportar</strong>&#8220;, el cual genera un applet Java y el código necesario para ponerlo en Internet.</li>
</ol>
<p>Con estos botones se llevan acabo las operaciones básicas mientras se está editando nuestro <em>sketch</em>, aunque existen comandos de teclado para todos ellos, respectivamente:</p>
<ol>
<li><strong>Ctrl + R</strong></li>
<li><strong>Esc</strong></li>
<li><strong>Ctrl + N</strong></li>
<li><strong>Ctrl + O</strong></li>
<li><strong>Ctrl + S</strong></li>
<li><strong>Ctrl + E</strong></li>
</ol>
<p>Adicionalmente, existe un comando de teclado para ejecutar nuestro <em>sketch </em>en <em>modo de presentación</em>,  <strong>Ctrl + Mayús + R</strong> el cual pone a correr el <em>sketch </em>en su tamaño establecido pero con el resto de la pantalla vacío, relleno con un tono de gris.</p>
<p>Debajo de la Barra de Herramientas está la <strong>Barra de Pestañas</strong>,</p>
<p><img class="alignnone size-full wp-image-482" title="Barra de Pestañas" src="http://ddpde.files.wordpress.com/2009/08/pde_barra_pestanas.jpg" alt="Barra de Pestañas" width="492" height="33" /></p>
<p>Esta barra muestra cada uno de los documentos que ehemos creado en nuestro <em>sketch</em> como diferentes pestañas del mismo. En un sentido real, cada pestaña es un nuevo documento <em>.pde</em> en el que yace una parte de nuestro código. Más adelante, dentro de algunos capítulos más, veremos lo útil que es tener las cosas separadas de esta manera <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . La pequeña <strong>flecha</strong> en el extremo derecho de esta barra despliega un menú de tareas cuando es presionada. Estas tareas están relacionadas con la creación, renombrado y deleción de pestañas, además de la navegación a través de estas.</p>
<h3>El Editor:</h3>
<p>Debajo de lal barras principales encontramos el corazón de nuestra labor en Processing: el <em><strong>Editor</strong></em>.</p>
<p><img class="alignnone size-full wp-image-488" title="Editor principal de texto" src="http://ddpde.files.wordpress.com/2009/08/pde_editor.jpg" alt="Editor principal de texto" width="500" height="360" /></p>
<p>Esta es el área donde la mayor parte de la acción sucede, donde pondremos nuestros comandos, llamaremos funciones y crearemos todas las piezas de nuestros <em>sketches</em>. Entre las particularidades del <em>Editor </em>de <em>Processig </em>está el resaltado de las funciones que están en la biblioteca central del programa con un color anaranjado, esto nos ayudará a ver qué funciones nativas de <em>Processing </em>estamos escribiendo bien y cuáles tienen errores de escritura.</p>
<h3>El Área de Mensajes:</h3>
<p>Debajo del editor de texto está un área reservada por Procesing para imprimir mensajes importantes, notificaciones de errores y anuncios que Processing nos hace después de completar algunas tareas simples como salvar un documento.</p>
<p>Cuando un error ocurre el Área de Mensajes se pone deun color rojizo, y en el editor de texto, en la mayoría de los casos, aparece resaltado en amarillo el área del error en el que incurrimos, o una zona cercana a este para que inspeccionemos nuestro código en busca de nuestro bug y lo aniquilemos con certeros teclazos.</p>
<p><img class="alignnone size-full wp-image-491" title="Area de mensajes (roja a causa de un error en el codigo)" src="http://ddpde.files.wordpress.com/2009/08/pde_error.jpg" alt="Area de mensajes (roja a causa de un error en el codigo)" width="492" height="183" /></p>
<h3>La Consola de Texto:</h3>
<p>Finalmente, en el fondo de la ventana, ese área negra es nuestra érea de texto de consola, en esta aparecen mensajes de errores con información técnica de lo ocurrido y nuestros propios comandos pueden aparecer en ella también. La consola de texto nos puede servir muy bien cuando estemos <em>despulgando </em>nuestro software imprimiendo mensajes que confirman la ejecución de nuestros comandos. Esta parte de la ventana cuenta con su propia barra de scroll para poder visualizar mensajes largos o impresos en ella previamente y en la esquina inferior izquierda nos muestra en qué línea estamos ubicados en el <strong>Editor</strong>.</p>
<p><img class="alignnone size-full wp-image-485" title="Area de consola" src="http://ddpde.files.wordpress.com/2009/08/pde_consola.jpg" alt="Area de consola" width="500" height="94" /></p>
<h2>Processing en vivo:</h2>
<div id="attachment_498" class="wp-caption alignright" style="width: 135px"><a href="http://ddpde.files.wordpress.com/2009/08/pde_sketch_corriendo.jpg"><img class="size-thumbnail wp-image-498" title="Sketch corriendo en vivo" src="http://ddpde.files.wordpress.com/2009/08/pde_sketch_corriendo.jpg?w=125&#038;h=150" alt="Sketch corriendo en vivo" width="125" height="150" /></a><p class="wp-caption-text">Sketch corriendo en vivo</p></div>
<p>Una vez que se ha editado un <em>sketch </em>y se presiona el botón Ejecutar o <strong>Ctrl + R</strong>, <em>Processing </em>hace aparecer sobre todas las ventanas nuestro <em>sketch </em>corriendo en vivo, calculado en tiempo real o no, pero siempre, el resultado de nuestras líneas introducidas en el Editor. Si uno vuelve al Editor cambia algo y vuelve a ejecutar el programa, la ventanita anterior se cerrará y será remplazada por la nueva versión.</p>
<h2>Suma:</h2>
<p>Estas son las características básicas del ambiente de programación Pocessing, pueden ver una referencia más completa en Inglés <a href="http://processing.org/reference/environment/">acá</a>. Muchas de las funciones adicionales enueradas en esa página del sitio oficial serán tratadas en detalle en próximos posts.</p>
<p>Por favor infórmenos de cualquier error o actualización en este artículo dejando un comentario más abajo, apreciamos sus contribuciones.</p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es"><img class="alignnone" style="border-width:0;" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt="Creative Commons License" width="88" height="31" /></a><strong> </strong></p>
<p><strong><span>&#8220;Diario de PDE&#8221;</span></strong> está licenciado bajo licencia de <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.es">Creative Commons: Reconocimiento-Compartir bajo la misma licencia 3.0 Genérica</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ddpde.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ddpde.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ddpde.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ddpde.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ddpde.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ddpde.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ddpde.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ddpde.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ddpde.wordpress.com&amp;blog=8958217&amp;post=223&amp;subd=ddpde&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ddpde.wordpress.com/2009/07/13/capitulo-0-el-ambiente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2912b3016988f6d3d0c655fd4bb4cf14?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">0p0</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/processing_code_splash.jpg" medium="image">
			<media:title type="html">Processing Splash</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/pde_barra_de_comandos.jpg" medium="image">
			<media:title type="html">Barra de comandos de Processing</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/pde_barra_pestanas.jpg" medium="image">
			<media:title type="html">Barra de Pestañas</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/pde_editor.jpg" medium="image">
			<media:title type="html">Editor principal de texto</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/pde_error.jpg" medium="image">
			<media:title type="html">Area de mensajes (roja a causa de un error en el codigo)</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/pde_consola.jpg" medium="image">
			<media:title type="html">Area de consola</media:title>
		</media:content>

		<media:content url="http://ddpde.files.wordpress.com/2009/08/pde_sketch_corriendo.jpg?w=125" medium="image">
			<media:title type="html">Sketch corriendo en vivo</media:title>
		</media:content>

		<media:content url="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" medium="image">
			<media:title type="html">Creative Commons License</media:title>
		</media:content>
	</item>
	</channel>
</rss>
