aprendizaje:processing
Diferencias
Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
aprendizaje:processing [2014/12/02 14:47] – creado sepulveda | aprendizaje:processing [2020/02/11 17:18] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | aqui voy a documentar | + | ====== PROCESSING – ¿ CÓMO EMPEZAR ¡ ? ====== |
+ | |||
+ | **Índice** | ||
+ | |||
+ | ===== Capitulo 1: Hola. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | 010-101110001. ¿ Que es y para que sirve la programación ? | ||
+ | |||
+ | Que es Processing.</ | ||
+ | |||
+ | ===== Capitulo 2: Empezando con el código. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Nuestro primer programa: Dibujando un circulo. | ||
+ | |||
+ | Exportando/ | ||
+ | |||
+ | Ejemplos y referencia.</ | ||
+ | |||
+ | ===== Capitulo 3: Dibujo. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Orden de los dibujos. | ||
+ | |||
+ | Propiedades de las formas. | ||
+ | |||
+ | Color. | ||
+ | |||
+ | Formas personalizadas. | ||
+ | |||
+ | Comentarios.</ | ||
+ | |||
+ | ===== Capitulo 4: Variables. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Las variables (constantes) de Processing | ||
+ | |||
+ | Un poco de Matemáticas | ||
+ | |||
+ | Repetición</ | ||
+ | |||
+ | ===== Capitulo 5: Respuesta ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Mapear | ||
+ | |||
+ | Click | ||
+ | |||
+ | Ubicación | ||
+ | |||
+ | Tipo</ | ||
+ | |||
+ | ===== Capitulo 6: Trabajando con archivos Digitales ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Continuo y discreto. (JPG vs SVG). | ||
+ | |||
+ | Imágenes. | ||
+ | |||
+ | Tipografías. | ||
+ | |||
+ | Formas.</ | ||
+ | |||
+ | ===== Capitulo 7: Animación. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Interpolación. | ||
+ | |||
+ | Aleatoriedad. | ||
+ | |||
+ | Temporizadores. | ||
+ | |||
+ | Movimientos circulares. | ||
+ | |||
+ | Trasladar, rotar y escalar.</ | ||
+ | |||
+ | ===== Capitulo 8: Funciones. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Haciendo una función. | ||
+ | |||
+ | Valores de retorno.</ | ||
+ | |||
+ | ===== Capitulo 9: Objetos. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | ===== Capitulo 10: Vectores. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Repetición y Vectores. | ||
+ | |||
+ | Vectores y Objetos.</ | ||
+ | |||
+ | ===== Extensión. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Exportando Imágenes. | ||
+ | |||
+ | Comunicación con otros programas. (Arduino, Puredata) | ||
+ | |||
+ | Comunidad.</ | ||
+ | |||
+ | ===== Apéndices. ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | Tipos de datos. | ||
+ | |||
+ | Orden de las operaciones.</ | ||
+ | |||
+ | ===== Capitulo 1: Hola. ===== | ||
+ | |||
+ | ==== Breve introducción a los pioneros de los gráficos por computador. ==== | ||
+ | |||
+ | La descripción técnica de computación grafica sería la actividad encargada de generar gráficos para cambiar la información visual del mundo real. Pero no es desde que la invención de programas como Pothosop, Ilustrator o Gimp que se empezaron a generar y [1]procesar imágenes por computador. Inclusive podemos remontarnos a la década de los 60’, cuando Ivan Sutherland invento el primer programa informático que permitía manipular objetos gráficos por ordenador [2]SketchPad; | ||
+ | |||
+ | ==== 010-101110001. ¿ Que es y para que sirve la programación ? ==== | ||
+ | |||
+ | “Crear con un ordenador es el arte de comprender la naturaleza de lo digital, entender los principios que rigen el pensamiento de las máquinas. Los ordenadores ejecutan programas que están construidos a partir de un conjunto muy simple de operaciones que, combinadas, resuelven problemas complejos. Los mismos algoritmos que se utilizan para realizar cálculos matemáticos, | ||
+ | |||
+ | En palabras muy sencillas, describiremos que es programar en dos aspectos: El primero; programar es entender un lenguaje [3]sintáctico, | ||
+ | |||
+ | En nuestro caso, programar seria dibujar algo, procesar una imagen, representar un sonido por medio de figuras y colores, en resumen; programar será lo que nuestra mente se imagine y sea posible hacer por medio de una computadora. | ||
+ | |||
+ | //1 Procesar:// Es mejorar la calidad de la imagen o facilitar la búsqueda de información en esa imagen: color, formas, objetos._ | ||
+ | |||
+ | //2 SketchPad:// | ||
+ | |||
+ | //3 sintáctico:// | ||
+ | |||
+ | ### Que es Processing. | ||
+ | |||
+ | Processing fue desarrollado por Ben Fry y Casey Reas. Es un software para inventar imágenes, diseñar animaciones, | ||
+ | |||
+ | Processing ofrece la oportunidad de aprender programación a través de la creación de gráficos interactivos. Existen muchas maneras de enseñar a escribir código, pero generalmente los estudiantes encuentran un estimulo al escuchar un sonido o ver una imagen como respuesta inmediata después de escribir líneas de código. | ||
+ | |||
+ | Processing es un proyecto OpenSource, eso quiere decir que su [6]código fuente es libre y esta al servicio de quien lo desee para mejorarlo o expandirlo. Existe una gran comunidad de colaboradores que a diario están en la internet respondiendo preguntas sobre el lenguaje. | ||
+ | |||
+ | //4 Visualización de datos:// Es una disciplina que usa el poder de la comunicación de las imágenes para dar un significado estadístico de un proceso actual entre las masas sociales. | ||
+ | |||
+ | //5 Diseño de interacción:// | ||
+ | |||
+ | //6 Código fuente:// En el desarrollo de software existe una cadena de producción. Una de las primeras es el código fuente y el código objeto. El código objeto es la aplicación como tal, Word, Excel o Paint son programas objeto, el código fuente son las líneas de código que hay detrás de la aplicación. | ||
+ | |||
+ | ===== Capitulo 2: Empezando con el codigo. ===== | ||
+ | |||
+ | ==== El ambiente de desarrollo Processing o IDE. ==== | ||
+ | |||
+ | Para sacar el máximo potencial de este tutorial, necesitas mas que solo leer las palabras que están aquí escritas. Necesitas practicar, equivocarte y experimentar. No puedes aprender a programar solo leyendo, necesitas también hacerlo. Entonces para empezar, descargaremos Processing y realizaremos nuestro primer dibujo. | ||
+ | |||
+ | Empieza visitando [[http:// | ||
+ | |||
+ | 1.En Linux, tendrás un archivo .tar.gz, después de descargarlo en tu [7]directorio home. Por favor abre una ventana de terminal, y escribe: | ||
+ | |||
+ | < | ||
+ | {{: | ||
+ | |||
+ | El comando anterior, sirve para descomprimir el archivo que acabaste de descargar. Luego, para acceder a esa carpeta, escribiremos lo siguiente en la terminal: | ||
+ | |||
+ | < | ||
+ | y presionamos la tecla enter. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Si quieres ver el contenido de la carpeta, escribe el comando //ls//, que significa listar todos los elementos que tenemos en la carpeta. Finalmente para hacer correr Processing, escribimos | ||
+ | |||
+ | < | ||
+ | {{: | ||
+ | |||
+ | con algo de suerte y un poco de paciencia, podrás ver el IDE de Processing en tu pantalla. Todos los setups son diferentes, si posees algún problema y el programa no empieza, podrás empezar de otra manera, dirigirte a los foros, donde haya podrán resolverte el problema. [[http:// | ||
+ | |||
+ | 2.En Windows, tendrás un archivo .zip. Haz doble click, y arrastra la carpeta dentro de una ubicación en tu disco duro. Podría ser Archivos de programa o simplemente tu escritorio, pero lo importante es que la carpeta Processing sea colocada fuera de ese archivo .zip. Luego das doble click a processing.exe para empezar. | ||
+ | |||
+ | 3.En Mac OSX, la versión esta en un archivo de imagen de disket (.dmg). Arrastra el icono de Processing a la carpeta Applications. Si algunas veces usas ese computador y no es posible modificar la carpeta Applications, | ||
+ | |||
+ | //7 Directorio:// | ||
+ | |||
+ | ==== Nuestro primer programa: Dibujando un circulo. ==== | ||
+ | |||
+ | **Antes de empezar:** Todos los ejemplos de código de este tutorial, están alojados en este repositorio de git, en la carpeta llamada Getting started. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Ahora que tenemos funcionando el entorno de desarrollo Processing. Describiremos un poco que posee, la parte blanca larga es el editor de texto y es allí donde escribiremos las líneas de código. La fila de botones en la parte superior se llama barra de herramientas y de izquierda a derecha tenemos los botones de: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | - **Play:** ejecuta nuestro código. | ||
+ | - **Stop:** para nuestro código. | ||
+ | - **New:** abre una ventana nueva. | ||
+ | - **Open:** abre un archivo guardado en nuestro computador. | ||
+ | - **Save:** guarda nuestro programa en el computador. | ||
+ | - **Export:** exporta nuestro programa como una aplicación de escritorio. Debajo del editor de texto tenemos la consola, que es una área de mensajes que nos mostrara detalles técnicos de nuestro código. La analizaremos mas adelante. Por ahora empezaremos con nuestro primero programa en Processing. | ||
+ | |||
+ | ==== Ejemplo 1 Dibujando un Circulo. ==== | ||
+ | |||
+ | En el editor, escribe lo siguiente: | ||
+ | |||
+ | < | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Esta línea de código es un método para “dibujar un circulo”, felicidades, | ||
+ | |||
+ | No entraremos en detalles sobre esta línea de código, simplemente estamos iniciando con una pequeña muestra sobre lo que podemos hacer con Processing, mas adelante entraremos en detalles. | ||
+ | |||
+ | Si tienes escrita la línea correctamente, | ||
+ | |||
+ | Una de las cosas complicadas para empezar con la programación, | ||
+ | |||
+ | Después, seguiremos adelante con nuestro [8]sketch que se pondrá mas interesante. | ||
+ | |||
+ | ==== Ejemplo 2 Dibujando círculos ==== | ||
+ | |||
+ | Borra la línea de código anterior, y ahora prueba este código: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(480, 120); | ||
+ | smooth(); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | if (mousePressed) | ||
+ | { | ||
+ | fill(0); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | fill(255); | ||
+ | } | ||
+ | |||
+ | ellipse(mouseX, | ||
+ | }</ | ||
+ | |||
+ | Hablemos un poco sobre este programa: este programa crea un ventana de 480 pixeles de ancho y 120 pixeles de alto; y dibuja círculos en la posición del mouse. Cuando el botón del mouse es presionado, el color de circulo cambia a negro, y cuando se suelta vuelve a su color original. Explicaremos mas adelante los detalles de este código, por ahora; corre el código, mueve el mouse y diviértete ☺. | ||
+ | |||
+ | ==== Atajos. ==== | ||
+ | |||
+ | Si no queremos usar los botones, siempre puedes usar los atajos del teclado. Para correr el sketch puedes teclear Ctrl-R (en Windows y linux) o Cmd-R en Mac. Puedes usar también la opción Present, que mostrara tu sketch en pantalla completa, ideal para presentaciones o instalaciones. La puedes encontrar en el menú sketch en Processing. Para guardar tu proyecto puedes usar el icono anteriormente mencionado o usar Ctrl-S (Windows y linux) o Cmd-S (Mac). Por defecto, todos tus sketch estarán guardados en “sketchbook”. Que es una carpeta que guarda tus programas para un fácil acceso. Normalmente esta alojada en el directorio documentos en tu computadora. Clicando sobre el botón abrir en la barra de herramientas (la flecha apuntando hacia arriba) podremos abrir una lista de todos tus programas (sketches) en tu carpeta sketchbook, también hay una lista con ejemplos instalados en el software Processing. A menudo es bueno obtener correctas rutinas de programación, | ||
+ | |||
+ | **8 sketch:** Suele llamárseles a los programas realizados en processing. | ||
+ | |||
+ | ==== Exportando/ | ||
+ | |||
+ | Otro tema importante de Processing es compartir tu trabajo. El botón de exportar en la barra de herramientas. (flecha apuntando hacia la derecha). Este botón lo que hace es que agrupa | ||
+ | |||
+ | ==== Ejemplos y referencia ==== | ||
+ | |||
+ | Aprender a programar con Processing implica explorar muchos códigos: correrlos, alterarlos, romperlos, y repasarlos hasta tener algo nuevo en base a la experimentación. Con esto en mente, en la descarga del software Processing se incluyen decenas de ejemplos de demostración, | ||
+ | |||
+ | La referencia de Processing explica cada elemento de código con una descripción y algunos ejemplos. La referencia usualmente son programas muy cortos (usualmente cuatro o cinco líneas) y son más fáciles de entender que los códigos largos en la carpeta de ejemplos. Recomendamos abrir la referencia cuando estés leyendo este libro y cuando estés programando. | ||
+ | |||
+ | **9 metodo:** Suele llamarsele metodo a una porción de codigo que esta dentro de una clase y que tiene alguna funcionalidad. | ||
+ | |||
+ | ===== Capitulo 3: Dibujo. ===== | ||
+ | |||
+ | ==== Formas básicas. ==== | ||
+ | |||
+ | Lo primero que hay que saber, es que dibujar sobre una pantalla de computador es como trabajar en una hoja cuadriculada. Primero empezamos paso por paso, teniendo un proceso técnico cuidadoso. Empezaremos dibujando formas simples que luego se expandirán a la animación y la interacción. Pero empecemos por el principio. Una pantalla de computador es una red de luces con elementos llamados pixeles. Cada pixel tiene una posición en la pantalla definida por coordenadas. El eje de coordenadas x es la distancia horizontal desde el origen y el eje de coordenadas y es la distancia vertical. En Processing, el origen es la esquina superior izquierda de la ventana de representación y coordina los valores hacia abajo y hacia la derecha. La imagen de la izquierda muestra el sistema de coordenadas, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Como muestra el ejemplo anterior, si queremos dibujar un pixel en la pantalla; | ||
+ | |||
+ | La pantalla es creada y las imágenes son dibujadas adentro de esta a través de elementos del código llamados funciones. Las funciones son los ladrillos básicos de un programa de Processing. El comportamiento de una función es definida por sus parámetros, | ||
+ | |||
+ | ==== Ejemplo 1. Dibujar una ventana. ==== | ||
+ | |||
+ | La función //size()// tiene dos parámetros: | ||
+ | |||
+ | < | ||
+ | Corra este línea de código para ver el resultado. Experimente a escribir diferentes números para ver que resulta. Intente con números muy pequeños y números mas grandes que los de su ventana. | ||
+ | |||
+ | ==== Ejemplo 2. Dibujar un punto. ==== | ||
+ | |||
+ | Para establecer el color de un solo pixel en la ventana, usamos la función // | ||
+ | |||
+ | < | ||
+ | point(100, 100);</ | ||
+ | {{: | ||
+ | |||
+ | ==== Formas básicas. ==== | ||
+ | |||
+ | Processing incluye un grupo de funciones para dibujar formas básicas. Las formas simples como las líneas pueden ser combinadas para crear formas más complejas como una hoja o una cara. Para dibujar una sola línea, necesitamos cuatro parámetros: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Ejemplo 2: Dibujar una línea. ==== | ||
+ | |||
+ | Para dibujar una línea entre las coordenadas (20, 50) y (420, 110), intenta: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | line(20, 50, 420, 110);</ | ||
+ | ==== Ejemplo 3: Dibujando formas básicas. ==== | ||
+ | |||
+ | Siguiendo este patrón, un triángulo necesita seis parámetros y un cuadrilátero necesita 8 (un par por cada punto): | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | quad(158, | ||
+ | triangle(347, | ||
+ | triangle(158, | ||
+ | ==== Ejemplo 4: dibujando un rectángulo ==== | ||
+ | |||
+ | Los rectángulos y círculos son definidos con cuatro parámetros: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | rect(180, 60, 220, 40);</ | ||
+ | ==== Ejemplo 5: dibujar un circulo. ==== | ||
+ | |||
+ | Las coordenadas x y Y de un rectángulo son las de la esquina superior izquierda, pero en un circulo son las del centro de la forma. En este ejemplo, notamos que la coordenada Y para el primer circulo esta fuera de la ventana. Los objetos pueden ser dibujados parcialmente (o enteramente) fuera de la ventana sin ningún error. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | ellipse (278, | ||
+ | ellipse (120, | ||
+ | ellipse (412, | ||
+ | ==== Ejemplo 6: dibujar parte de un circulo (arcos). ==== | ||
+ | |||
+ | La función arc() dibuja parte de un circulo. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | arc (90, | ||
+ | arc (190, | ||
+ | arc (290, | ||
+ | arc (390, | ||
+ | |||
+ | En esta función, el primer y segundo parámetro establecen la ubicación, el tercero y cuarto establecen el ancho y el largo. El quinto parámetro establece el ángulo para empezar el arco, y finalmente, el sexto fija donde para el ángulo. Los ángulos están establecidos en [10]radianes, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== EJERCICIOS !!! ==== | ||
+ | |||
+ | Intenta escribir un programa que dibuje 4 líneas y que toque cada esquina de tu pantalla. Intenta dibujar líneas verticales, horizontales y diagonales. Mira un ejemplo aquí: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Solucion. | ||
+ | |||
+ | < | ||
+ | line(0, 0, 500, 500); | ||
+ | line(500, 0, 0, 500); | ||
+ | line(0, 250, 500, 250); | ||
+ | line(250, 0, 250, 500);</ | ||
+ | **10 radianes:** Representa el ángulo central en una circunferencia y abarca un arco cuya longitud es igual a la del radio. | ||
+ | |||
+ | ===== Orden de los dibujos. ===== | ||
+ | |||
+ | Cuando un programa de computadora esta corriendo, el computador empezará por la primera línea de código escrita y terminara en la ultima escrita, después parará. Tener esto en mente es importante, porque así tendremos en cuenta cual será el ultimo dibujo que veremos en pantalla. | ||
+ | |||
+ | ==== Ejemplo 7: Orden de los dibujos. ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | ellipse (140, | ||
+ | |||
+ | < | ||
+ | Se puede pensar como si estuviéramos dibujando un circulo y un rectángulo. Si primero dibujamos el circulo y luego el rectángulo encima del circulo. Una zona del circulo no será expuesta debido a que el rectángulo opaca esa zona. | ||
+ | |||
+ | ## Propiedades de las formas. | ||
+ | |||
+ | En Processing, las formas básicas tienen una funciones que determinan de que forma ellas se trazaran el la pantalla. Veremos las mas básicas pero existen muchas otras. | ||
+ | La función _smooth()_ alisa los bordes de las líneas dibujadas en la pantalla, mezclando los bordes con el valor del pixel más cercano. Si el alisamiento ya esta fijado, por el contrario, la función _noSmooth()_ desmontara la funcionalidad de alisado. | ||
+ | |||
+ | _ | ||
+ | </ | ||
+ | size (480,120); smooth(); %%//%% Fijamos el alisado ellipse(140, | ||
+ | |||
+ | **NOTA:** Algunas de las implementaciones de Processing (como la versión para JavaScript) siempre serán formas lisas; otras podrían no admitir el alisado del todo. En algunas situaciones, | ||
+ | |||
+ | ==== Ejemplo 9: Establecer el grosor de las formas. ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | ellipse (75, | ||
+ | strokeWeight (8); // Grosor del trazo de 8 pixeles | ||
+ | ellipse (175, | ||
+ | ellipse (279, | ||
+ | strokeWeight(20); | ||
+ | ellipse (389, | ||
+ | ==== Ejemplo 10: Estableciendo los atributos del trazo. ==== | ||
+ | |||
+ | La función // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | strokeWeight(12); | ||
+ | strokeJoin(ROUND); | ||
+ | rect(40, | ||
+ | strokeJoin (BEVEL); // bisel de la esquina del trazo | ||
+ | rect (140, | ||
+ | strokeCap (SQUARE); // los finales de línea son cuadrados | ||
+ | line(270, | ||
+ | strokeCap (ROUND); // los finales de línea son redondos | ||
+ | line(350, | ||
+ | **NOTA:** La colocación de formas como //rect()// y // | ||
+ | |||
+ | ==== Color. ==== | ||
+ | |||
+ | Hasta ahora todas las forma se han llenado de blanco con líneas negras, y el fondo de la pantalla de dibujo ha tenido una luz gris. Para cambiarlos, usa las funciones // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Una muestra de diferentes valores de gris en un fondo negro. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | background (0); // Negro | ||
+ | fill (204); | ||
+ | ellipse (132, 82, 200, 200); | ||
+ | fill (153) ; // | ||
+ | ellipse (228, -16, 200,200 ); | ||
+ | fill(102); | ||
+ | ellipse (268, 118, 200, 200); </ | ||
+ | |||
+ | ==== Controlando el relleno y el trazo. ==== | ||
+ | |||
+ | Puedes inhabilitar el trazado así que habrá trazo sin // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | fill (153); | ||
+ | ellipse (132, 82, 200, 200); | ||
+ | noFill(); | ||
+ | ellipse (228, -16, 200, 200); | ||
+ | noStroke (); | ||
+ | ellipse (268, 118, 200, 200); // no se dibuja</ | ||
+ | Sea cuidadoso de no inhabilitar el relleno y el trazo al mismo tiempo, como lo hemos hecho en el ejemplo anterior. Porque nada quedará dibujado en la pantalla. | ||
+ | |||
+ | ==== Dibujar con color ==== | ||
+ | |||
+ | Para ir más allá de los valores de la escala de grises, usaremos 3 parámetros para especificar las componentes rojo, verde y azul de un color. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | noStroke (); | ||
+ | smooth (); | ||
+ | blackground (0, 26, 51); | ||
+ | fill (255, 0, 0); // rojo | ||
+ | ellipse (132, 82, 200, 200); | ||
+ | fill (0, 255, 0); // verde | ||
+ | ellipse (228, -16, 200, 200); | ||
+ | fill (0, 0 , 255); // Azul | ||
+ | ellipse (268, 118, 200, 200);</ | ||
+ | Por defecto, podemos trabajar color en escala de grises o color RGB, el cual viene de la definición del color de las pantallas de los computadores. Los tres valores standard son rojo, verde y azul; y su rango que va desde 0 a 255. La forma en que los valores del gris lo hacen usando el color RGB no es muy intuitiva, así que para escoger los colores, usa Tools -> color selector (herramientas-> | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Transparencia ==== | ||
+ | |||
+ | Agregando un cuarto parámetro adicional a //fill()// o // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | noStroke(); | ||
+ | smooth (); | ||
+ | background (204, | ||
+ | fill ( 255, 0, 0, 160); | ||
+ | ellipse (132, 82, 200, 200); | ||
+ | fill (0, 255, 0, 160); | ||
+ | ellipse (228, -16, 200, 200); | ||
+ | fill (0, 0, 255, 160); | ||
+ | ellipse (268, 118, 200, 200);</ | ||
+ | |||
+ | ==== Formas personalizadas. ==== | ||
+ | |||
+ | No estás limitado a usar las figuras geométricas básicas, también puedes definir nuevas formas conectando una serie de puntos. | ||
+ | |||
+ | ==== Ejemplo 11: Dibujar una flecha. ==== | ||
+ | |||
+ | La función // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | beginShape (); | ||
+ | vertex (180, 82); | ||
+ | vertex (207, 36); | ||
+ | vertex (214, 63); | ||
+ | vertex (407, 11); | ||
+ | vertex (412, 30); | ||
+ | vertex (219, 82); | ||
+ | vertex (226, 109); | ||
+ | endShape();</ | ||
+ | ==== Ejemplo 12: Cerrando las formas personalizadas. ==== | ||
+ | |||
+ | Cuando se ejecuta el código anterior, puedes ver que el primer y el último punto no están conectados. Para hacer esto, agrega la palabra CLOSE (cerrar) como un parámetro en // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | beginShape(); | ||
+ | vertex (180, 82); | ||
+ | vertex (207,36); | ||
+ | vertex (214, 63); | ||
+ | vertex (407, 11); | ||
+ | vertex (412, 30); | ||
+ | vertex (219, 82); | ||
+ | vertex (226, 109); | ||
+ | endShape (CLOSE);</ | ||
+ | ==== Comentarios. ==== | ||
+ | |||
+ | Los ejemplos de este capítulo usan doble slash %%//%% al final de una línea para agregar comentarios en el código. Los comentarios hacen parte del programa y son ignorados cuando el programa está corriendo. Son útiles para hacer notas explicando que hay en el código. Si otro está leyendo tu código, los comentarios son especialmente importantes para ayudar a entender tu proceso de pensamiento. | ||
+ | |||
+ | Los comentarios son especialmente importantes para diferentes opciones, como cuando estamos intentando escoger el color correcto. Así que, por ejemplo, podría estar intentando encontrar el rojo correcto para un circulo: | ||
+ | |||
+ | < | ||
+ | fill (165, 57, 57); | ||
+ | ellipse (100, 100, 80, 80);</ | ||
+ | Ahora supongo que quiero intentar con otro rojo diferente, pero no quiero perder el viejo. Puedo copiar y pegar la línea, hacer un cambio, y luego “comentar” el viejo: | ||
+ | |||
+ | < | ||
+ | //fill (165, 57, 57); | ||
+ | fill (144, 39, 39); | ||
+ | ellipse (100, 100, 80, 80);</ | ||
+ | Colocando %%//%% al comienzo de la línea se desactiva temporalmente. O puedo remover el %%//%% y colocarlo en frente de la otra línea si quiero intentarlo de nuevo: | ||
+ | |||
+ | < | ||
+ | fill (165, 57, 57); | ||
+ | //fill (144, 39, 39); | ||
+ | ellipse (100, 100, 80, 80);</ | ||
+ | |||
+ | ==== Proyecto 1. ==== | ||
+ | |||
+ | Finalizado un capitulo, realizaremos un proyecto. Esta vez realizaremos un pequeño dibujo en Processing a partir de un boceto, con este boceto; iremos trabajando cada final del proyecto, añadiéndole funcionalidades y aplicando todo lo aprendido finalizando cada capitulo. | ||
+ | |||
+ | Para empezar una idea visual, es ideal primero dibujar, crear un pequeño boceto de que es lo que se quiere plasmar en la pantalla. | ||
+ | |||
+ | Yo escogí un satélite, porque me parecen una tecnología muy interesante y visualmente atractiva. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Aproximadamente, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | |||
+ | size(500, 500); | ||
+ | smooth(); | ||
+ | |||
+ | // color del fondo | ||
+ | background(255); | ||
+ | |||
+ | // Centro del satelite | ||
+ | ellipseMode(CENTER); | ||
+ | fill(172, 178, 177); | ||
+ | noStroke(); | ||
+ | ellipse(250, | ||
+ | |||
+ | strokeWeight(3); | ||
+ | stroke(0); | ||
+ | line(220, 275, 275, 220); | ||
+ | line(230, 285, 285, 230); | ||
+ | |||
+ | // antena | ||
+ | rectMode(CORNER); | ||
+ | noStroke(); | ||
+ | rect(243, 150, 15, 60); | ||
+ | rect(243, 290, 15, 60); | ||
+ | |||
+ | ellipseMode(CENTER); | ||
+ | noStroke(); | ||
+ | ellipse(250.5, | ||
+ | ellipse(250.5, | ||
+ | |||
+ | // Laterales | ||
+ | rectMode(CORNER); | ||
+ | rect(185, 249, 20, 10); | ||
+ | rect(295, 249, 20, 10); | ||
+ | |||
+ | // alas | ||
+ | quad( 50, 220, 185, 190, 185, 310, 50, 280); | ||
+ | quad( 315, 190, 450, 220, 450, 280, 315, 310); | ||
+ | stroke(0); | ||
+ | strokeWeight(3); | ||
+ | line(55, 225, 175, 200); | ||
+ | line(55, 275, 175, 300); | ||
+ | line(320, 300, 445, 275); | ||
+ | line(320, 200, 445, 225);</ | ||
+ | **NOTA:** Todos los codigos escritos en este tutorial, estan en la carpeta de este repo llamada Getting Started. | ||
+ | |||
+ | ===== Capitulo 4: Variables. ===== | ||
+ | |||
+ | ==== Haciendo variables. ==== | ||
+ | |||
+ | Cuando se esta programando, | ||
+ | |||
+ | Cuando la variable esta declarada y asignada, el programador puede hacer uso de ella después en el programa las veces que quiera. | ||
+ | |||
+ | La razón principal por la que usamos las variables es para evitar la repetición de líneas en el código. Si estás escribiendo el mismo número más de una vez, considera marcarlo en una variable para hacer tu código más general y fácil de actualizar. | ||
+ | |||
+ | ==== Ejemplo 1: reutilizar el mismo valor. ==== | ||
+ | |||
+ | Por ejemplo, cuando haces la coordenada Y, y el diámetro para los dos círculos en este ejemplo en variables, los mismos valores son usados para cada circulo: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | int y = 60; | ||
+ | int d = 80; | ||
+ | ellipse (75, y, d, d); // izquierdo | ||
+ | ellipse (175, y, d, d); // mitad | ||
+ | ellipse (275, y, d, d); // derecha</ | ||
+ | ==== Ejemplo 2: cambiar los valores de las variables. ==== | ||
+ | |||
+ | Cambiando simplemente las variables y y d se alteran los 3 círculos: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ``` size (480, 120); smooth (); int y = 100; int d = 130; ellipse (75, y, d, d); %%//%% izquierdo ellipse (175, y, d, d); %%//%% | ||
+ | |||
+ | Sin las variables, necesitarías cambiar la coordenada //Y// usada en el código tres veces y el diámetro seis veces. Las variables te permiten separar las líneas del código que cambian desde las líneas que no lo hacen, lo cual hace el programa más fácil de modificar. Por ejemplo, si colocas variables que controlan los colores y el tamaño de las formas en un lugar, luego puedes rápidamente explorar diferentes opciones visuales concentrándose en unas cuantas líneas de código. Cuando haces tus propias variables, determina el //nombre//, el //tipo de dato// , y //el valor//. Tú decides cómo llamar a la variable. Escoge un nombre que te informe acerca de lo que guarda la variable, pero que sea consistente y no demasiado detallado. Por ejemplo, el nombre de la variable “radio” será mas claro que “r” cuando mires el código después. EL rango de valores que puede ser almacenado entre una variable es definido por su tipo de dato. Por ejemplo, el típico numero entero de dato que puede guardar números sin decimales (números enteros) en código, es abreviado a //int// . Hay tipos de variables para guardar cada tipo de dato: enteros (**int**), decimales (**float**), | ||
+ | |||
+ | Las variables deben ser declaradas primero, lo que deja a un lado el espacio en la memoria del computador para guardar información. Cuando declaramos una variable, se necesita especificar su tipo de dato (como **int**), lo cual indica que tipo de información será guardada. Después de establecer el nombre y el tipo de dato, este puede ser asignado a un valor para la variable: | ||
+ | |||
+ | < | ||
+ | x = 12; // Asigna una valor a la variable x</ | ||
+ | Este código hace lo mismo, pero es más corto: | ||
+ | |||
+ | < | ||
+ | El nombre del tipo de dato está incluido en la línea de código que declara a la variable, pero no se vuelve a escribir. Cada vez que se escribe el tipo de datos en frente del nombre de la variable, el computador piensa que estás tratando de declarar una nueva variable. No puedes tener dos variables con el mismo nombre en la misma parte del programa, así el programa tendría un error: | ||
+ | |||
+ | < | ||
+ | // ERROR! no puedes tener dos variables llamadas x</ | ||
+ | ==== Las variables (constantes) de Processing. ==== | ||
+ | |||
+ | Processing tiene una serie de variables especiales para almacenar información acerca del programa mientras este corre. Por ejemplo, el largo (**width**) y el alto (**height**). Estos valores son establecidos por la función //size()//. Estos pueden ser usados para dibujar elementos relativos al tamaño de la ventana, incluso si la línea //size()// cambia. | ||
+ | |||
+ | ==== Ejemplo 3: ajustar el tamaño. ==== | ||
+ | |||
+ | En este ejemplo, cambiamos los parámetros en base a //size()//, para ver como funciona: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ``` size (480, 120); smooth (); line (0, 0, width, height); %%//%% Linea desde (0,0) a (480, 120) line | ||
+ | |||
+ | La expresión 4 * 5 es evaluada primero porque la multiplicación tiene mayor prioridad. Segundo, 4 es agregado al producto de 4 * 5 para dar 24. Por último, el operador asignación (el símbolo de igual) tiene la menor prioridad, el valor 24 es asignado a la variable x. Esto es clarificado con un paréntesis, | ||
+ | |||
+ | < | ||
+ | Si quieres forzar para que la adición sea primero, sólo tienes que mover el paréntesis. Porque el paréntesis tiene la mayor prioridad que la multiplicación, | ||
+ | |||
+ | < | ||
+ | Un acrónimo para este orden es enseñado en clases de matemáticas: | ||
+ | |||
+ | Algunos cálculos son usados más frecuentemente en programación que los métodos abreviados que se han desarrollado; | ||
+ | |||
+ | < | ||
+ | y -= 15; // Esto es igual a y=y-15</ | ||
+ | Es también común agregar o sustraer 1 de una variable, así que los atajos existen para esto también. Los operadores ++ y – hacen esto: | ||
+ | |||
+ | < | ||
+ | y--; // Esto es igual a y = y - 1</ | ||
+ | Más atajos pueden ser encontrados en la referencia. | ||
+ | |||
+ | ==== Repetición ==== | ||
+ | |||
+ | A medida que escribes más programas, notarás que los patrones se asemejan cuando las líneas de código se repiten. Pero con leves variaciones. Una estructura de código es llamada for loop para hacer posible correr una línea de código más de una vez para condensar este tipo de repetición en menos líneas. Esto hace más modular tu programa y más fácil de cambiar. | ||
+ | |||
+ | ==== Ejemplo 5: Hacer lo mismo una y otra vez. ==== | ||
+ | |||
+ | Este ejemplo tiene el tipo de patrón que puede ser simplificado para //for loop//: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | strokeWeight (8); | ||
+ | line (20, 40, 80, 80); | ||
+ | line (80, 40, 140, 80); | ||
+ | line (140, 40, 200, 80); | ||
+ | line (200, 40, 260, 80); | ||
+ | line (260, 40, 320, 80); | ||
+ | line (320, 40, 380, 80); | ||
+ | line (380, 40, 440, 80);</ | ||
+ | |||
+ | ==== Ejemplo 6: Usa un for loop. ==== | ||
+ | |||
+ | La misma cosa puede ser hecha por un for, y menos líneas de código: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | strokeWeight (8); | ||
+ | for (int i = 20; i < 400; i += 60) | ||
+ | { | ||
+ | line (i, 40, i + 60, 80); | ||
+ | | ||
+ | El //for loop// es diferente, en varias formas del código que hemos escrito hasta ahora. Notarás los paréntesis y los corchetes. El código entre los paréntesis es llamado bloque. Este es el código que será repetido en cada iteración del for loop. Dentro de los paréntesis hay tres declaraciones, | ||
+ | |||
+ | < | ||
+ | { | ||
+ | statements | ||
+ | }</ | ||
+ | Típicamente el **init** declara una nueva variable para usar dentro de for loop y asignar un valor. El nombre de la variable **i** es usado frecuentemente, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | La declaración del **condicional** requiere más explicación. Siempre es una **expresión relacional** que compara dos valores con un **operador relacional**. En este ejemplo, la expresión es “i < 400” y el operador es el símbolo < (menor que). Los operadores relacionales más comunes son: | ||
+ | |||
+ | < | ||
+ | < Menor que | ||
+ | >= mayor o igual que | ||
+ | <= Menor o igual que | ||
+ | == Igual que | ||
+ | != Diferente que </ | ||
+ | La expresión relacional siempre evalúa a **verdadero o falso**. Por ejemplo, la expresión 5 > 3 es verdadera. Podemos preguntar, “es cinco mayor que 3”.La respuesta es “sí”. Entonces decimos que la expresión es verdadera. | ||
+ | |||
+ | Para la expresión 5 < 3, preguntamos, | ||
+ | |||
+ | ==== EJERCICIO. ==== | ||
+ | |||
+ | Trata de dibujar la siguiente figura usando un for loop. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | **Solución** | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | background(0); | ||
+ | for (int i = 25; i < width; i += 50) | ||
+ | { | ||
+ | fill( i / 2 , i + 1 , i ); | ||
+ | ellipse (i, i, 70, 70); | ||
+ | }</ | ||
+ | |||
+ | ==== Ejemplo 7: Mas de foor loop. ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | smooth (); | ||
+ | strokeWeight (2); | ||
+ | for (int i =20; i <400; i +=20) | ||
+ | { | ||
+ | line (i, 0, i + i/2, 80); | ||
+ | }</ | ||
+ | ==== Ejemplo 8: Incrustar un for loop a otro. ==== | ||
+ | |||
+ | Cuando un for loop es incrustado dentro de otro, el número de repeticiones es multiplicado. Primero, miremos un corto ejemplo, y luego lo descomponemos. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | background (0); | ||
+ | smooth (); | ||
+ | noStroke (); | ||
+ | for (int y = 0; y <= height; y += 40) | ||
+ | { | ||
+ | for (int x = 0; x <= width; x += 40) | ||
+ | { | ||
+ | fill (255, 140); | ||
+ | ellipse (x, y, 40, 40); | ||
+ | } | ||
+ | }</ | ||
+ | ==== Ejemplo 9: Filas y columnas. ==== | ||
+ | |||
+ | En este ejemplo, el for loop es adyacente, en lugar de uno incrustado dentro de otro. El resultado muestra que un for loop está dibujando una columna de 4 círculos y el otro está dibujando una fila de 13 círculos: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | background (0); | ||
+ | smooth (); | ||
+ | noStroke (); | ||
+ | for (int y = 0; y < height+45; y += 40) | ||
+ | { | ||
+ | fill (255, 140); | ||
+ | ellipse (0, y, 40, 40); | ||
+ | } | ||
+ | for (int x = 0; x < width+45; x += 40) | ||
+ | { | ||
+ | fill (255, 140); | ||
+ | ellipse (x, 0, 40, 40); | ||
+ | }</ | ||
+ | Cuando uno de estos for loops es colocado dentro de otro, las cuatro repeticiones del primer loop son agravadas con las trece del segundo en orden para correr dentro del bloque incrustado 52 veces (4 x 13=52). El ejemplo 8 es una buena base para explorar varios tipos de patrones de repetición visual. Los siguientes ejemplos muestran un par de formas que pueden ser extendidas, pero este es sólo una pequeña muestra de lo que es posible. En el ejemplo 10, el código dibuja una línea desde cada punto en la red del centro a la pantalla. En el ejemplo 11, se reducen los puntos suspensivos con cada nueva fila y son removidos hacia la derecha agregando la coordenada y a la coordenada x. | ||
+ | |||
+ | ==== Ejemplo 10: Líneas y círculos. ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | background (0); | ||
+ | smooth (); | ||
+ | fill (255); | ||
+ | stroke (102); | ||
+ | for (int y = 20; y <= height-20; y += 10) | ||
+ | { | ||
+ | for (int x = 20; x <= width-20; x += 20) | ||
+ | { | ||
+ | |||
+ | ellipse (x, y, 4, 4); | ||
+ | // Dibujamos una linea en el centro de la pantalla | ||
+ | |||
+ | line(x, y, 240, 60); | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | ==== Ejemplo 11: Círculos. ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | background (0); | ||
+ | smooth (); | ||
+ | for (int y = 32; y <= height; y += 8) | ||
+ | { | ||
+ | for (int x = 12; x <= width; x += 15) | ||
+ | { | ||
+ | ellipse (x + y, y, 16 - y/10.0, 16 - y/10.0); | ||
+ | } | ||
+ | | ||
+ | ===== CAPÍTULO 5 ===== | ||
+ | |||
+ | ==== RESPUESTA ==== | ||
+ | |||
+ | El código que responde a la entrada del mouse, el teclado y otros dispositivos de entrada tiene que funcionar continuamente. Para poder empezar, debemos conocer dos métodos fundamentales en Processing. | ||
+ | |||
+ | ===== Ejemplo 1: La función draw() ===== | ||
+ | |||
+ | Para ver cómo funciona draw(), corremos este ejemplo: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | // | ||
+ | | ||
+ | | ||
+ | }</ | ||
+ | Saldrá esto: | ||
+ | |||
+ | yo estoy dibujando 1 yo estoy dibujando 2 … | ||
+ | |||
+ | El código dentro de los corchetes del bloque draw() corre desde arriba hasta abajo, y se repite indefinidamente hasta que presionas stop o cierras la ventana. Cada vuelta a través de draw() es llamada por la función frameCount(). (Por defecto la velocidad de cada frame es de 60 frames por segundo, pero esto puede ser cambiado). En el ejemplo anterior, la función println() escribe el texto “estoy dibujando” seguido de un recuento de fotogramas según su contabilidad por la variable especial framecount (recontar) ( 1, 2, 3, 4, 5…). El text aparece en la consola, en el área negra al fondo de la ventana del editor de processing. | ||
+ | |||
+ | ===== Ejemplo 2: La función setup() ===== | ||
+ | |||
+ | Para complementar la función de loopeo de draw(). Processing tiene una función llamada setup() que corre solo una vez cuando el programa comienza: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | println(" | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | println(" | ||
+ | }</ | ||
+ | Cuando este código está corriendo, lo siguiente aparecerá escrito en la consola: | ||
+ | |||
+ | voy a comenzar estoy corriendo estoy corriendo estoy corriendo | ||
+ | |||
+ | El texto “estoy corriendo” continúa escribiéndose en la consla hasta que el programa sea parado. | ||
+ | |||
+ | En un programa típico, el código dentro de setup() es usado para definir los valores del comienzo. La primera línea suele ser la función size(), a menudo seguido por un código para establecer los colores de relleno y el trazo del comienzo, o tal vez para cargar imágenes y fuentes. Si no se incluye la función size, processing por defecto creará una ventana de 100x100 pixeles. | ||
+ | |||
+ | Ahora sabes cómo usar setup() y draw(), pero esta no es toda la historia. Hay una ubicación más para poner código. También puedes poner variables fuera de setup y de draw. Si creas una variable dentro de setup(), o puedes usarla dentro de draw(), así que necesítaras escribir esas variables en otro lugar. Algunas varibales son llamadas globales, porque pueden ser usadas en cualquier parte (“globalmente”) en el programa. Esto es más claro cuando tenemos una lista de orden en la cual el código está corriendo: | ||
+ | |||
+ | - Variables creadas y declaradas fuera de setup() y de draw(). | ||
+ | - El código dentro de setup() corre una vez. | ||
+ | - El código dentro de dra() corre continuamente. | ||
+ | |||
+ | ===== Ejemplo 3: setup ===== | ||
+ | |||
+ | En el siguiente ejemplo fijaremos los dos metodos juntos: | ||
+ | |||
+ | < | ||
+ | int y = -100; | ||
+ | int diametro = 380; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | size(480, 120); | ||
+ | smooth(); | ||
+ | fill(102); | ||
+ | } | ||
+ | void draw () { | ||
+ | background (204); | ||
+ | ellipse (x, y, diametro, diametro); | ||
+ | }</ | ||
+ | ===== Seguir ===== | ||
+ | |||
+ | Ahora que tenemos el código corriendo continuamente, | ||
+ | |||
+ | ===== Ejemplo 4: Rastreando el mouse. ===== | ||
+ | |||
+ | La variable mouseX guarda la coordenada x, y la variable mouseY guarda la coordenada y: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(480, 120); | ||
+ | fill(0, 102); | ||
+ | smooth(); | ||
+ | noStroke(); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | ellipse(mouseX, | ||
+ | }</ | ||
+ | En este ejemplo, cada vez que el código en el bloque draw() está corriendo, un nuevo círculo es dibujado en la ventana. Esta imagen fue hecha moviéndose el mouse alrededor de la ventana, para controlar la ubicación del círculo.Porque el relleno es establecido para ser parcialmente transparente, | ||
+ | |||
+ | ===== Ejemplo 5: Un punto que nos sigue. ===== | ||
+ | |||
+ | En este ejemplo, un nuevo círculo es dibujado en la ventana cada vez que el código dentro de draw() está corriendo. Para refrescar la pantalla y sólo mostrar el círculo más nuevo, coloca la función background() al comienzo de draw() antes de que la forma sea dibujada: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(480, 120); | ||
+ | fill(0, 102); | ||
+ | smooth(); | ||
+ | noStroke(); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | background(204); | ||
+ | ellipse(mouseX, | ||
+ | }</ | ||
+ | |||
+ | La función background() limpia toda la ventana, así que tienes que estar seguro de colocar siempre antes otras funciones dentro de draw(); de otra manera, las formas dibujadas serán borradas. | ||
+ | |||
+ | ===== Ejemplo 6: Dibujar continuamente. ===== | ||
+ | |||
+ | las variables pmouseX y pmouseY guardan la posición del mouse en el cuadro anterior. Como mouseX y mouseY son variables especiales, son actualizadas cada vez que draw() corre. Combinadas, pueden ser usadas para dibujar líneas continuamente conectando la ubicación actual y la más reciente: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(480, 120); | ||
+ | stroke(4); | ||
+ | smooth(); | ||
+ | stroke(0, 102); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | line(mouseX, | ||
+ | }</ | ||
+ | ===== Ejemplo 7: Ajustando el grosor sobre la marcha. ===== | ||
+ | |||
+ | Las variables pmouseX y pmouseY pueden también ser usadas para calcular la velocidad del mouse. Esto es hecho midiendo la distancia entre la posición actual y la más reciente del mouse. Si el mouse se mueve lentamente, la distancia es pequeña, pero si el mouse empieza a moverse ráìdamente, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(480, 120); | ||
+ | smooth(); | ||
+ | stroke(0, 102); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | float ancho = dist(mouseX, | ||
+ | strokeWeight(ancho); | ||
+ | line(mouseX, | ||
+ | }</ | ||
+ | ===== Ejemplo 8: facilitando las cosas. ===== | ||
+ | |||
+ | En ele ejemplo anterior, los valores del mouse son convertidos directamente en posiciones en la pantalla. Pero a veces quieres que esos valores sigan al mouse libremente, con la finalidad de crear movimientos mas fluidos. Esta técnica es llamda facilitadora (Easing). Para usar esta técnica se tiene en cuenta dos valores: el valor actual y el valor a avanzar. En cada paso del programa, el valor actual se mueve un poco más cerca al valor objetivo: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | float easing = 0.01; | ||
+ | float diametro = 12; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | size(220, 120); | ||
+ | smooth(); | ||
+ | } | ||
+ | void draw() | ||
+ | { | ||
+ | float targetX = mouseX; | ||
+ | x = x + (targetX - x) * easing; | ||
+ | ellipse(x, 40, diametro, diametro); | ||
+ | println(targetX + " : " + x); | ||
+ | }</ | ||
+ | El valor de la variable x siempre se acerca al de targetX. La velocidad con la cual se acerca a targetX es establecida con la variable easing, un número entre 0 y 1. Un valor pequeño para facilitar la causa de más de un retardo de un valor mayor. Con un valor facilitador de 1, no hay retardo. Cuando se corre este ejemplo (no olvides descargarlos en este repositorio) los valores actuales son mostrados en la consola a través de la función println(). Cuando se mueve el mouse, notarás como los números están aparte, pero cuando el mouse para de moverse, el valor x se acerca a targetX. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Todo el trabajo en este ejemplo pasa en la línea que comienza en x = x +. Ahí, la diferencia entre el objetivo y el valor actual es calculado, luego es multiplicado por la variable facilitadora y agregada a x para traerlo cerca al objetivo. | ||
+ | |||
+ | ===== Ejemplo 9: líneas suaves facilitadoras. ===== | ||
+ | |||
+ | En este ejemplo, la técnica facilitadora es aplicada al ejemplo 7, en comparación, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | float y; | ||
+ | float posx; | ||
+ | float posy; | ||
+ | float easing = 0.05; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | size(480, 120); | ||
+ | smooth(); | ||
+ | stroke(0, 102); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | float targetX = mouseX; | ||
+ | x = x + (targetX - x) * easing; | ||
+ | |||
+ | float targetY = mouseY; | ||
+ | y = y + (targetY - y) * easing; | ||
+ | |||
+ | float ancho = dist(x, y, posx, posy); | ||
+ | |||
+ | strokeWeight(ancho); | ||
+ | line(x, y, posx, posy); | ||
+ | |||
+ | posx = x; | ||
+ | posy = y; | ||
+ | }</ | ||
+ | ===== La función map() ===== | ||
+ | |||
+ | Cuando los números son usados para dibujar en la pantalla, es útil convertir los valores de una serie de números a otra. | ||
+ | |||
+ | ===== Ejemplo 10: Asignando valores a una serie. ===== | ||
+ | |||
+ | la variable mouseX usualmente está entre 0 y el ancho de la ventana, pero tal vez quieras volver a asignar estos valores a una serie diferente de coordenadas. puedes hacer esto haciendo cálculos como dividir mouseX por un número para reducir el ranfo y luego agragar o sustraer un número para desplazarlo a la derecha o a la izquierda: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(240, 120); | ||
+ | strokeWeight(12); | ||
+ | smooth(); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | background(204); | ||
+ | stroke(255); | ||
+ | line(120, 60, mouseX, mouseY); // linea blanca | ||
+ | stroke(0); | ||
+ | float mx = mouseX/2 + 60; | ||
+ | line(120, 60, mx, mouseY);// | ||
+ | }</ | ||
+ | La función map() es una forma mas general de hacer este tipo de cambios. Convierte una variable de una serie de números a otra. El primer parámetro es la variable para ser convertida, el segundo y el tercer parametro son los valores altos y bajos de esa variable, y el cuarto y quinto parametro son los valores altos y bajos deseados. la función map() esconde la matemática detras de la conversión. | ||
+ | |||
+ | ===== Ejemplo 11: Mapeando con la función map() ===== | ||
+ | |||
+ | Este ejemplo reescribe el ejemplo anterior usando map(): | ||
+ | |||
+ | Este ejemplo reescribe el ejemplo anterior usando map(): | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(240, 120); | ||
+ | strokeWeight(12); | ||
+ | smooth(); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | background(204); | ||
+ | stroke(255); | ||
+ | line(120, 60, mouseX, mouseY); // linea blanca | ||
+ | stroke(0); | ||
+ | float mx = map(mouseX, 0, width, 60, 180); | ||
+ | line(120, 60, mx, mouseY);// | ||
+ | }</ | ||
+ | |||
+ | La función map() hace que el código sea fácil de leer, porque los valores máximos y mínimos son escritos calaramente como parámetros. En este ejemplo, los valores de mouseX que están entre 0 y el ancho son convertidos a un numero desde 60 (cuando mouseX es 0) hasta 180 (cuando mouseX es width). Encontrarás útil la función map() en varios ejemplos a través de este tutorial. | ||
+ | |||
+ | ===== click ===== | ||
+ | |||
+ | Además de la ubicación del mouse, Processing también comprueba si el botón del mouse está presionado. la variable mousePressed tiene un valor diferente cuando el botón del mouse es presionado y cuando no. La variable mousePressed es de tipo de datos llamado boolean, lo cual significa que tene sólo dos posibles valores: verdadero o falso. El valor de mousePressed es verdadero cuando el botón es presionado. | ||
+ | |||
+ | ===== Ejemplo 12: Hacer click con el mouse. ===== | ||
+ | |||
+ | La variable mousePressed es usada junto con la declaración if para deerminar cuándo una línea de código correrá y cuando no. intenta con este ejemplo antes de explicar con más detalle: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | size(240, 120); | ||
+ | smooth(); | ||
+ | strokeWeight(30); | ||
+ | } | ||
+ | |||
+ | void draw() | ||
+ | { | ||
+ | background(204); | ||
+ | stroke(102); | ||
+ | line(40, 0, 70, height); | ||
+ | |||
+ | if (mousePressed == true) | ||
+ | { | ||
+ | stroke(0); | ||
+ | } | ||
+ | |||
+ | line(0, 70, width, 50); | ||
+ | }</ | ||
+ | |||
+ | En este programa, el código dentro del bloque if corre solamente cuando el botón del mouse es presionado. Cuando un botón no es presionado, este código es ignorado. Como se discutio con la “repeticón” del for loop en el capítulo 4, if también tiene un test que es evaluado con verdadero o falso: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | statement | ||
+ | }</ | ||
+ | Cuando el test es verdadero, el código dentro del bloque correrá; cuando test es falso, el código dentro del bloque no está corriendo. El computador determinda si el test es verdadero o falso evaluando la expresión dentro del paréntesis. | ||
+ | |||
+ | El símbolo == compara los valores en la izquierda y la derecha del examen si son equivalentes. Este símbolo == es diferente el operador de asignación, | ||
+ | |||
+ | |//NOTA:// Es un error común, incluso para programadores con experiencia, | ||
+ | |||
+ | < | ||
+ | las variables boolean, incluyendo mousePressed, | ||
+ | |||
+ | ===== Ejemplo 13: Detecta cuando no se haga click. ===== | ||
+ | |||
+ | |||
+ | |||
+ |
aprendizaje/processing.1417531662.txt.gz · Última modificación: 2020/02/11 17:17 (editor externo)