?

Log in

No account? Create an account

Фракталы

«Если долго всматриваться в бездну — бездна начнёт всматриваться в тебя» © Ницше

Previous Entry Share Next Entry
Эволюция фрактальных монстров
xcontcom
Переписал статью и отправил на хабру :)

Сегодня будем рисовать геометрические фракталы, которым уделяют незаслуженно мало внимания. А между тем, тут каждый фрактал — маленький шедевр, поражающий воображение!

Геометрические фракталы



Кроме того, полностью переписал весь код. Серверная часть была на PHP. Переписал на JavaScript и перенес в браузер пользователя.

Изменил интерфейс:

Interfece

Добавил несколько нереально крутых опций. Теперь можно посмотреть Parents Tree:

Parents tree
Если правый предок отсутствует в дереве - значит особь перешла в новую популяцию без скрещиваний.

Доступна опция "Draw Mode", которая изменяет способ отрисовки фракталов

[draw mode]
switch(drawmode){
case 1:
position=recurs(context, arr, position, n-1, x0, y0, xx, yy, line);
position=recurs(context, arr, position, n-1, x1, y1, xx, yy, line);
break;
case 2:
position=recurs(context, arr, position, n-1, xx, yy, x0, y0, line);
position=recurs(context, arr, position, n-1, xx, yy, x1, y1, line);
break;
case 3:
position=recurs(context, arr, position, n-1, xx, yy, x0, y0, line);
position=recurs(context, arr, position, n-1, x1, y1, xx, yy, line);
break;
default:
position=recurs(context, arr, position, n-1, x0, y0, xx, yy, line);
position=recurs(context, arr, position, n-1, xx, yy, x1, y1, line);
}


Всего-то меняем координаты местами в первом и/или втором вызове рекурсивной функции, но фракталы меняются до неузнаваемости. Несколько "маленьких шедевров" нарисованный в draw mode 3 и draw mode 2:

Фрактал 1Фрактал 2Фрактал 3Фрактал 4Фрактал 5Фрактал 6Фрактал 7Фрактал 8Фрактал 9Фрактал 10Фрактал 11Фрактал 12Фрактал 13Фрактал 14Фрактал 15

Вот здесь можно поиграться с эволюцией: http://fractal.xcont.com/
На хабре полное описание: https://habrahabr.ru/post/328568/
Исходники можно посмотреть или напрямую в браузере или на GitHub: https://github.com/xcont/fractals




Recent Posts from This Journal


  • 1
Каждый фрактал рисуется с помощью набора углов (45°, -60°, 15° и т.д.)

В качестве примера, Дракон Хартера-Хейтуэя (Был придуман тремя умными физиками из NASA). Рисуется с помощью углов 45° и -45°. Вот тут наглядно:

Дракон Хартера-Хейтуэя

В верхней части картинки этот фрактал на 17-й итерации, внизу первые 5 итераций.

Или вот другой фрактал (без имени):

Фрактал без имени

Тут используются углы [45°,-45°,-45°,45°]

Набор углов (генов) запишем в массив (генотип). В популяции находится фиксированное число особей (фракталов) с генотипами сгенерированными случайным образом. Пользователь, поочередно сравнивая два фрактала, выбирает тот, который ему больше нравится, тем самым повышая приспособленность выбранного фрактала. Те фракталы, которые пользователь выбирает чаще, "выживают" и скрещиваются. Оставшиеся фракталы "вымирают". Скрещивание происходит так: берем двух предков, комбинируем их гены (опять же случайным образом) и заполняем ими генотипы двух потомков. Проделываем эту операцию для всех приспособленных фракталов. Предками и потомками заполняем новую популяцию. Некоторый процент особей (фракталов) в новой популяции мутирует - берем случайный ген из генотипа и заменяем его на случайное значение. Тем самым добавляем разнообразия в генофонд фракталов.

Все так же, как и в биологическом эволюционном процессе, только у живых организмов генов в разы побольше :)

А что? Жизненно!

  • 1