Forma 1: Coordenadas, Primitivas Esta unidad introduce al sistema
Transcripción
Forma 1: Coordenadas, Primitivas Esta unidad introduce al sistema
Forma 1: Coordenadas, Primitivas Esta unidad introduce al sistema de coordenadas que se despliega en la ventana y una variedad de figuras geométricas. Sintáxis: size(), point(), line(), triangle(), quad(), rect(), ellipse(), bezier() background(), fill(), stroke(), noFill(), noStroke() strokeWeight(), strokeCap(), strokeJoin() smooth(), noSmooth(), ellipseMode(), rectMode() Dibujar una figura con código puede ser complicado ya que cada aspecto de su ubicación deberá ser especificado con un número. Cuando estás acostumbrado a dibujar con un lápiz o mover figuras en un apantalla con un mouse, toma un tiempo en en comenzar a pensar en relación a la grilla de coordenadas en la pantalla. El vacío mental entre ver una composición en papel o en tu cabeza y trasladarla a notaciones de código es grande pero fácilmente linkeable. Coordenadas Antes de hacer un dibujo es importante pensar sobre las dimensiones y cualidades de la superficie en que dibujas. Si haces dibujos en papel, puedes elegir entre diversos tipos de papel y utensilios. Para bosquejos rápidos el carboncillo es lo indicado. Para un dibujo refinado un papel hecho a mano y lápices indicados es lo preferible. En contraste, cuando dibujas en la pantalla del computador, las opciones primarias disponibles son size o tamaño de la ventana y color del fondo o background color. La pantalla del computador es una grilla de pequeños eleemntos de luz llamados pixeles y la pantalla viene en diversos tamaños y resoluciones; laptops 1,764,000 pixeles, (1680 ancho * 1050 alto), LCD 1,310,720 pixeles (1280 ancho * 1024 alto), etc. Processing puede controlar y adaptarse a los pixeles. Cuando corres el programa, una ventana de display se abrirá y permitirá el acceso a para leer y escribir el código. Es posible crear imágenes más grandes que el tamaño de la pantalla, pero en la mayoría de los casos, deberás hacer una ventana del tamaño de la pantalla o más pequeña. El tamaño de la pantalla de display es controlada por la función size(): size(ancho, alto) La función size() tiene dos parámetros: el primero setea el ancho de la ventana y el segundo setea su alto. // Dibuja la ventana de display de 120 pixeles // ancho y alto de 200 pixeles size(120, 200); // Dibuja la ventana de display de 320 pixeles // de ancho y 240 pixeels de alto size(320, 240); // Dibuja la ventana de display de 200 pixeles // de ancho y 200 pixeels de alto size(200, 200); Una posición en la pantalla es comprendida entre una coordenada x y una coordenada y. La coordenada x es la distancia horizontal desde el origen y la coordenada y es la distancia vertical. En Processing, el origen el extremo superior izquierdo de la ventana de display y los valores de las coordenadas incrementan hacia abajo y hacia la derecha. La imagen de la izquierda muestra el sistema de coordenadas y la imagen de la derecha, muestra un par de coordenadas situadas en la grilla: Una posición es escrita como el valor de la coordenada x, seguida por la coordenada, separada con una coma. La notación para el origen es (0,0), la coordenada (50,50) corresponde a x=50 e y=50, lo mismo que 20 y 60, equivalen a x e y. Si la ventana de display es de 100 pixeles de ancho y 100 pixeles de alto, (0,0) son los pixeles en el extremo superior izquierdo, (99,0) son los pixeles en el extremo superior derecho, etc. Figuras Primitivas. Un punto es el más simple elemento visual y es dibujado con la función point(): point(x, y) Esta función tiene dos parámetros: la primera es la coordenada x y la segunda es la coordenada y. Si no se dice lo contrario, un punto será del tamaño de un pixel. // Puntos con los mismos parámetros X e Y // forman un alínea diagonal desde el extremosup izq // hasta el extremo inferior der point(20, 20); point(30, 30); point(40, 40); point(50, 50); point(60, 60); // Puntos con los mismos parámetros X e Y // con la misma distancia desde arriba y abajo // de los bordes del marco point(50, 30); point(55, 30); point(60, 30); point(65, 30); point(70, 30); // Puntos con los mismos parámetros X e Y // con la misma distancia desde der e izq // de los bordes del marco point(70, 50); point(70, 55); point(70, 60); point(70, 65); point(70, 70); // Ubicar un grupo de puntosuno al lado de otro // crea una línea point(50, 50); point(50, 51); point(50, 52); point(50, 53); point(50, 54); point(50, 55); point(50, 56); point(50, 57); point(50, 58); point(50, 59); // Ubicar untos fuera del display // no causan un error, // pero los puntos no son visibles point(-500, 100); point(400, -600); point(140, 2500); point(2500, 100); Mientras es posible dibujar una línea con una serie de puntos, es mejor y más sencillo dibujarlas con la función line(). Esta función tiene 4 parámetros, dos para cada endpoint: Los 2 primeros parámetros fijan la posición donde la línea comenzará y los últimos dos fijarán donde la línea terminará. // Cuando las coordenadas y para una línea son las mismas // la línea es horizontal line(10, 30, 90, 30); line(10, 40, 90, 40); line(10, 50, 90, 50); // Cuando las coordenadas y para una línea son las mismas // la línea es vertical line(40, 10, 40, 90); line(50, 10, 50, 90); line(60, 10, 60, 90); // Cuando los 4 parámetros son diferentes, la línea es diagonal line(25, 90, 80, 60); line(50, 12, 42, 90); line(45, 30, 18, 36); // Cuando 2 líneas comparten el mismo punto, estos se conectan line(15, 20, 5, 80); line(90, 65, 5, 80); La función triangle() dibuja triángulos. Tiene 6 parámeters, dos para cada punto: triangle(x1, y1, x2, y2, x3, y3) El primer par define el primer punto, el par del medio el segundo punto, y el último par el tercer punto. Cualquier triángulo puede ser dibujado conectando 3 líneas, pero la función triangle() hace posible dibujar una figura llena. Triángulos de todos los tipos y tamaños pueden ser creados cambiando los valores de los parámetros. triangle(60, 10, 25, 60, 75, 65); // Triángulo line(60, 30, 25, 80); // Triángulo lleno line(25, 80, 75, 85); // Borde de Triángulo lleno line(75, 85, 60, 30); // Borde de Triángulo point(x, y) line(x1, y1, x2, y2) triangle(x1, y1, x2, y2, x3, y3) quad(x1, y1, x2, y2, x3, y3, x4, y4) rect(x, y, ancho, alto) ellipse(x, y, width, height) bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2) GEOMETRÍA PRIMITIVA Processing tiene 7 funciones para asistir en hacer figuras simples. Estas imágenes muestran el formato para cada una. Reemplaza los parámetros con números para usarlos en un código. triangle(55, 9, 110, 100, 85, 100); triangle(55, 9, 85, 100, 75, 100); triangle(-1, 46, 16, 34, -7, 100); triangle(16, 34, -7, 100, 40, 100); La función quad() dibuja un cuadrilátero, un polígono de 4 lados. LA función tiene 8 parámetros, dos para cada punto. quad(x1, y1, x2, y2, x3, y3, x4, y4) Cambiando los valores de los parámetros ya puedes dibujar rectángulos, cuadrados, paralelepípedos y cuadriláteros regulares. quad(38, 31, 86, 20, 69, 63, 30, 76); quad(20, 20, 20, 70, 60, 90, 60, 40); quad(20, 20, 70, -20, 110, 0, 60, 40); Dibujar rectángulos y elipses es diferente que las figuras previamente introducidas. En vez de definir cada punto, los 4 parámetros fijan la posición y dimensión de la figura. La función rect() dibuja un rectángulo: rect(x, y, width, height) Los primeros dos parámetros fijan la ubicación del extremo superior izquierdo, el tercero fija el ancho y el cuarto fija el alto. Usa el mismo valor de parámetros que width y height o ancho y alto para dibujar un cuadrado: rect(15, 15, 40, 40); // Cuadrado grande rect(55, 55, 25, 25); // Cuadrado pequeño rect(0, 0, 90, 50); rect(5, 50, 75, 4); rect(24, 54, 6, 6); rect(64, 54, 6, 6); rect(20, 60, 75, 10); rect(10, 70, 80, 2); La función ellipse() dibuja una elipse en la ventana de display: ellipse(x, y, width, height) Los primeros 2 parámetros fijan la locación del centro de la elipse, el tercero fija el ancho, y el cuarto el alto. Usa el mismo parámetro de valores para ancho y alto que para dibujar un círculo: ellipse(40, 40, 60, 60); // círculo gde ellipse(75, 75, 32, 32); // círculo pequeño ellipse(35, 0, 120, 120); ellipse(38, 62, 6, 6); ellipse(40, 100, 70, 70); La función bezier() puede dibujar líneas que no son derechas. Una curva Bézier está definida por controlar una serie de puntos y anchos de puntos. Una curva es dibujada entre puntos, y controla puntos definidos en su forma: bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2) La función requiere 8 parámetros en un set de 4 puntos. La curva es dibujada entre los primeros puntos y los cuartos y controla los puntos segundos y terceros. bezier(32, 20, 80, 5, 80, 75, 30, 75); // Dibuja los puntos de control line(32, 20, 80, 5); ellipse(80, 5, 4, 4); line(80, 75, 30, 75); ellipse(80, 75, 4, 4); bezier(85, 20, 40, 10, 60, 90, 15, 80); // Dibuja los puntos de control line(85, 20, 40, 10); ellipse(40, 10, 4, 4); line(60, 90, 15, 80); ellipse(60, 90, 4, 4); ORDEN DE DIBUJO El orden en que se dibujan las formas en el código definen qué formas aparecen arriba o sobre de las otras en la ventana. Si un rectángulo es dibujado en la primera línea del programa, y una elipse, en la segunda línea, aparecerá la elipse sobre el rectángulo. Revirtiendo el orden, aparecerá el rectángulo sobre la elipse. rect(15, 15, 50, 50); // atrás ellipse(60, 60, 55, 55); // adelante ellipse(60, 60, 55, 55); // atrás rect(15, 15, 50, 50); // adelante VALORES DE GRISES Los ejemplos descritos han usado gris como background, líneas negras, y figuras blancas. Para cambiar estos valores por defecto, es necesario introducir sintaxis adicional. La función background() fija el color de la ventana de display con un número entre 0 y 255. Este rango puede sonar raro si no estás familiarizado con el dibujo en software. El valor 255 es blanco y el valor 0 es negro, con un rango de grises entre medio. Si no hay valor de background definido, el valor por defecto dadoes 204 (gris claro). background(0); background(124); background(230); La función fill() fija el valor de relleno en las figuras, y la función stroke() fija el valor de la línea de contorno de la figura dibujada. Si no hay valor fill definido, por defecto, el valor usado será de 255 (blanco) Si no hay valor stroke definido, por defecto, el valor usado será 0 (negro). rect(10, 10, 50, 50); fill(204); // gris claro rect(20, 20, 50, 50); fill(153); // gris medio rect(30, 30, 50, 50); fill(102); // gris oscuro rect(40, 40, 50, 50); background(0); rect(10, 10, 50, 50); stroke(102); // gris oscuro rect(20, 20, 50, 50); stroke(153); // gris medio rect(30, 30, 50, 50); stroke(204); // gris claro rect(40, 40, 50, 50); Una vez que los valores fill o stroke son definidos, estos se aplicarán a todas la figuras que vendrán más abajo. Para cambiar los valores de fill o stroke, usa las funciones fill() o stroke() nuevamente. fill(255); // bco rect(10, 10, 50, 50); rect(20, 20, 50, 50); rect(30, 30, 50, 50); fill(0); // ng rect(40, 40, 50, 50); Un segundo parámetro opcional a fill() y stroke() controlan la transparencia. Fijan el parámetro a 255 y hacen de la figura una opaca, y 0 la harán totalmente transparente: background(0); fill(255, 220); rect(15, 15, 50, 50); rect(35, 35, 50, 50); fill(0); rect(0, 40, 100, 20); fill(255, 51); // opacidad baja rect(0, 20, 33, 60); fill(255, 127); // opacidad media rect(33, 20, 33, 60); fill(255, 204); // opacidad alta rect(66, 20, 33, 60); Stroke (borde) y fill (relleno) de una figura pueden ser deshabilitadas. La función noFill() para a Processing de rellenar las figuras, y la función noStroke() para las formas de líneas de ser dibujadas y tener borde. Si noFill() y noStroke() son ambas usadas, nada se dibujará en la pantalla. rect(10, 10, 50, 50); noFill(); // desabilita relleno rect(20, 20, 50, 50); rect(30, 30, 50, 50); rect(20, 15, 20, 70); noStroke(); // desabilita borde rect(50, 15, 20, 70); rect(80, 15, 20, 70); ATRIBUTOS DEL DIBUJO En adición de cambiar los valores de fill y stroke en una figura, es posible cambiar los atributos de la geometría. Las funciones smooth() y noSmooth() habilitan y deshabilitan la suavidad o smooth. Una vez que estas funciones son usadas, todas las figuras dibujadas después son afectadas. Si smooth() es usada primero, utilizando noSmooth() la cancela y vice versa. ellipse(30, 48, 36, 36); smooth(); ellipse(70, 48, 36, 36); smooth(); ellipse(30, 48, 36, 36); noSmooth(); ellipse(70, 48, 36, 36); Los atributos de la línea son controlados por las funciones strokeWeight(), strokeCap(), y strokeJoin(). La función strokeWeight() tiene un solo parámetro numérico que fija el grosor de todas las líneas dibujadas después de haber usado esta función. La función strokeCap() requiere un parámetro que puede ser o ROUND o SQUARE, o PROJECT. ROUND hace los endpoints romos, SQUARE cuadrados y PROJECT mezcla los dos, extiende los fines de líneas o endpoints a SQUARE por un radio de la línea. La función strokeJoin() tiene un parámetro que puede ser BEVEL, MITER, o ROUND. Estos parámetros determinan cómo la línea se segmenta o el borde se conecta con la figura. BEVEL causa que las líneas se junten con extremos cuadrados, MITER es el default y junta las líneas con extremos punteados. ROUND crea una curva. smooth(); line(20, 20, 80, 20); // por defecto, línea pesa 1 strokeWeight(6); line(20, 40, 80, 40); // línea gruesa strokeWeight(18); line(20, 70, 80, 70); // línea más gruesa smooth(); strokeWeight(12); strokeCap(ROUND); line(20, 30, 80, 30); // línea de arriba strokeCap(SQUARE); line(20, 50, 80, 50); // línea media strokeCap(PROJECT); line(20, 70, 80, 70); // línea de abajo smooth(); strokeWeight(12); strokeJoin(BEVEL); rect(12, 33, 15, 33); // fig izq strokeJoin(MITER); rect(42, 33, 15, 33); // fig media strokeJoin(ROUND); rect(72, 33, 15, 33); // fig der MODOS DE DIBUJO Por defecto, los parámetros para ellipse() fija la coordenada x para el centro, la coordenada y del centro, el ancho y el alto. La función ellipseMode() cambia la manera que estos parámetros son usados para dibujar elipses. La función ellipseMode() requiere de un parámetro quepuede ser o CENTER o RADIUS o CORNER o CORNERS. El modo por defecto es CENTER. El modo RADIUS también usa el primer y segundo parámetro de ellipse() para fijar el centro, pero causa el tercer parámetro de fijar la mitad del ancho y el cuarto parámetro para fijar la mitad del alto. EL modo CORNER hace que ellipse() trabaje similar a rect(). Causa el primer y segundo parámetro de posicionarse en en el extremo superior izquierdo del rectángulo que circunscribe a la elipse y usa el tercer y cuarto parámetro para fijar el ancho y alto. EL modo CORNERS tiene un efecto similar a CORNER, per hace que el tercer y cuarto parámetro fije a ellipse() en el extremo derecho inferior del rectángulo. smooth(); noStroke(); ellipseMode(RADIUS); fill(126); ellipse(33, 33, 60, 60); // elipse gris fill(255); ellipseMode(CORNER); ellipse(33, 33, 60, 60); // elipse bca fill(0); ellipseMode(CORNERS); ellipse(33, 33, 60, 60); // elipse ng En la misma línea, la función rectMode() afecta cómo los rectángulos son dibujados. Requiere de un parámetro que puede ser CORNER, CORNERS, o CENTER. Por defecto, el modo CORNER, y CORNERS que el tercer y cuarto parámetro de rect() sea dibujado en el extremo opuesto del primero. El modo CENTER hace que el primer y segundo parámetro de rect() se fije al centro de rectángulo y use el tercer y cuarto parámetro como ancho y alto.