Интерактивное приложение для визуализации и исследования фракталов с использованием OpenGL (JOGL).
- Формула:
z(n+1) = z(n)² + c - Итерации: до 1000
- Зум: до 1e-15
- Интересные точки:
- Главное множество: (-0.5, 0.0)
- Хвост морского конька: (-0.75, 0.1)
- Долина двойной спирали: (-0.16, 1.0405)
- Формула:
z(n+1) = z(n)² + c(константный c) - Предустановки:
- Дендриты: c = -0.7 + 0.27015i
- Кролик Дуади: c = -0.123 + 0.745i
- Дракон: c = -0.8 + 0.156i
- Спираль: c = 0.285 + 0.01i
- Рекурсивная структура из квадратов
- Глубина: до 12 уровней
- Анимация угла ветвления (30-60°)
- VBO оптимизация для производительности
- Кривая Коха на треугольнике
- Рекурсия: 0-7 уровней
- VBO для линий
- Элегантная геометрия
- Рекурсивное вычитание центрального треугольника
- Глубина рекурсии: 0-8 уровней
- Самоподобная структура
- Оранжевая цветовая схема
- Алгоритм Midpoint Displacement
- Сетка 129x129 точек
- Изометрическая проекция
- Цветовая схема по высоте (вода→песок→трава→горы→снег)
- Параметр шероховатости (roughness): 0.1-1.5
- Показатель Ляпунова для логистического отображения
- Последовательность переключения параметров (AB, AABB, AAAB и т.д.)
- Формула: x(n+1) = r * x(n) * (1 - x(n))
- Цветовая схема: синий (устойчивость) → красный (хаос)
- 5 интересных предустановок последовательностей
- Колесико: Зум in/out (1.2x)
- Левая кнопка + движение: Панорамирование (drag)
- Двойной клик: Центрирование на точке
- R: Сброс к начальным параметрам
- +/-: Увеличить/уменьшить итерации (±32)
- Space: Анимация (для Дерева Пифагора)
- ESC: Выход из приложения
- Fractal Selector: Переключение между фракталами
- Reset: Сброс параметров
- Iter+/Iter-: Настройка качества
- FPS Counter: Отображение производительности
- Info: Текущие параметры фрактала
fractals/
├── core/
│ └── Fractal.java # Базовый абстрактный класс
├── renderers/
│ ├── MandelbrotSet.java # Множество Мандельброта
│ ├── JuliaSet.java # Множество Жюлиа
│ ├── PythagorasTree.java # Дерево Пифагора
│ ├── KochSnowflake.java # Снежинка Коха
│ ├── SierpinskiTriangle.java # Треугольник Серпинского
│ ├── FractalLandscape.java # Фрактальный ландшафт
│ └── LyapunovFractal.java # Фрактал Ляпунова
└── FractalExplorer.java # Главное приложение
- Адаптивная детализация: Автоматическое уменьшение шага рендеринга при зуме
- Early escape: Проверка убегания точек для ускорения вычислений
- VBO: Vertex Buffer Objects для геометрических фракталов
- MSAA 4x: Сглаживание для улучшения качества
- Модульная архитектура: каждый фрактал - отдельный класс
- Единый интерфейс через абстрактный класс
Fractal - Легкое добавление новых фракталов
- Централизованное управление параметрами
- Java 8+
- JOGL 2.3+
- OpenGL 2.0+
# Через Maven
mvn clean compile exec:java -Dexec.mainClass="fractals.FractalExplorer"
# Напрямую через Java
javac -cp ".:jogl-all.jar:gluegen-rt.jar" fractals/**/*.java
java -cp ".:jogl-all.jar:gluegen-rt.jar" fractals.FractalExplorer- Градиент HSV по итерациям
- Черный цвет для точек множества
- Плавные переходы для эстетики
- Зелено-коричневая палитра (натуральное дерево)
- Градиент по глубине рекурсии
- Голубые оттенки (лед/снег)
- Четкие линии
- Оранжевый цвет
- Единая заливка для всех треугольников
- Градиент по высоте:
- < 0.3: Синий (вода)
- 0.3-0.5: Жёлтый (песок/берег)
- 0.5-0.7: Зелёный (трава)
- 0.7-0.85: Коричневый (горы)
-
0.85: Белый (снег)
- Чёрные контуры полигонов
- Синий градиент: отрицательный показатель (устойчивость)
- Красно-жёлтый градиент: положительный показатель (хаос)
- Чёрный: неустойчивые орбиты
- Мандельброт (1920x1080, 256 iter): 60 FPS
- Жюлиа (1920x1080, 256 iter): 60 FPS
- Дерево Пифагора (глубина 12): 60 FPS
- Снежинка Коха (уровень 6): 60 FPS
- Треугольник Серпинского (глубина 8): 60 FPS
- Фрактальный ландшафт (129x129): 60 FPS
- Фрактал Ляпунова (200 iter): 45-55 FPS (более вычислительно затратный)
- Фрактал Серпинского (Треугольник) ✅
- Фрактальные ландшафты (Midpoint Displacement) ✅
- Фрактал Ляпунова ✅
- Ковёр Серпинского
- Шейдеры GLSL для GPU ускорения
- Сохранение скриншотов высокого разрешения
- Экспорт видео анимаций
- Preset галерея интересных мест
- Полноэкранный режим
MandelbrotSet mandelbrot = new MandelbrotSet();
mandelbrot.setIterations(512); // Высокая детализация
mandelbrot.setZoom(1000.0); // Глубокий зум
mandelbrot.setOffset(-0.75, 0.1); // Морской конек
mandelbrot.gotoInterestingPoint(1); // Или через presetPythagorasTree tree = new PythagorasTree();
tree.setMaxDepth(12);
tree.setAngle(45);
tree.toggleAnimation(); // Запуск анимацииFractalLandscape landscape = new FractalLandscape();
landscape.setRoughness(0.7f); // Шероховатость
landscape.setSeed(System.currentTimeMillis()); // Случайное зерно
landscape.regenerate(); // Пересоздать ландшафтLyapunovFractal lyapunov = new LyapunovFractal();
lyapunov.setSequence("AABAB"); // Последовательность переключения
lyapunov.loadPreset(3); // Или загрузить предустановку
lyapunov.setIterations(200); // Точность вычислений- При очень глубоком зуме (>1e-14) может проявляться потеря точности
double - На старых GPU без MSAA могут быть "зазубрины"
Для каждого пикселя (x, y):
c = complex(x, y)
z = 0
for i in range(max_iterations):
z = z² + c
if |z| > 2:
return i // Точка убегает
return max_iterations // Точка в множестве
Рекурсия:
1. Нарисовать квадрат
2. На двух верхних вершинах построить
два меньших квадрата под углами ±α
3. Повторить для новых квадратов
Разработано как демонстрация возможностей OpenGL в Java для образовательных целей.
MIT License - свободное использование в учебных проектах.