Generating triangular/hexagonal coordinates (xyz)

后端 未结 5 1299
时光取名叫无心
时光取名叫无心 2020-12-02 07:50

I\'m trying to come up with an iterative function that generates xyz coordinates for a hexagonal grid. With a starting hex position (say 0,0,0 for simplicity), I want to cal

5条回答
  •  遥遥无期
    2020-12-02 08:07

    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    ctx.textAlign = "center";
    
    const radius = 20;
    const altitude = Math.sqrt(3) * radius;
    const total = 3;
    for (let x = -total; x <= total; x++) {
        let y1 = Math.max(-total, -x-total);
        let y2 = Math.min(total, -x+total);
        for (let y = y1; y <= y2; y++) {
            let xx = x * altitude + Math.cos(1/3*Math.PI) * y * altitude;
            let yy = y * radius * 1.5;
            xx += canvas.width/2;
            yy += canvas.height/2;
            drawHex(xx, yy, radius);
            ctx.fillText(x+","+y, xx, yy);
        }
    }
    
    function drawHex(x, y, radius){
        ctx.beginPath();
        for(let a = 0; a < Math.PI*2; a+=Math.PI/3){
            let xx = Math.sin(a) * radius + x;
            let yy = Math.cos(a) * radius + y;
            if(a == 0) ctx.moveTo(xx, yy);
            else ctx.lineTo(xx, yy);
        }
        ctx.stroke();
    }

提交回复
热议问题