fork(1) download
  1. <?php
  2.  
  3. function coordinate($angle, $radius)
  4. {
  5. # Расчет сторон треугольника
  6. $a = cos(deg2rad($angle)) * $radius;
  7. $b = sin(deg2rad($angle)) * $radius;
  8.  
  9. # Расчет координат буквы
  10. $y = ($radius - $b);
  11. $x = ($radius + $a) * 2.7;
  12.  
  13. return [$x, $y];
  14. }
  15.  
  16. $phrase = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
  17. $radius = 12.5;
  18. $fromAngle = 80; // Угол с которого начинается фраза
  19. $route = '-'; // Принимает два значения + и - , в зависимости от этого меняется напрвление
  20. $characters = preg_split('//u', $phrase, -1, PREG_SPLIT_NO_EMPTY);
  21. $phraseLength = mb_strlen($phrase);
  22.  
  23. if ($route == '+') {
  24. $angle = 360;
  25. } else {
  26. $angle = -360;
  27. }
  28.  
  29. $angleBetween = $angle / $phraseLength; // Угол между буквами
  30. $angleOfEachLetter = []; // Массив, который будет содержать угол для каждой буквы
  31.  
  32. for ($i = 0; $i <= $phraseLength; $i++) {
  33. $angleOfEachLetter[] = $fromAngle + $i * $angleBetween; // Добавление угла
  34. }
  35. print_r($angleOfEachLetter);
  36.  
  37. foreach ($angleOfEachLetter as $angle) {
  38. $coordinatesXY = coordinate($angle, 12.5); // Получаем координаты [x, y] в зависимости от угла буквы
  39. $coordinatesX[] = $coordinatesXY[0]; // Массив значений координат X
  40. $coordinatesY[] = $coordinatesXY[1]; // Массив значений координат Y
  41.  
  42. }
  43. //
  44. $string = array_fill(0, $radius * 2 * 2.7, ' ');
  45. $strings = array_fill(0, $radius * 2, $string);
  46.  
  47. for ($i = 0; $i < $phraseLength; $i++) {
  48. $strings[$coordinatesY[$i]][$coordinatesX[$i]] = $characters[$i];
  49. }
  50.  
  51. foreach ($strings as $string) {
  52. echo implode($string) . PHP_EOL;
  53. }
  54.  
Success #stdin #stdout 0.02s 24996KB
stdin
Standard input is empty
stdout
Array
(
    [0] => 80
    [1] => 69.090909090909
    [2] => 58.181818181818
    [3] => 47.272727272727
    [4] => 36.363636363636
    [5] => 25.454545454545
    [6] => 14.545454545455
    [7] => 3.6363636363636
    [8] => -7.2727272727273
    [9] => -18.181818181818
    [10] => -29.090909090909
    [11] => -40
    [12] => -50.909090909091
    [13] => -61.818181818182
    [14] => -72.727272727273
    [15] => -83.636363636364
    [16] => -94.545454545455
    [17] => -105.45454545455
    [18] => -116.36363636364
    [19] => -127.27272727273
    [20] => -138.18181818182
    [21] => -149.09090909091
    [22] => -160
    [23] => -170.90909090909
    [24] => -181.81818181818
    [25] => -192.72727272727
    [26] => -203.63636363636
    [27] => -214.54545454545
    [28] => -225.45454545455
    [29] => -236.36363636364
    [30] => -247.27272727273
    [31] => -258.18181818182
    [32] => -269.09090909091
    [33] => -280
)
                    Э     Ю      Я     А     Б                     
                                                   В               
               Ь                                                   
          Ы                                             Г          
                                                                   
     Ъ                                                      Д      
                                                                   
  Щ                                                             Е  
                                                                   
Ш                                                                 Ё
                                                                   
                                                                   Ж
Ч                                                                  
                                                                   
Ц                                                                  З
                                                                   
  Х                                                              И 
                                                                   
    Ф                                                          Й   
                                                                   
        У                                                  К       
                                                                   
             Т                                         Л           
                  С                              М                 
                        Р      П     О     Н