Skip to content

Latest commit

 

History

History
406 lines (310 loc) · 12.6 KB

File metadata and controls

406 lines (310 loc) · 12.6 KB

Проект: Генераторы LaTeX-фракталов для TikZ

📦 Краткое описание

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

Ключевые особенности:

  • ✅ Чистый Python 3 (без внешних зависимостей)
  • ✅ Генерация готовых LaTeX документов
  • ✅ Поддержка русского языка
  • ✅ 7 различных типов фракталов
  • ✅ Полностью автоматизированная генерация

📂 Структура проекта

Python генераторы (7 файлов)

Файл Размер Фрактал Метод
gen_sierpinski.py 2.4K Треугольник Серпинского L-система
gen_koch.py 2.2K Снежинка Коха L-система
gen_pythagoras_tree.py 3.6K Дерево Пифагора Рекурсия
gen_mandelbrot.py 4.5K Множество Мандельброта Итерация
gen_julia.py 4.6K Множество Жюлиа Итерация
gen_landscape.py 7.0K Фрактальный ландшафт Midpoint Displacement
gen_lyapunov.py 5.2K Фрактал Ляпунова Показатель Ляпунова

Вспомогательные скрипты (2 файла)

Файл Размер Назначение
generate_all_fractals.py 3.3K Запуск всех генераторов
compile_all.sh 3.0K Компиляция всех LaTeX файлов

Документация (2 файла)

Файл Размер Содержание
README_FRACTALS.md 9.5K Руководство пользователя
TESTING_RESULTS.md 14K Результаты тестирования

Сгенерированные LaTeX файлы (7 файлов)

Файл Размер Статус
sierpinski-triangle.tex 1.0K ✅ Генерируется
koch-snowflake.tex 935B ✅ Генерируется
pythagoras-tree-generated.tex 342K ✅ Генерируется
mandelbrot-set.tex 923K ✅ Генерируется
julia-set.tex 904K ✅ Генерируется
fractal-landscape.tex 38K ✅ Генерируется
lyapunov-fractal.tex 235K ✅ Генерируется

Итого: 20 файлов, ~2.5 MB


🎨 Галерея фракталов

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

Метод:     L-система
Рекурсия:  8 уровней
Цвет:      Оранжевый градиент
Размер:    1.0 KB
Время:     < 0.1 сек

L-система правила:

  • F -> G-F-G
  • G -> F+G+F

Аксиома: F, угол: 60°


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

Метод:     L-система
Рекурсия:  4 уровня
Цвет:      Цветовое колесо
Размер:    935 B
Время:     < 0.1 сек

L-система правила:

  • F -> F-F++F-F

Аксиома: F++F++F (три кривых = снежинка)


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

Метод:     Рекурсивные квадраты
Рекурсия:  10 уровней
Цвет:      Зелено-коричневый градиент
Размер:    342 KB (~1000 квадратов)
Время:     < 0.2 сек

Алгоритм:

  • Каждый квадрат порождает 2 дочерних
  • Угол ветвления: 30° (π/6)
  • Масштаб: cos(30°) ≈ 0.866

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

Метод:     z(n+1) = z² + c, z₀ = 0
Разрешение: 150×100 пикселей
Итерации:  80
Цвет:      HSV по количеству итераций
Размер:    923 KB (~15000 пикселей)
Время:     ~3-5 сек (генерация)

Область: Re ∈ [-2.0, 0.5], Im ∈ [-1.25, 1.25]

Условие убегания: |z| > 2


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

Метод:     z(n+1) = z² + c (константа c)
Параметр:  c = -0.7 + 0.27015i (Дендриты)
Разрешение: 120×120 пикселей
Итерации:  80
Цвет:      HSV градиент
Размер:    904 KB (~14400 пикселей)
Время:     ~2-3 сек

Другие интересные значения c:

  • -0.123 + 0.745i — Кролик Дуади
  • -0.8 + 0.156i — Дракон
  • 0.285 + 0.01i — Спираль

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

Метод:     Midpoint Displacement
Сетка:     33×33 точек (2⁵ + 1)
Roughness: 0.7
Seed:      12345
Проекция:  Изометрическая
Размер:    38 KB (~256 полигонов)
Время:     ~0.5 сек

Цветовая схема (по высоте):

Высота Цвет Рельеф
< 0.3 Синий Вода
0.3-0.5 Жёлтый Песок
0.5-0.7 Зелёный Трава
0.7-0.85 Коричневый Горы
> 0.85 Белый Снег

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

Метод:     Логистическое отображение
Формула:   x(n+1) = r·x(n)·(1-x(n))
Последовательность: AABAB
Разрешение: 60×60 пикселей
Итерации:  50 warmup + 50 compute
Размер:    235 KB (~3600 пикселей)
Время:     ~5-10 сек

Показатель Ляпунова: λ = lim(n→∞) (1/n) Σ ln|f'(x_i)|

Цветовая интерпретация:

  • Синий: λ < 0 (устойчивость)
  • Красный: λ > 0 (хаос)
  • Черный: неустойчивые орбиты

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

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

cd /Users/x/comp_graph/TikZ
python3 generate_all_fractals.py

Результат: 7 файлов .tex

2. Генерация отдельного фрактала

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

3. Компиляция LaTeX → PDF

Требования:

  • pdflatex
  • TikZ библиотека
  • lindenmayersystems, shadings, babel, xcolor

Установка LaTeX (macOS):

brew install basictex
sudo tlmgr update --self
sudo tlmgr install pgf tikz-cd babel babel-russian

Компиляция:

# Все файлы
./compile_all.sh

# Отдельный файл
pdflatex sierpinski-triangle.tex

📊 Сравнительная таблица

Фрактал Генерация .tex размер PDF (оценка) Компиляция
Sierpinski 0.1 сек 1 KB ~20 KB 5-10 сек
Koch 0.1 сек 1 KB ~25 KB 5-10 сек
Pythagoras 0.2 сек 342 KB ~150 KB 30-60 сек
Mandelbrot 3-5 сек 923 KB ~500 KB 2-5 мин
Julia 2-3 сек 904 KB ~480 KB 2-5 мин
Landscape 0.5 сек 38 KB ~80 KB 15-30 сек
Lyapunov 5-10 сек 235 KB ~250 KB 2-4 мин

Общее время:

  • Генерация всех .tex: ~15-20 сек
  • Компиляция всех PDF: ~10-15 мин

🔧 Технические детали

Зависимости Python

  • ✅ Python 3.6+
  • ✅ Стандартная библиотека (math, random)
  • ❌ Без numpy, matplotlib, PIL

Используемые алгоритмы

  1. L-системы (Lindenmayer systems)

    • Треугольник Серпинского
    • Снежинка Коха
  2. Рекурсивная генерация

    • Дерево Пифагора
  3. Итеративные алгоритмы

    • Множество Мандельброта (escape time)
    • Множество Жюлиа (escape time)
  4. Стохастические алгоритмы

    • Фрактальный ландшафт (Diamond-Square)
  5. Динамические системы

    • Фрактал Ляпунова (логистическое отображение)

Оптимизации

Для ускорения компиляции:

  1. Уменьшите разрешение пиксельных фракталов
  2. Уменьшите количество итераций
  3. Для ландшафта: уменьшите grid_size

Пример:

# gen_mandelbrot.py - быстрая версия
latex_content = generate_mandelbrot_latex(
    width=100,      # вместо 150
    height=75,      # вместо 100
    max_iter=50     # вместо 80
)

📝 Примеры использования

Изменение параметров

Sierpinski - больше рекурсии:

# В gen_sierpinski.py
latex_content = generate_sierpinski_latex(order=10, step='1pt', angle=60)

Koch - другой размер:

# В gen_koch.py
latex_content = generate_koch_latex(order=5, step='3pt', angle=60)

Julia - другой параметр c:

# В gen_julia.py
c_param = complex(-0.8, 0.156)  # Дракон

Landscape - более гладкий:

# В gen_landscape.py
latex_content = generate_landscape_latex(
    grid_size=65,       # больше точек
    roughness=0.5,      # меньше шероховатость
    seed=54321,         # другой seed
    sample_step=1       # меньше шаг (больше полигонов)
)

Lyapunov - другая последовательность:

# В gen_lyapunov.py
sequence = "BBBBBBAAAAAA"  # Интересная последовательность

📚 Дополнительная документация

  • README_FRACTALS.md — Полное руководство пользователя
  • TESTING_RESULTS.md — Детальные результаты тестирования
  • PROJECT_SUMMARY.md — Этот файл (краткая сводка)

✅ Статус проекта

Компонент Статус
Python генераторы ✅ 7/7 работают
LaTeX файлы ✅ 7/7 генерируются
Документация ✅ Готова
Тестирование ✅ Пройдено
Компиляция PDF ⚠️ Требует pdflatex

Общий статус: ✅ Проект готов к использованию


🎯 Применение

  • Образование: Визуализация фрактальных структур для курсов математики и информатики
  • Научные публикации: Иллюстрации для статей о фракталах, хаосе, динамических системах
  • Документация: Примеры для LaTeX/TikZ руководств
  • Искусство: Генеративное искусство и математическая графика

🤝 Расширение проекта

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

  1. Создайте файл gen_<название>.py
  2. Реализуйте функции:
    • <название>_algorithm() — алгоритм вычисления
    • generate_<название>_tikz() — генерация TikZ кода
    • generate_<название>_latex() — полный LaTeX документ
  3. Добавьте в generate_all_fractals.py:
    generators = [
        # ...
        ("gen_<название>.py", "Описание"),
    ]

📊 Статистика кода

Всего Python кода:   ~1200 строк
Среднее на генератор: ~170 строк
Документация:        ~800 строк
Комментарии:         ~30%

Языки:

  • Python: 100% (генераторы)
  • LaTeX/TikZ: 100% (выходные файлы)
  • Bash: compile_all.sh
  • Markdown: документация

Автор: Автоматическая генерация для проекта comp_graph Дата создания: 2025-10-05 Версия: 1.0 Лицензия: MIT (для образовательных целей)