{"id":3627,"date":"2019-08-17T01:03:49","date_gmt":"2019-08-16T23:03:49","guid":{"rendered":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/?page_id=3627"},"modified":"2019-09-02T16:34:33","modified_gmt":"2019-09-02T14:34:33","slug":"1-4-dibujar","status":"publish","type":"page","link":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/1-4-dibujar\/","title":{"rendered":"1.4. Dibujar"},"content":{"rendered":"<h2>El cap\u00edtulo 3: Dibujar<\/h2>\n<p>Si no lo hab\u00e9is hecho ya, lo primero que haremos ser\u00e1 leer la primera p\u00e1gina de este cap\u00edtulo del libro. Nos explica qu\u00e9 es esto del <em>canvas<\/em> y c\u00f3mo se define su tama\u00f1o. \u00bfDudas? \u00a1Usad el foro del aula!<\/p>\n<p>Abrimos el editor en l\u00ednea de p5.js y autom\u00e1ticamente se carga con este c\u00f3digo:<\/p>\n<pre>function <span style=\"color: #4a86e8; font-weight: bold;\">setup<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">createCanvas<\/span>(400, 400);\r\n}\r\nfunction <span style=\"color: #4a86e8; font-weight: bold;\">draw<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">background<\/span>(220);\r\n}<\/pre>\n<p>En la funci\u00f3n <span style=\"font-family: Courier, Arial;\">setup()<\/span> estamos creando el espacio donde dibujaremos, el <em>canvas<\/em>, de un tama\u00f1o de 400 p\u00edxeles de anchura y 400 de altura.<\/p>\n<div class=\"featured featured-blue\"><p>Probad a cambiar la anchura a 600 p\u00edxeles y ejecutad el programa. Fijaos en c\u00f3mo crece el recuadro del <em>canvas<\/em>. Volved a poner la anchura a 400 p\u00edxeles.<\/p>\n<\/div>\n<p>En la funci\u00f3n <span style=\"font-family: Courier, Arial;\">draw()<\/span> seleccionamos el color de fondo del <em>canvas<\/em>. M\u00e1s adelante, en este mismo cap\u00edtulo, veremos c\u00f3mo pintar con diferentes colores.<\/p>\n<p>Vamos al libro y copiamos el ejemplo 3-2. Lo que hacemos es dibujar un <em>canvas<\/em> de 480 puntos de anchura y 120 de altura. Despu\u00e9s pintamos el <em>canvas<\/em> de color gris y dibujamos un punto en la posici\u00f3n horizontal 240 y vertical 60\u2026 p\u00edxeles, est\u00e1 claro.<\/p>\n<pre>function <span style=\"color: #4a86e8; font-weight: bold;\">setup<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">createCanvas<\/span>(480, 120);\r\n}\r\n\r\nfunction <span style=\"color: #4a86e8; font-weight: bold;\">draw<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">background<\/span>(204);\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">point<\/span>(240, 60);\r\n}<\/pre>\n<p>Un p\u00edxel es un punto muy peque\u00f1o, as\u00ed que cuesta un poco verlo. Pero est\u00e1 justo en el medio.<\/p>\n<h3>El sistema de coordenadas<\/h3>\n<p>Vamos a hacer una peque\u00f1a prueba. En el ejercicio anterior, cambiamos la posici\u00f3n donde dibujamos el punto:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">point<\/span>(10, 60);<\/pre>\n<p>El punto lo encontraremos ahora en la parte izquierda del <em>canvas<\/em>. Y a la misma altura vertical. Lo cambiamos de nuevo:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">point<\/span>(10, 10);<\/pre>\n<p>Ahora lo tenemos en la parte superior izquierda. Podemos hacer m\u00e1s pruebas con diferentes posiciones, pero ya podemos ver que el sistema de coordenadas de p5.js pone la posici\u00f3n 0, 0 (si empezamos por 0) arriba a la izquierda y, por lo tanto, en este <em>canvas<\/em>, la \u00faltima posici\u00f3n, en la parte de abajo, a la derecha, ser\u00e1 la posici\u00f3n 479, 119.<\/p>\n<div class=\"featured featured-blue\"><p>Probad a cambiar el punto de lugar y comprobad si aparece en el lugar donde cre\u00e9is que tiene que aparecer. \u00bfQu\u00e9 pasa si ponemos el punto en la posici\u00f3n 480, 120?<\/p>\n<\/div>\n<h3>Figuras b\u00e1sicas<\/h3>\n<p>En la p\u00e1gina 20 tenemos las funciones que nos permiten dibujar las figuras b\u00e1sicas a partir de las cuales podemos hacer casi cualquier dibujo. No las explicaremos aqu\u00ed porque est\u00e1n todas explicadas en el libro; solo cabe advertir algunos puntos a tener presente:<\/p>\n<ul>\n<li><strong>x<\/strong> e <strong>y<\/strong> siempre representan coordenadas. La <strong>x<\/strong>, la posici\u00f3n horizontal, y la <strong>y<\/strong>, la vertical.<\/li>\n<li>Hay figuras que las dibujamos a partir de los v\u00e9rtices. Se indican todos los v\u00e9rtices de la figura y se dibujan l\u00edneas de punto a punto.<\/li>\n<li>Los rect\u00e1ngulos, sin embargo, se dibujan a partir de la coordenada de su v\u00e9rtice superior izquierda y despu\u00e9s se indican los p\u00edxeles de anchura y de altura (por este orden).<\/li>\n<li>Las elipses se dibujan de una manera parecida a los rect\u00e1ngulos. Tenemos unas coordenadas y la anchura y la altura. Pero, en este caso, las coordenadas indican el centro de la elipse.<\/li>\n<li>La figura m\u00e1s complicada de todas es el arco.<\/li>\n<\/ul>\n<p>El siguiente paso que hay que hacer es probar todos los ejemplos que est\u00e1n en el libro, del 3-3 al 3-6.<\/p>\n<p>Par\u00e9monos un momento en el ejemplo 3-6. Y en particular en esta instrucci\u00f3n:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">ellipse<\/span>(278, -100, 400, 400);<\/pre>\n<p>\u00bfQu\u00e9 quiere decir que la posici\u00f3n <strong>y<\/strong> del centro de la elipse sea -100? Pues que el centro de la elipse est\u00e1 fuera del <em>canvas<\/em>, 100 puntos por encima de su l\u00edmite superior. S\u00ed, podemos \u00abpintar\u00bb fuera del <em>canvas<\/em>.<\/p>\n<h4>La funci\u00f3n <span style=\"font-family: Courier, Arial;\">arc()<\/span><\/h4>\n<p>El ejemplo 3-7 usa la funci\u00f3n <span style=\"font-family: Courier, Arial;\">arc()<\/span>.<\/p>\n<p>Podemos recurrir a esta funci\u00f3n usando radianes o grados seg\u00fan nos sea m\u00e1s \u00fatil. Para poder usar radianes, p5.js tiene definidas un conjunto de constantes relacionadas con el n\u00famero pi. En la figura 3-2 del libro se puede apreciar un c\u00edrculo donde se ven todas las posiciones tanto en radianes como en grados.<\/p>\n<p>Para empezar nos tenemos que fijar en que la posici\u00f3n 0 se encuentra a la derecha del c\u00edrculo (en un reloj ser\u00edan las 3). Pi se encuentra justo en el otro lado; por lo tanto, si vamos de 0 a pi, dibujaremos un semic\u00edrculo. Prob\u00e9moslo:<\/p>\n<pre>function <span style=\"color: #4a86e8; font-weight: bold;\">setup<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">createCanvas<\/span>(480, 120);\r\n}\r\n\r\nfunction <span style=\"color: #4a86e8; font-weight: bold;\">draw<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">background<\/span>(204);\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(90, 60, 80, 80, 0, PI);\r\n}<\/pre>\n<p>Hay que recordar lo siguiente:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(x, y, width, height, inicioDibujo, <span style=\"color: green;\">finalDibujo<\/span>);<\/pre>\n<ul>\n<li>Los dos primeros n\u00fameros son las coordenadas del centro del c\u00edrculo (o elipse).<\/li>\n<li>Los dos siguientes son la anchura y la altura (son iguales \u21d2 es un c\u00edrculo).<\/li>\n<li>El quinto indica d\u00f3nde empezamos a dibujar (en el punto 0).<\/li>\n<li>El sexto indica hasta d\u00f3nde dibujamos (en el punto pi).<\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-141\" src=\"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/06\/PID_00258586_007.jpg\" alt=\"\" width=\"602\" height=\"164\" srcset=\"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/06\/PID_00258586_007.jpg 602w, http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/06\/PID_00258586_007-300x82.jpg 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/p>\n<p>Esto es lo que hemos dibujado. Repasemos ahora las constantes que tiene definidas p5.js:<\/p>\n<ul>\n<li>PI: el n\u00famero pi.<\/li>\n<li>TWO_PI: el n\u00famero pi por 2. Equivale al punto 0. Puede ser \u00fatil en algunas ocasiones.<\/li>\n<li>HALF_PI: el n\u00famero pi dividido por 2. Pensemos en un reloj. Si 0 equivale a las 3 y pi equivale a las 9, medio pi equivale a las 6.<\/li>\n<li>QUARTER_PI: el n\u00famero pi dividido por 4.<\/li>\n<\/ul>\n<p>Con estas constantes podemos dividir un c\u00edrculo en 8 partes y dibujar cualquier arco que englobe cualquier conjunto continuo de estas partes. Evidentemente, no hace falta que nos quedemos con estas constantes y podr\u00edamos ser m\u00e1s meticulosos. Un ejemplo:<\/p>\n<pre>function <span style=\"color: #4a86e8; font-weight: bold;\">setup<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">createCanvas<\/span>(480, 120);\r\n}\r\n\r\nfunction <span style=\"color: #4a86e8; font-weight: bold;\">draw<\/span>() {\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">background<\/span>(204);\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(90, 60, 80, 80, <span style=\"color: green;\">PI<\/span>+<span style=\"color: green;\">HALF_PI<\/span>,0);\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(180, 60, 80, 80, <span style=\"color: green;\">PI<\/span>+<span style=\"color: green;\">HALF_PI<\/span>,(<span style=\"color: green;\">PI<\/span>\/6));\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(270, 60, 80, 80, <span style=\"color: green;\">PI<\/span>+<span style=\"color: green;\">HALF_PI<\/span>,(<span style=\"color: green;\">PI<\/span>\/3));\r\n  <span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(360, 60, 80, 80, <span style=\"color: green;\">PI<\/span>+<span style=\"color: green;\">HALF_PI<\/span>,<span style=\"color: green;\">HALF_PI<\/span>);\r\n}<\/pre>\n<p>Este c\u00f3digo dibujar\u00e1 esto:<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-142\" src=\"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/06\/PID_00258586_008.jpg\" alt=\"\" width=\"480\" height=\"119\" srcset=\"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/06\/PID_00258586_008.jpg 480w, http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/06\/PID_00258586_008-300x74.jpg 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/p>\n<p>Lo cual, si lo vemos como un reloj, equivale a las 12:15, las 12:20, las 12:25 y las 12:30.<\/p>\n<h4>Usando grados<\/h4>\n<p>Si no nos gusta esto de usar radianes, tambi\u00e9n podemos usar grados, teniendo en cuenta que dividimos el c\u00edrculo en 360 grados y que la posici\u00f3n cero, de nuevo, est\u00e1 en la parte derecha del c\u00edrculo. Para usar los grados, podemos, o bien usar la funci\u00f3n <span style=\"font-family: Courier, Arial;\">radiants()<\/span>, que hace la conversi\u00f3n de grados a radianes, o bien, tal como se explica en el ejemplo 3-9, podemos indicar, en la funci\u00f3n <span style=\"font-family: Courier, Arial;\">setup()<\/span>, que trabajaremos siempre con grados, usando la funci\u00f3n <span style=\"font-family: Courier, Arial;\">angleMode(DEGREES)<\/span>.<\/p>\n<h3>Superposici\u00f3n de figuras<\/h3>\n<p>No tiene ning\u00fan misterio. Las figuras se pintan seg\u00fan se ejecuta la instrucci\u00f3n correspondiente. Por lo tanto, si dibujamos primero un c\u00edrculo y despu\u00e9s un rect\u00e1ngulo, el rect\u00e1ngulo estar\u00e1 por encima del c\u00edrculo.<\/p>\n<h3>Propiedades de las figuras<\/h3>\n<p>Podemos cambiar diferentes propiedades de las figuras. Algunas (enlazadas a su explicaci\u00f3n en el manual de referencia de p5.js) son:<\/p>\n<ul>\n<li>La funci\u00f3n <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/noStroke\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">noStroke()<\/span><\/a> elimina el borde de las figuras.<\/li>\n<li>La funci\u00f3n <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/strokeWeight\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">strokeWeight()<\/span><\/a> nos permite determinar la anchura del borde de las figuras.<\/li>\n<li>Con la funci\u00f3n <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/strokeJoin\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">strokeJoin()<\/span><\/a> podemos hacer que los \u00e1ngulos sean redondeados.<\/li>\n<li>La funci\u00f3n <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/strokeCap\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">strokeCap()<\/span><\/a> determina c\u00f3mo es el final de las l\u00edneas.<\/li>\n<li>La funci\u00f3n <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/rectMode\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">rectMode()<\/span><\/a> nos permite determinar c\u00f3mo se tienen que interpretar los par\u00e1metros que recibe la funci\u00f3n <span style=\"font-family: Courier, Arial;\">rect()<\/span>. Mirad el manual de referencia para tener m\u00e1s informaci\u00f3n.<\/li>\n<li>La funci\u00f3n <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/ellipseMode\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">ellipseMode()<\/span><\/a> nos permite determinar c\u00f3mo se tienen que interpretar los par\u00e1metros que recibe la funci\u00f3n <span style=\"font-family: Courier, Arial;\">ellipse()<\/span>. Mirad el manual de referencia para tener m\u00e1s informaci\u00f3n.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>El cap\u00edtulo 3: Dibujar Si no lo hab\u00e9is hecho ya, lo primero que haremos ser\u00e1 leer la primera p\u00e1gina de este cap\u00edtulo del libro. Nos explica qu\u00e9 es esto del canvas y c\u00f3mo se define su tama\u00f1o. \u00bfDudas? \u00a1Usad el foro del aula! Abrimos el editor en l\u00ednea de p5.js y autom\u00e1ticamente se carga con [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false},"acf":[],"_links":{"self":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/pages\/3627"}],"collection":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/comments?post=3627"}],"version-history":[{"count":8,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/pages\/3627\/revisions"}],"predecessor-version":[{"id":4179,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/pages\/3627\/revisions\/4179"}],"wp:attachment":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/es\/wp-json\/wp\/v2\/media?parent=3627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}