Задать вопрос
@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?

Буду благодарен за помощь.
  • Вопрос задан
  • 146 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
@SuperProshka Автор вопроса
Ivan Bogachev Добрый день!
Я решил начать с текстового эффекта попроще (Как сделать эффект текста на кривой безье?) - написать текст по окружности, но столкнулся в с проблемой с расчетом точек, в которых написаны буквы.
Цель расчета этих точек - использовать их для расчета rectangle, который ограничивает написанный по окружности текст.
Буду благодарен, если посмотрите.

P.S. Смог сделать
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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