<?php
error_reporting(-1);
mb_internal_encoding('utf-8');

function coordinate($angle, $radius)
{
    # Расчет сторон треугольника
    $a = cos(deg2rad($angle)) * $radius;
    $b = sin(deg2rad($angle)) * $radius;

    # Расчет координат буквы
    $y = ($radius - $b);
    $x = ($radius + $a) * 2.7;

    return [$x, $y];
}

$phrase = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
$radius = 12.5;
$fromAngle = 80; // Угол с которого начинается фраза
$route = '-'; // Принимает два значения + и - , в зависимости от этого меняется напрвление
$characters = preg_split('//u', $phrase, -1, PREG_SPLIT_NO_EMPTY);
$phraseLength = mb_strlen($phrase);

if ($route == '+') {
    $angle = 360;
} else {
    $angle = -360;
}

$angleBetween = $angle / $phraseLength; // Угол между буквами
$angleOfEachLetter = []; // Массив, который будет содержать угол для каждой буквы

for ($i = 0; $i <= $phraseLength; $i++) {
    $angleOfEachLetter[] = $fromAngle + $i * $angleBetween; // Добавление угла
}
print_r($angleOfEachLetter);

foreach ($angleOfEachLetter as $angle) {
    $coordinatesXY = coordinate($angle, 12.5); // Получаем координаты [x, y] в зависимости от угла буквы
    $coordinatesX[] = $coordinatesXY[0]; // Массив значений координат X
    $coordinatesY[] = $coordinatesXY[1]; // Массив значений координат Y

}
// 
$string = array_fill(0, $radius * 2 * 2.7, ' ');
$strings = array_fill(0, $radius * 2, $string);

for ($i = 0; $i < $phraseLength; $i++) {
    $strings[$coordinatesY[$i]][$coordinatesX[$i]] = $characters[$i];
}

foreach ($strings as $string) {
    echo implode($string) . PHP_EOL;
}
