22 July 2018

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

Abnormal programmingAlgorithmsMathematics
image

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

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


Алгоритм на языке C++

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

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

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

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



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


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

image

image

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

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


Для тестирования генератора узора я написал простую программу, которую можно скачать вместе с исходниками здесь. Для работы с изображениями используется библиотека OpenCV.
Tags:фракталыфрактальные ландшафтыпрограммированиепроцедурная генерацияпроцедурная генерация картбесконечностьпростые числаалгоритмы
Hubs: Abnormal programming Algorithms Mathematics
+48
22.1k 146
Comments 35