Бесконечный узор на основе простых чисел

image

Привет, Хабр! Однажды утром мне пришла в голову идея находить »исключающее ИЛИ» между координатами точки пространства и проверять полученное число на простоту. Результат такого простого алгоритма вы можете видеть на картинке. Подробнее под катом.

Алгоритм генерации узора


Алгоритм на языке C++
long long temp = x ^ y; // x и y координаты точки
// Далее идет проверка temp на простоту одним из алгоритмов.
// Например алгоритм Бэйли-Померанс-Селфридж-Вагстафф (BPSW) проверки n на простоту
if(isprime(temp) == true) { 
// рисуем закрашенную точку
} else {
// оставляем точку пустой
}


Такой алгоритм дает следующие бесконечные узоры:

Картинки с узорами


Можно также посмотреть видео с узорами:



Другие варианты узоров


Если заменить операцию XOR (исключающее ИЛИ) на операцию ИЛИ или И, можно получить фрактальные треугольники:
image

image

Также можно вместо проверки на простое число использовать любые другие проверки, например деление без остатка на какое-либо число. Но такие варианты дают менее разнообразные узоры.

Программа и исходники


Для тестирования генератора узора я написал простую программу, которую можно скачать вместе с исходниками здесь. Для работы с изображениями используется библиотека OpenCV.

© Habrahabr.ru