Этот каталог содержит Python скрипты для автоматической генерации LaTeX документов с визуализацией фракталов с использованием TikZ.
- gen_sierpinski.py - Треугольник Серпинского (L-система)
- gen_koch.py - Снежинка Коха (L-система)
- gen_pythagoras_tree.py - Дерево Пифагора (рекурсивная генерация квадратов)
- gen_mandelbrot.py - Множество Мандельброта (пиксельная визуализация)
- gen_julia.py - Множество Жюлиа (пиксельная визуализация)
- gen_landscape.py - Фрактальный ландшафт (алгоритм Midpoint Displacement)
- gen_lyapunov.py - Фрактал Ляпунова (показатель Ляпунова для логистического отображения)
- generate_all_fractals.py - Запуск всех генераторов одной командой
- compile_all.sh - Компиляция всех сгенерированных .tex файлов в PDF
python3 generate_all_fractals.pyили запуск отдельных генераторов:
python3 gen_sierpinski.py
python3 gen_koch.py
python3 gen_pythagoras_tree.py
# и т.д.# Компиляция всех файлов
./compile_all.sh
# Или компиляция отдельного файла
pdflatex sierpinski-triangle.tex- Python 3.6+
- NumPy (для Mandelbrot, Julia, Landscape, Lyapunov)
Установка зависимостей:
pip3 install numpy- pdflatex
- TikZ библиотека
- Пакеты:
lindenmayersystems,shadings,babel[russian]
Установка LaTeX (macOS):
brew install basictex
sudo tlmgr update --self
sudo tlmgr install collection-fontsrecommended
sudo tlmgr install pgf tikz-cdПосле запуска генераторов будут созданы следующие .tex файлы:
- sierpinski-triangle.tex - Треугольник Серпинского
- koch-snowflake.tex - Снежинка Коха
- pythagoras-tree-generated.tex - Дерево Пифагора
- mandelbrot-set.tex - Множество Мандельброта
- julia-set.tex - Множество Жюлиа
- fractal-landscape.tex - Фрактальный ландшафт
- lyapunov-fractal.tex - Фрактал Ляпунова
- Метод: L-система (Lindenmayer system)
- Параметры: порядок рекурсии (по умолчанию 8)
- Цветовая схема: оранжевый градиент
- Время компиляции: < 10 секунд
- Метод: L-система с правилом F -> F-F++F-F
- Параметры: порядок рекурсии (по умолчанию 4)
- Цветовая схема: цветовое колесо (color wheel)
- Время компиляции: < 10 секунд
- Метод: Рекурсивное построение квадратов
- Параметры: максимальная глубина (по умолчанию 10)
- Цветовая схема: зелено-коричневый градиент
- Время компиляции: < 30 секунд
- Особенности: ~1000 квадратов для глубины 10
- Метод: Итерация z(n+1) = z² + c
- Параметры: разрешение (150x100), максимум итераций (80)
- Цветовая схема: HSV градиент по количеству итераций
- Время компиляции: 2-5 минут
⚠️ - Особенности: ~15000 пикселей в TikZ
- Метод: Итерация z(n+1) = z² + c (константный c)
- Параметры: c = -0.7 + 0.27015i (Дендриты), разрешение (120x120)
- Цветовая схема: HSV градиент
- Время компиляции: 2-5 минут
⚠️ - Особенности: ~14400 пикселей в TikZ
- Метод: Midpoint Displacement алгоритм
- Параметры: сетка 33x33, roughness 0.7
- Цветовая схема: вода (синий) → песок (жёлтый) → трава (зелёный) → горы (коричневый) → снег (белый)
- Время компиляции: 1-2 минуты
- Особенности: изометрическая проекция
- Метод: Вычисление показателя Ляпунова для логистического отображения
- Параметры: последовательность "AABAB", разрешение (60x60)
- Цветовая схема: синий (устойчивость) → красный (хаос)
- Время компиляции: 2-4 минуты
⚠️ - Особенности: сложные вычисления для каждого пикселя
Каждый генератор можно настроить, редактируя параметры в секции if __name__ == "__main__":
Sierpinski Triangle (gen_sierpinski.py):
latex_content = generate_sierpinski_latex(
order=8, # Порядок рекурсии (0-9)
step='2pt', # Размер шага
angle=60 # Угол поворота
)Mandelbrot Set (gen_mandelbrot.py):
latex_content = generate_mandelbrot_latex(
width=150, # Разрешение по X
height=100, # Разрешение по Y
max_iter=80 # Максимум итераций
)Julia Set (gen_julia.py):
c_param = complex(-0.7, 0.27015) # Параметр c
# Другие интересные значения:
# complex(-0.123, 0.745) - Кролик Дуади
# complex(-0.8, 0.156) - Дракон
# complex(0.285, 0.01) - СпиральPythagoras Tree (gen_pythagoras_tree.py):
latex_content = generate_pythagoras_tree_latex(
max_depth=10, # Глубина рекурсии
base_size=2.0 # Размер базового квадрата
)Fractal Landscape (gen_landscape.py):
latex_content = generate_landscape_latex(
grid_size=33, # Размер сетки (должен быть 2^n + 1)
roughness=0.7, # Шероховатость (0.1-1.5)
seed=12345, # Seed для генератора случайных чисел
sample_step=2 # Шаг сэмплирования для уменьшения полигонов
)Lyapunov Fractal (gen_lyapunov.py):
sequence = "AABAB" # Последовательность переключения r_A и r_B
# Другие интересные последовательности:
# "AB", "AABB", "AAAB", "BBBBBBAAAAAA"-
Уменьшите разрешение в генераторах:
- Mandelbrot: width=100, height=75
- Julia: width=80, height=80
- Lyapunov: width=40, height=40
-
Уменьшите количество итераций:
- max_iter=50 вместо 80-100
-
Для ландшафта уменьшите сетку:
- grid_size=17 (вместо 33)
- sample_step=1 (вместо 2)
- Уменьшите разрешение фрактала
- Проверьте, что установлены все необходимые пакеты TikZ
pip3 install numpy- macOS:
brew install basictex - Linux:
sudo apt-get install texlive-full
- Установите недостающие LaTeX пакеты:
sudo tlmgr install pgf babel babel-russianГенерируемые LaTeX файлы могут свободно использоваться в учебных и научных целях.
Для добавления новых фракталов:
- Создайте файл
gen_<название>.py - Реализуйте функцию генерации LaTeX кода
- Добавьте скрипт в список в
generate_all_fractals.py
Создано: 2025-10-05 Автор: Автоматическая генерация для проекта comp_graph