Я бы попытался создать функцию, которая будет использовать aws шестигранник, чтобы вам не приходилось использовать translate.
См. Ниже
c = document.getElementById("canvas");
context = c.getContext("2d");
function hexagon(x, y, r, color) {
context.beginPath();
var angle = 0
for (var j = 0; j < 6; j++) {
var a = angle * Math.PI / 180
var xd = r * Math.sin(a)
var yd = r * Math.cos(a)
context.lineTo(x + xd, y + yd);
angle += 360 / 6
}
context.fillStyle = color;
context.fill();
}
hexagon(50, 50, 30, "red")
hexagon(40, 40, 10, "blue")
hexagon(60, 60, 10, "lime")
<canvas id=canvas >
Вот разбивка function hexagon(x, y, r, color)
- , она принимает центр шестиугольника (
x,y
) в радиусе (r
) и цвет - мы l oop по шести вершинам и рисуем линии
- расчеты - всего лишь тригонометрия, ничего особенного
При этом мы можем рисовать шестиугольники в любом желаемом месте.
и ту же функцию вы можете легко изменить, чтобы нарисовать восьмиугольник или другие многоугольники.
Анимированная версия этих шестиугольников
c = document.getElementById("canvas");
context = c.getContext("2d");
delta = 0
function hexagon(x, y, r, color) {
context.beginPath();
var angle = 0
for (var j = 0; j < 6; j++) {
var a = angle * Math.PI / 180
var xd = r * Math.sin(a)
var yd = r * Math.cos(a)
context.lineTo(x + xd, y + yd);
angle += 360 / 6
}
context.fillStyle = color;
context.fill();
}
function draw() {
context.clearRect(0, 0, c.width, c.height)
var xd = 10 * Math.sin(delta)
var yd = 10 * Math.cos(delta)
hexagon(50 - xd, 50 - yd, 30, "red")
hexagon(40 + xd, 40 + yd, 10, "blue")
delta += 0.2
}
setInterval(draw, 100);
<canvas id=canvas>
Как видите, нет необходимости использовать перевод