ゆうは

わかりたいことを深堀り

Canvasで円を並べる

JavaScriptCanvasで円を並べてみました。

円を並べることは、横幅・縦幅の感覚などいろいろ理解できるので、基本としていいかなと思っています。

今回はforで円をつくり、それを割り算の商と余で縦と横に並べる方法を使っています。

このやり方は書籍「Designing Math. 数学とデザインをむすぶプログラミング入門」で知りました。

並べた画像

まずは円を並べた画像です。

折り返していることがわかるように右端に隙間を開けています。

Canvasで円を並べる

円を並べるコード

円を並べている部分のコードはこちらです。

for文で円を発生させて、x軸は余りをとり、y軸は商をとってます。

商はMath.floor()を使って整数だけにします。

ctx.strokeStyle = 'red' // 円の枠線の色
for (let i = 0; i < n; i++) {
    let x = i % yoko
    let y = Math.floor(i / yoko)
    ctx.beginPath()
    ctx.arc(r + x * r * 2, r + y * r * 2, r, 0, Math.PI * 2, false)
    ctx.stroke()
}

コード全体

右端の余白はなくした版のコードです。

let canvas, ctx
let curYubiX, curYubiY

window.addEventListener('load', () => {
    canvas = document.getElementById('canvas')
    ctx = canvas.getContext('2d')

    ctx.fillStyle = 'antiquewhite'
    ctx.fillRect(0, 0, canvas.width, canvas.height)

    setup()

    function setup() {
        let n = 73 // 円の全個数
        let r = 64 // 半径
        let yoko = 10 // 横に並ぶ円の個数

        ctx.strokeStyle = 'red' // 円の枠線の色
        for (let i = 0; i < n; i++) {
            let x = i % yoko
            let y = Math.floor(i / yoko)
            ctx.beginPath()
            ctx.arc(r + x * r * 2, r + y * r * 2, r, 0, Math.PI * 2, false)
            ctx.stroke()
        }
    }

    // 画像ダウンロード
    let btn = document.getElementById('btn')
    btn.addEventListener('click', () => {
        let a = document.createElement('a')
        a.href = canvas.toDataURL('image/png,1.0')
        a.download = 'canvas-en_narabe'
        a.click()
    })
})

Canvasで円を並べる

yuuuha.hatenablog.com