Fun with FractalsBeta

Запись функций

Запись функций для фракталов мало отличается от математических формул или записей, используемых в различных языках программирования. Например, квадратичную функцию, которую часто используют для иллюстрации множества Жюлиа, можно записать как z*z + c или z^2 + c. В записи функций могут присутствовать следующие элементы:

Числа

Вещественные числа записываются как обычно; для разделения целой и дробной части числа используется точка: 4, 0.55, -2.3. Комплексные числа записываются в формате <вещественная часть>(i|j)<мнимая часть>. Мнимая единица в такой записи будет выглядеть как 0i1 или 0j1, а сопряженное ей комплексное число — как 0i-1 или 0j-1. В большинстве случаев комплексные числа удобнее использовать не непосредственно, а в виде параметров.

Параметры

Параметры позволяют влиять на функцию, не редактируя ее код. Например, для квадратичной функции z*z + c c — параметр, отвечающий за смещение при каждой итерации. При его изменении внешний вид фрактала будет плавно меняться:

c = 0.2+0.4i
c = 0.3+0.4i
c = 0.4+0.4i
c = 0.5+0.4i
c = 0.2+0.5i
c = 0.3+0.5i
c = 0.4+0.5i
c = 0.5+0.5i
c = 0.2+0.6i
c = 0.3+0.6i
c = 0.4+0.6i
c = 0.5+0.6i

Названия параметров могут быть большими или малыми латинскими буквами, например, c, k, A, Z. Регистр букв учитывается, то есть C и c — различные параметры.

Бинарные операции

+, -, *, /
Сложение, вычитание, умножение и деление соответственно.
^
Возведение в вещественную степень: zn = |z|nein arg(z), где |z| — модуль комплексного числа, arg(z) — его аргумент.
Пример: (1.0+2.0i)^2 = -3.0+4.0i.

Функции общего назначения

re
Вещественная часть комплексного числа.
Пример: re(1.0+2.0i) = 1.0.
im
Мнимая часть комплексного числа.
Пример: im(1.0+2.0i) = 2.0.
arg
Аргумент комплексного числа в радианах: arg(x + iy) = atan2(y, x).
Пример: arg(1.0+2.0i) = 1.1071.
mod
Модуль комплексного числа: mod(x + iy) = sqrt(x2 + y2).
Пример: mod(1.0+2.0i) = 2.2361.
exp
Экспонента комплексного числа: exp(x + iy) = ex(cos y + i*sin y).
Пример: exp(1.0+2.0i) = -1.1312+2.4717i.
ln, log
Натуральный логарифм: ln(r*e) = ln(r) + iφ.
Пример: ln(1.0+2.0i) = 0.8047+1.1071i.

Тригонометрические функции

sinh, sh
Гиперболический синус: sinh(z) = (ez - e-z)/2.
Пример: sinh(1.0+2.0i) = -0.4891+1.4031i.
cosh, ch
Гиперболический косинус: cosh(z) = (ez + e-z)/2.
Пример: cosh(1.0+2.0i) = -0.6421+1.0686i.
tanh, th
Гиперболический тангенс: tanh(z) = sinh(z)/cosh(z).
Пример: tanh(1.0+2.0i) = 1.1667-0.2435i.

Обратные тригонометрические функции

asinh
Гиперболический арксинус — функция, обратная к sinh.
Пример: asinh(1.0+2.0i) = 1.4694+1.0634i.
acosh
Гиперболический арккосинус — функция, обратная к cosh.
Пример: acosh(1.0+2.0i) = 1.5286+1.1437i.
atanh
Гиперболический арктангенс — функция, обратная к tanh.
Пример: atanh(1.0+2.0i) = 0.1733+1.1781i.

Примечание. Строго говоря, логарифм и обратные тригономертические функции являются многозначными, а в вычислениях используется их главная ветвь.

Приоритет операций

Приоритеты арифметических операций соответствуют здравому смыслу (т.е. возведение в степень выполняется до умножения и деления, а они, в свою очередь — до сложения и вычитания). Арифметические операции с одинаковым приоритетом вычисляются слева направо (например, 1/2/2 = 0.25). Унарные функции обладают высшим приоритетом: sinh z^2 эквивалентно (sinh z)^2, а не sinh(z^2). Для изменения порядка вычисления можно использовать скобки — круглые (), квадратные [] или фигурные {}.