Лекция
Привет, сегодня поговорим про 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)
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)