Красота фракталов - написание простой программы визуализации фракталов на языке C#
- Общее программирование в C#
- MDI-приложения, выполненные в .NET
- Использование классов интерфейса в C#
- Использование указателей на функции (delegate)
- Асинхронные вычисления
- Использование нескольких ядер процессора
- Произведение многопоточных математических вычислений
- Билинейная фильтрация растровых изображений
- Сложные численные классы в C#
- Математические основы фракталов Mandelbrot, Julia и Newton
- и многое другое ...
Основы
Фракталы привлекают многих с детства. Многие могут вспомнить движки рисования фракталов Mandelbrot на commodore 64. Многие могут оказаться под впечатлением таких простых алгоритмов, как:
Точная обработка (визуализация) означает то, что число итераций представлено не типом int , а в виде double, и цвет, используемый для отображения результата интерполируется между предыдущим и следующим цветом в цветовой палитре. Использование точной обработки не требует большей производительности от процессора, но значительно улучшает результат.
Код
Мы не будем представлять вам блоки кода в данной статье - просто откройте предлагаемые в начале статьи файлы и изучите его. Код простой и понятный, все должно быть ясно. Для новичков данный код окажется хорошим уроком - в файлах вы найдете множество вещей, которые иногда сложно найти в других источниках.
Есть один класс-интерфейс IFractal , от которого будет унаследован базовый класс фрактала. Из данного базового фрактала будут затем получены фракталы Mandelbrot, Julia и Newton.
У вас также есть MDI-контейнер и общий дочерний MDI , который может обрабатывать отображение, перетаскивание и увеличение фракталов. Вы можете перетащить прямоугольник с зажатой левой кнопкой мыши для увеличения фрактала. Вы можете передвигать его зажав правую кнопку мыши и передвигая курсор. Вы также можете изменить контрольную точку, используемую в случае с фракталом типа Julia , при помощи передвижения мыши с зажатой средней кнопкой.
Фракталы могут быть сохранены и загружены из XML-файлов. Обработанные фракталы могут быть сохранены в PNG-файлах.
Движок обрабатывает фракталы на достаточной скорости. Он определяет число доступных ядер процессора и создает один поток обработки для каждого из ядер. Время, необходимое на обработку фракталов, практически уменьшается вдвое при переходе от одноядерного процессора к двухъядерному. При использовании компьютера с двухъядерным процессором обработка фрактала Mandelbrot размером в 2000x2000 пикселей и при установке в 256 итераций на пиксель, занимает примерно 650 мс, что является допустимой скоростью.
Предлагаемая программа далека от завершения, но она уже в состоянии вырисовывать красивые обработки фракталов. Также она показывает, как просто можно выполнить это в C#. Если это выполнить на языке C++, это займет гораздо больше времени.
Идеи о следующих шагах
Есть различные способы улучшения данной программы (я надеюсь вам они покажутся интересными и вы попытаетесь их реализовать):
- Экранная заставка, вырабатывающая различные фракталы.
- Обработчик видео-фракталов.
- Обработка динамических размеров палитры вплоть до неограниченного числа цветов. На данный момент, палитра зафиксирована на 256 цветах, хотя форма палитры может отображать различное число цветов.