Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Функция «ковра»

Anna | 31.05.2014 | нет комментариев

Подшефные ребята постигают вэб-программирование, в частности, PHP.
Одной из первых задач на освоение таблиц <table> они получают задание отрисовать на PHP таблицу умножения, эдак 25х25.
Дальше начинаются примитивные «навороты» — скажем, выкрасить в полученной таблице клетки с четными числами. Как выяснилось, наворотами дозволено наслаждаться часами.

Ожидается увидеть критерием выбора требующей покраски ячейки что-то как бы

...
if (($x * $y) % 2 == 0) $color = "red";
else $color = "white";
...

на выходе получим что-то как бы

Комичную раскраску ячеек дозволено получить при замене 2 на другое число.
Вот — для %4 (оставлю %, что бы подчеркнуть, что применяется проверка остатка от деления)

Вот — для %5

Для примитивных чисел мы получаем «клетку» с размером, соответствующим числу, для комбинированных чисел — довольно комичный паттерн.
Скажем, для %21

Для четных чисел паттерн усердно пытается из себя изображать окружность, а если быть точным — концентрические окружности — скажем для %24

Изображение растянуто по горизонтали — т.к. все-таки числа чем дальше, тем огромное.

Становится ясно, что сама таблица умножения теснее стала менее увлекательна, следственно будем рисовать изображение, в котором 1 пиксель будет соответствовать одной клетке нашей таблицы, ну а цвет — соответствию выбранному условию.
При этом гораздо дозволено увеличить размер таблицы:

Для примера – %720 (6!=1*2*3*4*5*6)

А что если отсекать в условии не по критерию деления нацело, а по критерию остатка, не превышающего некоторого значения?

так выглядит ($x*$y)%720 < 72

Теснее схоже на ковер. Но для большего сходства придется исполнять вот такую операцию:
((($x * $y) % K1) % K2)… %Kn)
Разумно, что показатели обязаны убывать при возрастании n, напротив проку от операции специального не будет — ряд выродится до больше короткого.

так выглядит ($x*$y)%677 %255 %71 < 13

Безусловно же, ковер должен быть цветным. Здесь основное — не переборщить с числом цветов.
В итоге приблизительно такая поделка получилась:

Некоторое число кода на PHP

<?php
$max=rand(500,800);
$k1=$max;
$k2=rand($k1/10,$k1);
$k3=rand($k2/10,$k2);
$k4=rand($k3/10,$k3);
header("Content-type: image/png");
$image = imagecreatetruecolor($max,$max 20);
$black = imagecolorallocate($image,0,0,0);
$cr=rand(0,255);
$cg=rand(0,255);
$cb=rand(0,255);
$dr=0; $dg=0; $db=0;
for ($i=0; $i<$k3;  $i)
 {
  $cl[$i]=imagecolorallocate($image,rand(0,255),rand(0,255), rand(0,255));
 }
for ($y=0; $y<=$max; $y  )
 {
  for ($x=0; $x<=$max; $x  )
   {
    $mux = $x*$y;
    $rest = $mux%$k1 %$k2 %$k3 %$k4;
    imagesetpixel($image,$x,$y,$cl[$rest%5]);
   }
 }
imagestring($image,3,20,$max,"K1=$k1, K2=$k2, K3=$k3, K4=$k4",imagecolorallocate($image,255,0,0));
imagepng($image);

тот, что рисует ковры:

Немножко ковров

Исключительно классен ковер при Gaussian Blur приблизительно на 2.5 пикселя.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB