Задать вопрос
@SuperProshka

Как написать текст на окружности и посчитать точки?

Добрый день!
Я отрисовываю текст на окружности на html canvas вот таким образом:
canv.ctx.translate(centerX, centerY); 

        let startAngle = 0;
        for (var j = 0; j < text.length; j++) {
            var charWid = text[j].width;
            var textHeight = text[j].height;
            startAngle += (charWid / (this.data.diameter / 2 - textHeight)) / 2 * -clockwise;
        }
    
        canv.ctx.rotate(startAngle);

        let currentAngle = startAngle;

        let drawnPoints = [];

        for (var j = 0; j < text.length; j++) {
            var charWid = text[j].width;
            var textHeight = text[j].height;
            let angle = (charWid/2) / (this.data.diameter / 2 - textHeight) * clockwise;

            let x = Math.cos(currentAngle + angle) * (this.data.diameter / 2 - textHeight / 2);
            let y = -Math.sin(currentAngle + angle) * (this.data.diameter / 2 - textHeight / 2);

            drawnPoints.push({ x, y, symbol: text[j].symbol });

            canv.ctx.rotate(angle); 
            canv.ctx.fillText(text[j].symbol, 0, (0 - this.data.diameter / 2 + textHeight / 2));
            canv.ctx.rotate(angle);
            currentAngle += angle * 2;
        }
        canv.ctx.restore();

        for (let i = 0; i < drawnPoints.length; i++) {
            canv.ctx.fillStyle = "yellow";
            canv.ctx.beginPath();
            canv.ctx.arc(drawnPoints[i].x, drawnPoints[i].y, 5, 0, 2 * Math.PI);
            canv.ctx.fill();
        }

676da3950b4b6398521125.png
У меня два вопроса:
1) почему именно так считается start angle? (да и в цикле почти также считается аддитивная составляющая к углу)
2) Почему у меня не правильно считаются drawnPoint?

Буду благодарен за помощь.
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы