{"id":3603,"date":"2019-08-17T00:33:45","date_gmt":"2019-08-16T22:33:45","guid":{"rendered":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/?page_id=3603"},"modified":"2019-09-02T16:33:41","modified_gmt":"2019-09-02T14:33:41","slug":"1-4-dibuixar","status":"publish","type":"page","link":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/1-4-dibuixar\/","title":{"rendered":"1.4. Dibuixar"},"content":{"rendered":"<h2>El cap\u00edtol 3: Dibuixar<\/h2>\n<p>Si no ho heu fet ja, el primer que farem ser\u00e0 llegir la primera plana d\u2019aquest cap\u00edtol del llibre. Ens explica qu\u00e8 \u00e9s aix\u00f2 del <em>canvas<\/em> i com es defineix la seva mida. Dubtes? Feu servir el f\u00f2rum de l\u2019aula!<\/p>\n<p>Obrim l\u2019editor online de p5.js i autom\u00e0ticament es carrega amb aquest codi:<\/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>Amb la funci\u00f3 <span style=\"font-family: Courier, Arial;\">setup()<\/span> estem creant l\u2019espai on dibuixarem el <em>canvas<\/em>, d\u2019una mida de 400 p\u00edxels d\u2019amplada i 400 d\u2019al\u00e7ada.<\/p>\n<div class=\"featured featured-blue\"><p>Prova de canviar l\u2019amplada a 600 p\u00edxels i executa el programa. Fixa\u2019t com creix el requadre del <em>canvas<\/em>. Torna a posar l\u2019amplada a 400 p\u00edxels.<\/p>\n<\/div>\n<p>Amb la funci\u00f3 <span style=\"font-family: Courier, Arial;\">draw()<\/span> seleccionem el color de fons del <em>canvas<\/em>. M\u00e9s endavant, en aquest mateix cap\u00edtol, veurem com pintar amb diferents colors.<\/p>\n<p>Passem al llibre i copiem l\u2019exemple 3-2. El que fem \u00e9s dibuixar un <em>canvas<\/em> de 480 punts d\u2019amplada i 120 d\u2019al\u00e7ada. Despr\u00e9s pintem el <em>canvas<\/em> de color gris i dibuixem un punt a la posici\u00f3 horitzontal 240 i vertical 60\u2026 P\u00edxels, \u00e9s clar.<\/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 \u00e9s un punt molt petit, aix\u00ed que costa una mica veure. Per\u00f2 hi \u00e9s, just al mig.<\/p>\n<h3>El sistema de coordenades<\/h3>\n<p>Fem una petita prova. A l\u2019exercici anterior, canviem la posici\u00f3 on dibuixem el punt:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">point<\/span>(10, 60);<\/pre>\n<p>Ara, trobarem el punt a la part esquerra del <em>canvas<\/em> i a la mateixa al\u00e7ada vertical. El canviem de nou:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">point<\/span>(10, 10);<\/pre>\n<p>Ara el tenim a la part superior esquerra. Podem fer m\u00e9s proves amb diferents posicions, per\u00f2 ja podem veure que el sistema de coordenades de p5.js posa la posici\u00f3 0,0 (si comencem per 0) a dalt a l\u2019esquerra i, per tant, en aquest <em>canvas<\/em>, la darrera posici\u00f3, a la part de sota, a la dreta, ser\u00e0 la posici\u00f3 479,119.<\/p>\n<div class=\"featured featured-blue\"><p>Proveu de canviar el punt de lloc i comproveu si apareix al lloc on creieu que ha d\u2019apar\u00e8ixer. Qu\u00e8 passa si posem el punt a la posici\u00f3 480, 120?<\/p>\n<\/div>\n<h3>Figures b\u00e0siques<\/h3>\n<p>A la p\u00e0gina 20, trobem les funcions que ens permeten dibuixar les figures b\u00e0siques a partir de les quals podem fer gaireb\u00e9 qualsevol dibuix. No les explicarem aqu\u00ed perqu\u00e8 estan totes explicades al llibre, nom\u00e9s assenyalem alguns punts a tenir present:<\/p>\n<ul>\n<li><strong>x<\/strong> i <strong>y<\/strong> sempre representen coordenades. La <strong>x<\/strong> la posici\u00f3 horitzontal i la <strong>y<\/strong> la vertical.<\/li>\n<li>Hi ha figures que les dibuixem a partir dels v\u00e8rtex. S\u2019indiquen tots els v\u00e8rtex de la figura i es dibuixen l\u00ednies de punt a punt.<\/li>\n<li>Els rectangles, per\u00f2, es dibuixen a partir de la coordenada del seu v\u00e8rtex superior esquerre i despr\u00e9s s\u2019indiquen els p\u00edxels d\u2019amplada i d\u2019al\u00e7ada (per aquest ordre).<\/li>\n<li>Les el\u00b7lipses es dibuixen d\u2019una manera semblant als rectangles. Tenim unes coordenades i l\u2019amplada i l\u2019al\u00e7ada. Per\u00f2 en aquest cas, les coordenades indiquen el centre de l\u2019el\u00b7lipse.<\/li>\n<li>La figura m\u00e9s complicada de totes \u00e9s l\u2019arc.<\/li>\n<\/ul>\n<p>El pas seg\u00fcent a fer \u00e9s provar tots els exemples que hi ha al llibre, del 3-3 al 3-6.<\/p>\n<p>Aturem-nos un moment en l\u2019exemple 3-6. I, en particular, en aquesta instrucci\u00f3:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">ellipse<\/span>(278, -100, 400, 400);<\/pre>\n<p>Qu\u00e8 vol dir que la posici\u00f3 <strong>y<\/strong> del centre de l\u2019el\u00b7lipse sigui -100? Doncs que el centre de l\u2019el\u00b7lipse est\u00e0 fora del <em>canvas<\/em>, 100 punts per sobre del seu l\u00edmit superior. S\u00ed, podem \u201cpintar\u201d fora del <em>canvas<\/em>.<\/p>\n<h4>La funci\u00f3 <span style=\"font-family: Courier, Arial;\">arc()<\/span><\/h4>\n<p>L\u2019exemple 3-7 fa servir la funci\u00f3 <span style=\"font-family: Courier, Arial;\">arc()<\/span>.<\/p>\n<p>Aquesta funci\u00f3 la podem fer servir usant radians o graus segons ens sigui m\u00e9s \u00fatil. Per a poder fer servir radians, p5.js t\u00e9 definides un conjunt de constants relacionades amb el nombre pi. A la figura 3-2 del llibre es pot veure un cercle on es perceben totes les posicions, tant en radians com en graus.<\/p>\n<p>Per a comen\u00e7ar ens hem de fixar en qu\u00e8 la posici\u00f3 0 est\u00e0 a la dreta del cercle (en un rellotge serien les 3). Pi est\u00e0 just a l\u2019altra banda. Per tant, si anem de 0 a pi, dibuixarem un semicercle. Provem-ho:<\/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>Cal recordar que:<\/p>\n<pre><span style=\"color: #4a86e8; font-weight: bold;\">arc<\/span>(x, y, width, height, iniciDibuix, <span style=\"color: green;\">finalDibuix<\/span>);<\/pre>\n<ul>\n<li>Els dos primers nombres s\u00f3n les coordenades del centre del cercle (o el\u00b7lipse).<\/li>\n<li>Els dos seg\u00fcents s\u00f3n l\u2019amplada i l\u2019al\u00e7ada (s\u00f3n iguals \u21d2 \u00e9s un cercle).<\/li>\n<li>El cinqu\u00e8 indica on comencem a dibuixar (en el punt 0).<\/li>\n<li>El sis\u00e8 indica fins a on dibuixem (al punt 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>Aix\u00f2 \u00e9s el que hem dibuixat. Repassem ara les constants que t\u00e9 definides p5.js:<\/p>\n<ul>\n<li>PI: El nombre pi.<\/li>\n<li>TWO_PI: el nombre pi per 2. Equival al punt 0. Pot ser \u00fatil algunes vegades.<\/li>\n<li>HALF_PI: el nombre pi dividit per 2. Pensem en un rellotge. Si 0 equival a les 3 i pi equival a les 9, mig pi equival a les 6.<\/li>\n<li>QUARTER_PI: el nombre pi dividit per 4.<\/li>\n<\/ul>\n<p>Amb aquestes constants podem dividir un cercle en 8 parts i dibuixar qualsevol arc que englobi qualsevol conjunt continu d\u2019aquestes parts. Evidentment, no cal que ens quedem amb aquestes constants i podr\u00edem filar m\u00e9s prim. Per exemple:<\/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>Aquest codi dibuixar\u00e0 aix\u00f2:<\/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>Que, si ho veiem com un rellotge, equival a les 12:15, les 12:20, les 12:25 i les 12:30.<\/p>\n<h4>Usant graus<\/h4>\n<p>Si no ens agrada aix\u00f2 de fer servir radians, tamb\u00e9 podem fer servir graus, tenint en compte que dividim el cercle en 360 graus i que la posici\u00f3 zero, de nou, est\u00e0 a la part dreta del cercle. Per a fer servir els graus, podem, o fer servir la funci\u00f3 <span style=\"font-family: Courier, Arial;\">radiants()<\/span>, que fa la conversi\u00f3 de graus a radians, o, tal com s\u2019explica en l\u2019exemple 3-9, podem indicar a la funci\u00f3 <span style=\"font-family: Courier, Arial;\">setup()<\/span> que sempre treballarem amb graus, fent servir la funci\u00f3 <span style=\"font-family: Courier, Arial;\">angleMode(DEGREES)<\/span>.<\/p>\n<h3>Superposici\u00f3 de figures<\/h3>\n<p>No t\u00e9 cap misteri. Les figures es pinten segons s\u2019executa la instrucci\u00f3 corresponent. Per tant, si dibuixem primer un cercle i despr\u00e9s un rectangle, el rectangle estar\u00e0 per sobre del cercle.<\/p>\n<h3>Propietats de les figures<\/h3>\n<p>Podem canviar diferents propietats de les figures. Algunes (enlla\u00e7ades amb la seva explicaci\u00f3 del manual de refer\u00e8ncia de p5.js) s\u00f3n:<\/p>\n<ul>\n<li>La funci\u00f3 <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/noStroke\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">noStroke()<\/span><\/a> elimina la vora de les figures.<\/li>\n<li>La funci\u00f3 <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/strokeWeight\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">strokeWeight()<\/span><\/a> ens permet determinar l\u2019amplada de la vora de les figures.<\/li>\n<li>Amb la funci\u00f3 <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/strokeJoin\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">strokeJoin()<\/span><\/a> podem fer que els angles siguin arrodonits.<\/li>\n<li>La funci\u00f3 <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/strokeCap\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">strokeCap()<\/span><\/a> determina com \u00e9s el final de les l\u00ednies.<\/li>\n<li>La funci\u00f3 <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/rectMode\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">rectMode()<\/span><\/a> ens permet determinar com s\u2019han d\u2019interpretar els par\u00e0metres que rep la funci\u00f3 <span style=\"font-family: Courier, Arial;\">rect()<\/span>. Mireu el manual de refer\u00e8ncia per a tenir m\u00e9s informaci\u00f3.<\/li>\n<li>La funci\u00f3 <a href=\"https:\/\/p5js.org\/es\/reference\/#\/p5\/ellipseMode\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: Courier, Arial;\">ellipseMode()<\/span><\/a> ens permet determinar com s\u2019han d\u2019interpretar els par\u00e0metres que rep la funci\u00f3 <span style=\"font-family: Courier, Arial;\">ellipse()<\/span>. Mireu el manual de refer\u00e8ncia per a tenir m\u00e9s informaci\u00f3.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>El cap\u00edtol 3: Dibuixar Si no ho heu fet ja, el primer que farem ser\u00e0 llegir la primera plana d\u2019aquest cap\u00edtol del llibre. Ens explica qu\u00e8 \u00e9s aix\u00f2 del canvas i com es defineix la seva mida. Dubtes? Feu servir el f\u00f2rum de l\u2019aula! Obrim l\u2019editor online de p5.js i autom\u00e0ticament es carrega amb aquest [&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\/wp-json\/wp\/v2\/pages\/3603"}],"collection":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/comments?post=3603"}],"version-history":[{"count":7,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages\/3603\/revisions"}],"predecessor-version":[{"id":4178,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages\/3603\/revisions\/4178"}],"wp:attachment":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/media?parent=3603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}