Вычисление фрактала Джули а на CPU

Опубликовано апреля 13, 2018 в Технология CUDA

Теперь рассмотрим код, который будет вычислять и визуализировать фрактал Джулиа. Поскольку эта программа сложнее предыдущих, то мы разобьем ее на части. А в конце главы приведем весь код целиком.

Главная функция на удивление проста. Она создает растровое изображение нужного размера, пользуясь библиотекой вспомогательных функций. Затем указатель на изображение передается функции kernel.

Вычислительное ядро просто обходит все точки, которые мы собираемся визуализировать, и для каждой вызывает функцию julia (), которая определяет, принадлежит ли эта точка фракталу Джулиа. Функция julia () возвращает 1, если точка принадлежит фракталу, и 0 в противном случае. Мы задаем для точки красный цвет, если julia () вернула 1, и черный — если 0. Цвета выбраны произвольно, можете задать такие, которые отвечают вашему эстетическому чувству.

В этой функции происходит вся основная работа. Сначала мы преобразуем координаты пиксела в координаты на комплексной плоскости. Чтобы расположить начало координат комплексной плоскости в центре изображения, мы производим сдвиг на DIM/2. Затем, чтобы изображение находилось в диапазоне от -1.0 до 1.0, мы масштабируем его с коэффициентом DIM/2. Таким образом, точка изображения с координатами (х, у) преобразуется в точку комплексной плоскости с координатами ( (DIM/2 — x)/(DIM/2), ((DIM/2 — у)/(DIM/2) ).

Далее, чтобы обеспечить возможность увеличения или уменьшения, мы вводим коэффициент масштабирования. В этой версии «зашито» значение 1.5, но, изменяя его, можно варьировать размер картинки. Если чувствуете в себе силы, можете задавать эту величину в командной строке.

Получив точку на комплексной плоскости, мы должны определить, принадлежит ли она фракталу Джулиа.

Услуги длинномера 20 тонн (12 метров) в Москве производится на основе предварительно составленного договора с бланком которого у вас есть возможность ознакомиться на нашем сайте!

В данном примере мы вычисляем 200 итераций формулы. После каждой итерации проверяется, не превзошла ли абсолютная величина результата пороговое значение (мы выбрали 1000). Если да, то мы считаем, что последовательность расходится, и возвращаем 0, означающий, что точка не принадлежит фракталу. С другой стороны, если после 200 итераций абсолютная величина не превысила 1000, то мы считаем, что точка принадлежит фракталу, и возвращаем значение 1.

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

Вычисление фрактала Джули а на CPU

Этот класс представляет комплексное число в виде вещественной части r и мнимой части i с одинарной точностью. В нем также определены операторы сложения и умножения комплексных чисел. (Если вы совсем незнакомы с комплексными числами, найдите какое-нибудь краткое введение в сети.) Наконец, мы определяем метод, возвращающий абсолютную величину комплексного числа.