Я пытаюсь создать небольшой круговой эффект «эквалайзера» с использованием JavaScript и HTML canvas для небольшого проекта, над которым я работаю, и он прекрасно работает, за исключением одной мелочи.Это просто серия прямоугольных полос, перемещающихся во времени в mp3 - ничего особенного, но в данный момент все полосы указывают в одном направлении (то есть 0 радиан или 90 градусов).
Я хочу, чтобы каждый соответствующий прямоугольник вокруг края круга указывал прямо от центральной точки, а не вправо.У меня 360 баров, поэтому, естественно, каждый должен быть повернут на 1 градус больше, чем предыдущий.
Я думал, что выполнение angle = i * Math.PI / 180 исправит это, но, похоже, не имеет значения, что я делаю с функцией поворота - они всегда заканчивают тем, что указывают странными и чудесными направлениями,и перевод в миллион миль от того места, где они были.И я не понимаю почему.Кто-нибудь может увидеть, где я иду не так?
Код моей рамки, для справки, выглядит следующим образом:
function frames() {
// Clear the canvas and get the mp3 array
window.webkitRequestAnimationFrame(frames);
musicArray = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(musicArray);
ctx.clearRect(0, 0, canvas.width, canvas.height);
bars = 360;
for (var i = 0; i < bars; i++) {
// Find the rectangle's position on circle edge
distance = 100;
var angle = i * ((Math.PI * 2) / bars);
var x = Math.cos(angle) * distance + (canvas.width / 2);
var y = Math.sin(angle) * distance + (canvas.height / 2);
barWidth = 5;
barHeight = (musicArray[i] / 4);
// Fill with a blue-green gradient
var grd = ctx.createLinearGradient(x, 0, x + 40, 0);
grd.addColorStop(0, "#00CCFF");
grd.addColorStop(1, "#00FF7F");
ctx.fillStyle = grd;
// Rotate the rectangle according to position
// ctx.rotate(i*Math.PI/180); - DOESN'T WORK
// Draw the rectangle
ctx.fillRect(x, y, barHeight, barWidth);
}