Лекция
Привет, сегодня поговорим про php вывод фразы по кругу в текстовом режиме, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое php вывод фразы по кругу в текстовом режиме , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .
340:-80:260
Щ Ч Ц Х
Ь Ф
Ы
Ь У
Т
Э
С
Ю Р
Я
П
О
А
Б Н
М
В
Л
Г К
Д
Е Й
Ё Ж З И
Подсказки для глупеньких Разберем задачу по пунктам. Об этом говорит сайт https://intellect.icu . Во-первых, как найти, где должна находиться та или иная буква? Как расставить их по кругу? Для этого придется вспомнить тригонометрию. Если точка находится на круге, то есть определенный угол а между, допустим осью X и линией, проведенной к точке. Угол измеряется в градусах и может принимать значения от 0 до 360*. Соответственно, буквы можно поставить так, чтобы угол а до них равномерно менялся от 0 до 360*. Например, если у нас фраза из 36 символов, то можно расставлять буквы через каждые 10* - в сумме как раз наберется 360*, или полный круг. То есть, делим 360* на число букв и получаем угол между 2 соседними буквами. Итак, предположим, что центр круга совпадает с началом координат. Нам известен радиус круга и угол, на котором находится буква. Как теперь найти ее координаты? Опять придется вспомнить тригонометрию. Мы можем взять точку с буквой и опустить из нее перпендикуляр (отрезок LK). Мы получаем прямоугольный треугольник (OLK), а в прямоугольном треугольнике, как известно, стороны связаны между собой через синус, косинусы и тангенсы и угол а (почитай про синус в Википедии). Чтобы не мучать тебя формулами и математикой, так и быть, сразу же напишу формулу для решения. Итак, sin(a)= LK / LO, а cos(a)= КО / LO. LO - это радиус круга (его мы задаем сами и он нам известен), а у конкретной буквы нам тоже известен, потому переставив местами пару слагаемых, получаем (координата х буквы) КО = LO * sin(a) (координата у буквы) LK = LO * cos(a) Итак, чтобы получить координаты буквы, достаточно подставить радиус круга (LO) и угол а в формулу. Итак, мы можем вычислить координаты любой буквы. Остался последний вопрос: а как расположить букву в нужной точке? Ведь echo выводит текст слева направо, а на в произвольном порядке. Итак, как выводить буквы в заданных позициях? Для этого мы сделаем массив, каждый элемент которого представляет собой строчку. Каждая строчка, в свою очередь, является массивом, состоящим из отдельных букв. Изначально все элементы этих массивов мы заполняем пробелами, то есть получаем что-то вроде: $screen = array(); $screen[0] - array(0 => ' ', 1 => ' ', 2 => ' ', ...); $screen[l] = array(0 => ' ', 1 => ' ', 2 => ' ', ...); • •• • $screen[29] - array(0 =>' ',1=> ' ', 2 =>' ' ...);
Итак, $screen[0] - это первая строка, a $screen[0][0] - первая буква первой строки. Мы можем записать какую-то букву в элемент Sscreen [$у][$х], чтобы вывести ее в нужном месте. После того, как мы нашли координаты каждой буквы и поместили их в массив Sscreen, остается его вывести. Для этого мы просто в цикле проходим по этому массиву и выводим символы из него. Можно выводить за раз целую строчку, если с умом применить функцию implode(). Собственно, этой информации более чем достаточно, предупрежу лишь о подвохах. Вот они: - в РНР (как и вообще в программировании) функции sln() и cos() принимают угол в радианах. Радиан - это такая единица измерения, в которой 180* соответствуют числу п (3.1415...). Как перевести из градусов в радианы - подумай сам или погугли. - Возможно, при расчете координат придется поменят знак на минус: перед координатами х или у. - В массив $screen можно записывать буквы только под целыми координатами (а синус доет дробный результат) - значит надо не забыть про округление и round() - Поскольку буквы не квадратные, а прямоугольные, координату х надо домножить на подобранный опытным путем коэффициент, иначе круг будет сплющенным - Если менять не только угол, но и радиус, можно сделать спираль вместо круга!
<?php
error_reporting(-1);
mb_internal_encoding('utf-8');
function mod($a, $n) {
return ($a % $n) + ($a < 0 ? $n : 0);
}
function dif($argument0,$argument1)
{
$d= rad2deg( deg2rad($argument1)- deg2rad($argument0));
if ($d<0)$d=360+$d;
return $d;
}
$phrase = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧЩЬЫЬЭЮЯ";
$phraselength = mb_strlen($phrase);
$fromAngle =- 80;
$toAngle = 260;
$radius = 12.5;
$height = 30;
$centerX =40;
$centerY = 15;
$screen = array();
for ($y = 0; $y < $height;$y++) {
$screen[$y] = array_fill(0, 80, ' ');
}
// if ($toAngle<0)$toAngle=360+$toAngle;
//if ($fromAngle<0)$fromAngle=180+$fromAngle;
/* $fromAngle=$fromAngle-270;
$toAngle=$toAngle-270;
*/
echo dif($fromAngle,$toAngle),':',$fromAngle,':',$toAngle,"<br />";
$n=0;
$a=$fromAngle;//
for ($n=0;$n<$phraselength;$n++)
{
$x=round($centerX+2.0*$radius * sin(deg2rad ($a)));
$y=round($centerY+$radius * cos(deg2rad ($a)));
echo mb_substr( $phrase,$n,1),': a=' ,$a,': r=' ,deg2rad($a),': x=',$x,': y=',$y,"<br />";
$screen[$y][$x]=mb_substr( $phrase,$n,1) ;
$a=$a+dif($fromAngle,$toAngle) /($phraselength-1);
if ($a>360)$a=0;
}
echo "<pre>";
//var_dump($screen);
foreach ($screen AS $st)
{ $st=implode('',$st);
echo $st."<br />";
}

Надеюсь, эта статья про php вывод фразы по кругу в текстовом режиме, была вам полезна, счастья и удачи в ваших начинаниях! Надеюсь, что теперь ты понял что такое php вывод фразы по кругу в текстовом режиме и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Комментарии