Skip to content

Latest commit

 

History

History
243 lines (188 loc) · 9.51 KB

File metadata and controls

243 lines (188 loc) · 9.51 KB

Генерация LaTeX файлов фракталов

Этот каталог содержит Python скрипты для автоматической генерации LaTeX документов с визуализацией фракталов с использованием TikZ.

📋 Содержание

Python генераторы

  1. gen_sierpinski.py - Треугольник Серпинского (L-система)
  2. gen_koch.py - Снежинка Коха (L-система)
  3. gen_pythagoras_tree.py - Дерево Пифагора (рекурсивная генерация квадратов)
  4. gen_mandelbrot.py - Множество Мандельброта (пиксельная визуализация)
  5. gen_julia.py - Множество Жюлиа (пиксельная визуализация)
  6. gen_landscape.py - Фрактальный ландшафт (алгоритм Midpoint Displacement)
  7. gen_lyapunov.py - Фрактал Ляпунова (показатель Ляпунова для логистического отображения)

Вспомогательные скрипты

  • generate_all_fractals.py - Запуск всех генераторов одной командой
  • compile_all.sh - Компиляция всех сгенерированных .tex файлов в PDF

🚀 Быстрый старт

Генерация всех LaTeX файлов

python3 generate_all_fractals.py

или запуск отдельных генераторов:

python3 gen_sierpinski.py
python3 gen_koch.py
python3 gen_pythagoras_tree.py
# и т.д.

Компиляция в PDF

# Компиляция всех файлов
./compile_all.sh

# Или компиляция отдельного файла
pdflatex sierpinski-triangle.tex

📦 Требования

Python

  • Python 3.6+
  • NumPy (для Mandelbrot, Julia, Landscape, Lyapunov)

Установка зависимостей:

pip3 install numpy

LaTeX

  • 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 файлы:

  1. sierpinski-triangle.tex - Треугольник Серпинского
  2. koch-snowflake.tex - Снежинка Коха
  3. pythagoras-tree-generated.tex - Дерево Пифагора
  4. mandelbrot-set.tex - Множество Мандельброта
  5. julia-set.tex - Множество Жюлиа
  6. fractal-landscape.tex - Фрактальный ландшафт
  7. lyapunov-fractal.tex - Фрактал Ляпунова

🎨 Описание фракталов

1. Треугольник Серпинского

  • Метод: L-система (Lindenmayer system)
  • Параметры: порядок рекурсии (по умолчанию 8)
  • Цветовая схема: оранжевый градиент
  • Время компиляции: < 10 секунд

2. Снежинка Коха

  • Метод: L-система с правилом F -> F-F++F-F
  • Параметры: порядок рекурсии (по умолчанию 4)
  • Цветовая схема: цветовое колесо (color wheel)
  • Время компиляции: < 10 секунд

3. Дерево Пифагора

  • Метод: Рекурсивное построение квадратов
  • Параметры: максимальная глубина (по умолчанию 10)
  • Цветовая схема: зелено-коричневый градиент
  • Время компиляции: < 30 секунд
  • Особенности: ~1000 квадратов для глубины 10

4. Множество Мандельброта

  • Метод: Итерация z(n+1) = z² + c
  • Параметры: разрешение (150x100), максимум итераций (80)
  • Цветовая схема: HSV градиент по количеству итераций
  • Время компиляции: 2-5 минут ⚠️
  • Особенности: ~15000 пикселей в TikZ

5. Множество Жюлиа

  • Метод: Итерация z(n+1) = z² + c (константный c)
  • Параметры: c = -0.7 + 0.27015i (Дендриты), разрешение (120x120)
  • Цветовая схема: HSV градиент
  • Время компиляции: 2-5 минут ⚠️
  • Особенности: ~14400 пикселей в TikZ

6. Фрактальный ландшафт

  • Метод: Midpoint Displacement алгоритм
  • Параметры: сетка 33x33, roughness 0.7
  • Цветовая схема: вода (синий) → песок (жёлтый) → трава (зелёный) → горы (коричневый) → снег (белый)
  • Время компиляции: 1-2 минуты
  • Особенности: изометрическая проекция

7. Фрактал Ляпунова

  • Метод: Вычисление показателя Ляпунова для логистического отображения
  • Параметры: последовательность "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"

📈 Оптимизация производительности

Для ускорения компиляции LaTeX файлов с пиксельной графикой:

  1. Уменьшите разрешение в генераторах:

    • Mandelbrot: width=100, height=75
    • Julia: width=80, height=80
    • Lyapunov: width=40, height=40
  2. Уменьшите количество итераций:

    • max_iter=50 вместо 80-100
  3. Для ландшафта уменьшите сетку:

    • grid_size=17 (вместо 33)
    • sample_step=1 (вместо 2)

🐛 Устранение проблем

LaTeX компиляция зависает

  • Уменьшите разрешение фрактала
  • Проверьте, что установлены все необходимые пакеты TikZ

Python ошибка "No module named 'numpy'"

pip3 install numpy

pdflatex не найден

  • macOS: brew install basictex
  • Linux: sudo apt-get install texlive-full

"Undefined control sequence" при компиляции

  • Установите недостающие LaTeX пакеты:
sudo tlmgr install pgf babel babel-russian

📄 Лицензия

Генерируемые LaTeX файлы могут свободно использоваться в учебных и научных целях.

🤝 Вклад

Для добавления новых фракталов:

  1. Создайте файл gen_<название>.py
  2. Реализуйте функцию генерации LaTeX кода
  3. Добавьте скрипт в список в generate_all_fractals.py

Создано: 2025-10-05 Автор: Автоматическая генерация для проекта comp_graph