ãã®èšäºã¯ã ãããã£ã°ã«ãŒã Advent Calendar 2023 13æ¥ç®ã®èšäºã§ãã ã¯ããã« ããã«ã¡ã¯ãæ°å4幎ç®ã®å€§éã§ãã12æã«ãªã£ãŠå¯ããªã£ãŠãããããä»åã¯p5.jsã§éªãéããããªã¢ãã¡ãŒã·ã§ã³ãå®è£
ããŸããã p5.jsãšã¯ïŒ p5.jsãšã¯ã¯ãªãšã€ãã£ãã»ã³ãŒãã£ã³ã°ã®ããã«äœãããJavaScriptã®ã©ã€ãã©ãªã§ããã¯ãªãšã€ãã£ãã»ã³ãŒãã£ã³ã°ã¯ããã°ã©ãã³ã°ã䜿ã£ãŠã¢ãŒãäœåãªã©ãåµäœããããšãæããŸãã å
¬åŒããŒãžïŒ https://p5js.org/ å®æäŸ å®è¡äŸ p5.jsã䜿ã£ãŠå®è£
ããã°ãã©ãŠã¶äžã§è¡šç€ºã§ãã以äžã®ãããªã¢ãã¡ãŒã·ã§ã³ãäœæã§ããŸãã p5.jsã§éªãéãããæ§å ãã¡ã€ã«æ§æ p5.jsã§ã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ããŠãããã¡ã€ã«ã¯sketch.jsã§ããindex.htmlã§ã¯sketch.jsã®ã€ã³ããŒããšCDNããp5.jsã®ååŸãè¡ã£ãŠããŸãã ââSnow index.html sketch.js index.htmlã®äžèº« <html> <head> <meta charset="UTF-8"> <script src="https://cdn.jsdelivr.net/npm/p5@1.8.0/lib/p5.js"></script> <script src="./sketch.js"></script> </head> <body> </body> </html> sketch.jsã®äžèº« let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); for(let snow of snows) { snow.updatePosition(); snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(-20, -1000); size = random(6, 20); speed = random(1, 2); sides = 6; angle = TWO_PI/ this.sides; updatePosition() { this.y += this.speed; if(this.y > height + 30) { this.y = random(-20, -300); } } drawSnowFlake() { push(); stroke(255); translate(this.x, this.y); for (let i = 0; i < this.sides; i++) { line(0, 0, this.size/2*cos(this.angle * i), this.size/2*sin(this.angle * i)); } pop(); } } å®è¡æ¹æ³ index.htmlããã©ãŠã¶ã§éãã°éªãéãã¢ãã¡ãŒã·ã§ã³ã衚瀺ãããŸãã äœææé éªãéããã¢ãã¡ãŒã·ã§ã³ã®å®è£
ã®ä»æ¹ã段éã远ã£ãŠèª¬æããŸããã¢ãã¡ãŒã·ã§ã³ã¯sketch.jsã®ã¿ã§å®è£
ããŠããããããã以éã¯sketch.jsã®ã¿ã«èšåããŸãã èæ¯ãæã å®è£
äŸ function setup(){ // ãã£ã³ãã¹ã®ãµã€ãºæå® createCanvas(windowWidth, windowHeight); } function draw(){ // èæ¯ãèšè¿° background(30,30,55); } ã³ãŒã説æ setup颿°ã¯ã¢ãã¡ãŒã·ã§ã³ãæåããåã«äžåºŠã ãå®è¡ããã颿°ã§ãããã®ã³ãŒãã§ã¯createCanvasãšãã颿°ã䜿ã£ãŠãã£ã³ãã¹(ç»é¢)ã®å€§ãããèšå®ããŠããŸãã draw颿°ã¯ã¢ãã¡ãŒã·ã§ã³ãæåããéã«1ãã¬ãŒã ããšã«å®è¡ããã颿°ã§ããããã©ã«ãã§ã¯60fpsã§å®è¡ãããŸãããã®ã³ãŒãã§ã¯background颿°ã䜿ã£ãŠãã£ã³ãã¹ã®èæ¯ã®è²ãRGBã§æå®ããŠããŸãã windowWidth, windowHeightã¯p5.jsãæäŸããç°å¢å€æ°ã§ãããŠã£ã³ããŠã®å¹
ãé«ãã衚ããŠããŸãã å®è¡äŸ èæ¯ãæããã³ãŒãã®å®è¡äŸ åãæã å®è£
äŸ function setup(){ createCanvas(windowWidth, windowHeight); } function draw(){ background(30,30,55); // ãã®è¡ä»¥éã®å³åœ¢æåã«ã¯èŒªéç·ã®æåãªã noStroke(); // ãã®è¡ä»¥éã®å³åœ¢æåã§ã¯çœè²ã§å¡ãã€ã¶ã fill(255); // åãæã circle(width/2, height/2, 100); } ã³ãŒã説æ circle颿°ã§ã¯åŒæ°ã§x軞ã®åº§æšãy軞ã®åº§æšã倧ãããæå®ããŠããŸããwidthã¯ãã£ã³ãã¹ã®å¹
ãheightã¯ãã£ã³ãã¹ã®é«ãã衚ãç°å¢å€æ°ã§ãã p5.jsã®åç¹ã¯ãã£ã³ãã¹ã®å·Šäžã«äœçœ®ããŠããŸããxè»žã®æ£æ¹åã¯åç¹ãã峿¹åã§ããyè»žã®æ£æ¹åã¯åç¹ããäžæ¹åã«ãªããŸãã ãã£ã³ãã¹ã®åº§æšè»ž å®è¡äŸ p5.jsã§åãæããæ§å åã倧éã«æã å®è£
äŸ let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); // éªã®é
åãäœæãã for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); // é
åå
šãŠã®éªãæåãã for(let snow of snows) { snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(0, height); size = random(6, 20); drawSnowFlake() { noStroke(); fill(255); circle(this.x, this.y, this.size); } } ã³ãŒã説æ éª(å)ã倧éã«æãããã«éªã¯ã©ã¹ã®é
åãçšããŠããŸããéªã¯ã©ã¹ã§ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠåã®x座æš, y座æš, åã®å€§ãããã©ã³ãã ã§èšå®ããŠããŸããdrawSnowFlakeã¡ãœããã§åãæãã¡ãœãããå®çŸ©ããŠããŸãã å®è¡äŸ p5.jsã§å€§éã«åãæããæ§å ããããã®åãéãã å®è£
äŸ let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); for(let snow of snows) { // ãã¬ãŒã ããšã«éªã®äœçœ®ãæŽæ°ãã snow.updatePosition(); snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(-20, -1000); size = random(6, 20); speed = random(1, 2); updatePosition() { this.y += this.speed; if(this.y > height + 30) { this.y = random(-20, -300); } } drawSnowFlake() { noStroke(); fill(255); circle(this.x, this.y, this.size); } } ã³ãŒã説æ éªãéãããããã«ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯y座æšã®ä¿®æ£ãšé床ã®èšå®ãè¡ããŸãããy座æšã¯ãã£ã³ãã¹ããèŠããªãäžæ¹åã«èšå®ããŠããŸãã updatePositionã¡ãœããã§ãã¬ãŒã ããšã«y座æšãå¢ããŠããããã«æŽæ°ãããããªã¡ãœãããå®è£
ããŸãããå ããŠãéªããã£ã³ãã¹ããå€ãããšãã«ãã£ã³ãã¹ã®äžæ¹åã«æ»ãããã«ããŠããŸãã å®è¡äŸ p5.jsã§åã倧éã«éãããæ§å åãéªã®çµæ¶ã«å€ãã å®è£
äŸ let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); for(let snow of snows) { snow.updatePosition(); snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(-20, -1000); size = random(6, 20); speed = random(1, 2); sides = 6; angle = TWO_PI/ this.sides; updatePosition() { this.y += this.speed; if(this.y > height + 30) { this.y = random(-20, -300); } } drawSnowFlake() { // çŸåšã®ã¹ã¿ã€ã«èšå®ãšå€æãä¿åãã push(); // 茪éç·ãçœè²ã§æåãã stroke(255); // åç¹ãéªã®äœçœ®ã«ç§»åããã translate(this.x, this.y); // ç·ã6æ¬æŸå°ç·ç¶ã«æã for (let i = 0; i < this.sides; i++) { line(0, 0, this.size/2*cos(this.angle * i), this.size/2*sin(this.angle * i)); } // ã¹ã¿ã€ã«èšå®ãšå€æãå
ã«æ»ã pop(); } } ã³ãŒã説æ åããéªã®çµæ¶ã«å€ããããã«drawSnowFlakeã¡ãœãããä¿®æ£ããŸãããpush颿°ã䜿ã£ãŠçŸåšã®åç¹ãä¿æããŠããŸãããã®åŸtranslate颿°ã§åç¹ãçŸåšã®éªã®äœçœ®ã«ç§»åãããŠããŸãããããããŠãããšãéªã®äœçœ®ãåç¹ãšããŠ6æ¬ã®æŸå°ç·ãæãããã®åº§æšæå®ãç°¡åã«ãªããŸããæåŸã«pop颿°ã§åç¹ããã£ã³ãã¹ã®å·Šäžã«æ»ããŸããpush颿°ãšpop颿°ã¯ã»ããã§äœ¿ãå¿
èŠããããŸãã å®è¡äŸ p5.jsã§éªãéãããæ§å ãããã« ä»åã¯p5.jsã䜿ã£ãŠéªãéãã¢ãã¡ãŒã·ã§ã³äœæãè¡ããŸãããp5.jsç¹æã®é¢æ°ãç°å¢å€æ°ãèŠããå¿
èŠããããŸãããç°¡åã«ã¢ãã¡ãŒã·ã§ã³ãããã°ã©ãã³ã°ããããšãã§ããŸãããp5.jsã¯JavaScriptã®ã©ã€ãã©ãªã§ãããããWebãµã€ãã®è£
食ã«ã䜿ãããšãã§ãããšæããŸãã ææ¥ã¯ãD_Wããã®ãšã³ãžãã¢ç®ç·ã§èãããµãŒãã¹èšèšã§ãã ãæ¥œãã¿ã«ïŒ ãããã£ã§ã¯ã ããŸããŸãªãããã¯ããžææŠãã ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ãèå³ã®ããæ¹ã¯ä»¥äžã®æ¡çšãµã€ããã ãæ°è»œã«ãé£çµ¡ãã ããïŒ ãããã£æ ªåŒäŒç€Ÿæ¡çšæ
å ± Tech TalkãMeetUpãéå¬ããŠãããŸãïŒ ãã¡ãããæ°è»œã«ãå¿åãã ããïŒ Event – NIFTY engineering connpassã§ãããã£ã°ã«ãŒãã« åå ããã ããš ã€ãã³ãã® ãç¥ãããå±ããŸãïŒ connpassã§ ãããã£ã°ã«ãŒãã«åå ãã