Фрактал Курликю

Реализация фрактала Curlicue

Фракталы всегда привлекали внимание программистов и математиков благодаря своим уникальным и бесконечно повторяющимся узорам. Один из таких фракталов — фрактал Курликю, известный своей изящной симметрией и сложностью. Если вы хотите научиться строить этот фрактал с помощью языка программирования D и библиотеки dlib, вы попали по адресу. В этой статье мы рассмотрим шаг за шагом, как создать фрактал Курликю, разбирая технические детали и предоставляя примеры кода.

Что такое фрактал Курликю?

Фрактал Курликю (Curlicue) — это последовательность точек, которые образуются при вращении вектора на определенный угол, определяемый непрерывной дробной частью чисел. Это приводит к созданию удивительно сложных и красивых узоров. Основная идея заключается в использовании непрерывной дробной части для изменения угла поворота, создавая узоры, напоминающие завитки или спирали.

Начало работы

Установка и настройка среды

Прежде чем приступить к кодированию, убедитесь, что у вас установлен компилятор D и библиотека dlib. Вы можете скачать компилятор D с официального сайта dlang.org.

Установку dlib можно выполнить с помощью менеджера пакетов DUB, который поставляется вместе с компилятором D. Создайте новый проект и добавьте dlib в зависимости:

dub init curlicue_fractal
cd curlicue_fractal
dub add dlib

Создание основного файла

Создайте основной файл source/app.d и откройте его в вашем любимом текстовом редакторе. Начнем с базовой структуры программы:

import dlib.graphics;
import std.math;

void main() {
    const int width = 800;
    const int height = 600;
    auto image = Image!(RGB)(width, height);
    image.fill(RGB(255, 255, 255));

    drawCurlicue(image);

    image.save("curlicue_fractal.png");
}

void drawCurlicue(Image!(RGB) image) {
    // Здесь будет реализация фрактала Курликю
}

Реализация фрактала Курликю

Теперь, когда у нас есть основная структура программы, давайте перейдем к реализации функции drawCurlicue.

Алгоритм построения

Фрактал Курликю строится путем последовательного вращения вектора на угол, определяемый дробной частью числа. Для нашего примера мы будем использовать дробную часть чисел последовательности Пи.

void drawCurlicue(Image!(RGB) image) {
    const int numPoints = 10000;
    double x = image.width / 2;
    double y = image.height / 2;
    double angle = 0;
    double length = 1;

    for (int i = 1; i <= numPoints; ++i) {
        angle += 2 * PI * fract(i * PI);
        x += length * cos(angle);
        y += length * sin(angle);

        if (x >= 0 && x < image.width && y >= 0 && y < image.height) {
            image.drawPixel(cast(int) x, cast(int) y, RGB(0, 0, 0));
        }
    }
}

double fract(double value) {
    return value - floor(value);
}

Пояснение кода

  1. Инициализация координат и угла: Начальные координаты x и y устанавливаются в центр изображения. Переменная angle определяет текущий угол поворота, а length — длину шага.
  2. Основной цикл: В цикле for вычисляется новый угол, используя дробную часть числа Пи, и обновляются координаты точки.
  3. Проверка границ: Если точка находится внутри изображения, она рисуется черным цветом.

Оптимизация и улучшения

Настройка параметров

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

Цветовая схема

Вы можете добавить цвета к вашему фракталу, изменяя цвет точки в зависимости от её позиции или шага. Вот пример:

RGB getColor(int step) {
    int r = (step * 2) % 256;
    int g = (step * 5) % 256;
    int b = (step * 7) % 256;
    return RGB(r, g, b);
}

void drawCurlicue(Image!(RGB) image) {
    const int numPoints = 10000;
    double x = image.width / 2;
    double y = image.height / 2;
    double angle = 0;
    double length = 1;

    for (int i = 1; i <= numPoints; ++i) {
        angle += 2 * PI * fract(i * PI);
        x += length * cos(angle);
        y += length * sin(angle);

        if (x >= 0 && x < image.width && y >= 0 && y < image.height) {
            image.drawPixel(cast(int) x, cast(int) y, getColor(i));
        }
    }
}

Интерфейс пользователя

Добавление интерфейса пользователя позволит вам изменять параметры фрактала в реальном времени. Вы можете использовать библиотеку dlib для создания GUI элементов, таких как кнопки и слайдеры.


Построение фрактала Курликю с использованием языка программирования D и библиотеки dlib — это увлекательное занятие, которое позволяет углубиться в мир математических узоров и графики. Этот процесс включает в себя множество аспектов: от работы с алгоритмами и математикой до создания красивых и визуально впечатляющих изображений.

Надеемся, что этот пример вдохновил вас на создание собственных фракталов и эксперименты с различными параметрами и цветами. Не забывайте делиться своими работами и идеями с сообществом!

Ресурсы для чтения

Помните, что путь к мастерству лежит через практику. Удачи в ваших фрактальных приключениях!


Карпов Ярослав

Автор статьи:

Обновлено:

23.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *