開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Safari、Firefox(Web browser)
Eloquent JavaScript(Marijn Haverbeke 著、No Starch Press)のPart 2(Browser)、Chapter 16(Drawing on Canvas)、Exercises(Shapes)を取り組んでみる。
Exercises(Shapes)
コード(Emacs)
HTML5
<canvas width="600" height="300" id="trapezoid0" ></canvas> <br> <canvas width="600" height="300" id="diamond0" ></canvas> <br> <canvas width="600" height="300" id="zigzagging0" ></canvas> <br> <canvas width="600" height="300" id="spiral0" ></canvas> <br> <canvas width="600" height="300" id="star0" ></canvas> <script src="sample1.js"></script>
JavaScript
'use strict'; let trapezoid = (pos=[200, 100]) => { let canvas = document.querySelector('#trapezoid0'), w = canvas.width, h = canvas.height, ctx = canvas.getContext('2d'); ctx.moveTo(pos[0], pos[1]); ctx.lineTo(w - pos[0], pos[1]); ctx.lineTo(w - pos[0] + 50, h - pos[1]); ctx.lineTo(pos[0] - 50, h - pos[1]); ctx.closePath(); ctx.strokeStyle = 'green'; ctx.stroke(); }; trapezoid(); let diamond = (radians = Math.PI / 4, color='red') => { let canvas = document.querySelector('#diamond0'), w = canvas.width, h = canvas.height, ctx = canvas.getContext('2d'); ctx.fillStyle = color; ctx.translate(w / 2 - 150 * Math.cos(radians), h / 2); ctx.rotate(-radians); ctx.fillRect(0, 0, 150, 150); }; diamond(); let zigzagging = (pos=[200, 100]) => { let canvas = document.querySelector('#zigzagging0'), w = canvas.width, h = canvas.height, ctx = canvas.getContext('2d'), l = (h - pos[1]) / 12; ctx.moveTo(pos[0], pos[1]); let left = pos[0], right = w - pos[0], y = pos[1] + l; for (let i = 0; i < 12; i += 1) { if (i % 2 === 0) { ctx.lineTo(right, y); } else { ctx.lineTo(left, y); } y += l; } ctx.strokeStyle = 'purple'; ctx.stroke(); }; zigzagging(); let spiral = () => { let canvas = document.querySelector('#spiral0'), w = canvas.width, h = canvas.height, ctx = canvas.getContext('2d'); let cx = w / 2, cy= h / 2, r = 20; ctx.moveTo(cx + r, cy); for (let i = 0; i < 10; i += 1) { if (i % 2 === 0) { ctx.arc(cx, cy, r, 0, Math.PI); r += 10; cx += 10; } else { ctx.arc(cx, cy, r, Math.PI, 2 * Math.PI); r += 10; cx -= 10; } } ctx.strokeStyle = 'blue'; ctx.stroke(); }; spiral(); let star = (color='yellow') => { let canvas = document.querySelector('#star0'), w = canvas.width, h = canvas.height, ctx = canvas.getContext('2d'); let cx = w / 2, cy = h / 2, r1 = 125, r2 = 10, angle = 2 * Math.PI / 8; ctx.moveTo(cx + r1, cy); for (let a = 0; a < 2 * Math.PI ; a += angle) { ctx.quadraticCurveTo(cx + r2 * Math.cos(a + angle / 2), cy + r2 * Math.sin(a + angle / 2), cx + r1 * Math.cos(a + angle), cy + r1 * Math.sin(a + angle)) } ctx.fillStyle = color; ctx.fill(); }; star();
0 コメント:
コメントを投稿