Содержание
Технический референс для реализации астрологического движка. Все формулы даны в виде, пригодном для прямого кодирования. Углы — в градусах, если не указано иное.
1. ОПРЕДЕЛЕНИЕ АСПЕКТА И БАЗОВАЯ МАТЕМАТИКА
1.1. Что такое аспект
Аспект (aspect, аспект) — угловое расстояние между двумя точками, измеренное по эклиптике (ecliptic longitude, эклиптическая долгота λ), которое соответствует одному из выделенных «гармонических» углов.
Ключевые уточнения:
- Аспект по умолчанию считается по долготе, то есть это проекция на плоскость эклиптики. Реальное угловое расстояние в пространстве (с учётом широты β) обычно игнорируется. Это называется аспект в долготе (aspect in longitude).
- Существует альтернатива — истинное угловое расстояние (true/mundane angular separation) с учётом широты, см. §1.8.
- Аспекты по склонению (параллели) — отдельный класс, см. §8.
1.2. Угловое расстояние с учётом «заворота» (wraparound)
Долготы живут на окружности, поэтому простая разность неверна. Каноническая формула:
Δ_signed = (λ₂ − λ₁) mod 360 // 0 ≤ Δ_signed < 360
Нормализация в диапазон 0…180 (ненаправленное расстояние):
separation(λ₁, λ₂):
d = (λ₂ − λ₁) mod 360
if d > 180:
d = 360 − d
return d // 0 ≤ d ≤ 180
Нормализация в диапазон −180…+180 (направленное, со знаком):
signed_diff(λ₁, λ₂):
d = (λ₂ − λ₁ + 180) mod 360 − 180
return d // −180 < d ≤ 180
Замечание об операции mod в разных языках: в C/C++/Java/JavaScript оператор % возвращает отрицательный результат для отрицательного делимого. Обязательна «математическая» функция:
norm360(x):
r = fmod(x, 360.0)
if r < 0: r += 360.0
return r
В Python % уже возвращает неотрицательный результат — дополнительная обёртка не нужна.
1.3. Проверка наличия аспекта
Пусть A — идеальный угол аспекта (exact aspect angle), orb_max — допустимый орбис.
d = separation(λ₁, λ₂)
delta = |d − A| // отклонение от точности (orb, орб)
is_aspect = (delta ≤ orb_max)
delta называется фактическим орбисом (actual orb, «орб аспекта»), orb_max — допустимым орбисом (allowed orb, орбис). В русскоязычной традиции оба часто называются «орбис», что порождает путаницу; в коде стоит разделять orb_actual и orb_limit.
1.4. Орбис (orb, орбис)
Орбис — допустимое отклонение от точного угла, при котором аспект считается действующим.
Две принципиально разные парадигмы:
- Современная (modern): орбис приписывается аспекту (соединение 8°, тригон 7° и т.д.), иногда с поправкой на светила. См. §3.2–3.4.
- Традиционная (traditional): орбиса аспекта не существует вовсе. Орбис приписывается планете — это её «сфера лучей» (orb of light, orbis). Для двух планет действует мойети (moiety, половина орбиса):
orb_limit(P₁, P₂) = (orb(P₁) + orb(P₂)) / 2
= moiety(P₁) + moiety(P₂)
где moiety(P) = orb(P)/2. См. §3.1.
1.5. Аппликация и сепарация (applying / separating)
Аппликация (applying, аспект в аппликации) — планеты сближаются к точному аспекту; аспект «строится», его действие нарастает, событие впереди. Сепарация (separating, аспект в сепарации) — планеты расходятся от точного аспекта; действие убывает, событие в прошлом.
Метод 1 — через производную расстояния (наиболее надёжный)
Пусть v₁, v₂ — суточные движения (daily motion, °/сутки) планет, со знаком: ретроградность = отрицательная скорость.
applying_or_separating(λ₁, v₁, λ₂, v₂, A):
d0 = separation(λ₁, λ₂)
delta0 = |d0 − A|
// положение через малый шаг времени h (например, h = 0.01 суток)
d1 = separation(λ₁ + v₁*h, λ₂ + v₂*h)
delta1 = |d1 − A|
if delta1 < delta0: return APPLYING
if delta1 > delta0: return SEPARATING
return EXACT / PARALLEL_MOTION
Это численно устойчиво и автоматически корректно обрабатывает ретроградность, заворот через 0°/360° и «разворот» аспекта через 180°.
Метод 2 — аналитический (классический)
Работает через относительную скорость и знак отклонения.
relative_speed = v₂ − v₁ // скорость «догоняющей» конфигурации
d_signed = signed_diff(λ₁, λ₂) // −180..+180
// целевые значения знакового расстояния для аспекта A: +A и −A
target = (|d_signed − A| < |d_signed + A|) ? +A : −A
error = d_signed − target // насколько мы «мимо»
// если error и relative_speed имеют разные знаки — сближаемся
if error * relative_speed < 0: APPLYING
else: SEPARATING
Метод 3 — традиционный (только для быстрых/медленных)
В классической традиции: быстрая планета аппликует к медленной. Если более быстрая планета (по абсолютной величине суточного движения) находится позади точки аспекта и движется к ней директно — аппликация.
faster = (|v₁| > |v₂|) ? P₁ : P₂
Особые случаи традиции:
- Refranation (рефранация) — быстрая планета разворачивается (становится ретроградной) до завершения аспекта; аспект не совершается.
- Prohibition / frustration (запрещение, фрустрация) — третья планета вклинивается и совершает аспект раньше.
- Collection of light (собирание света) — обе планеты аппликуют к третьей, более медленной.
- Translation of light (перенос света) — быстрая планета сепарирует от одной и аппликует к другой.
Время до точного аспекта
time_to_exact = error / (−relative_speed) // в сутках, при линейном приближении
Для точного результата (учёт переменной скорости, стационарных точек) нужен итеративный метод — бисекция или Ньютона–Рафсона по функции f(t) = separation(λ₁(t), λ₂(t)) − A:
find_exact_time(t0, t1):
// бисекция на интервале, где f меняет знак
while (t1 − t0) > tolerance:
tm = (t0 + t1)/2
if sign(f(tm)) == sign(f(t0)): t0 = tm
else: t1 = tm
return (t0+t1)/2
1.6. Партильные и платические аспекты
| Термин | Латынь | Определение | Порог |
|---|---|---|---|
| Партильный (партиль) | partile | Обе планеты в одном и том же градусе (целочисленном), либо орб < 1° | delta < 1.0° (или floor(λ₁) == floor(λ₂ ∓ A)) |
| Платический | platic | В пределах орбиса, но не партильный | 1.0° ≤ delta ≤ orb_limit |
| Точный | exact / partile to the minute | Орб близок к нулю | delta < 0.0167° (1 угловая минута) |
Строгое классическое определение партиля — совпадение градуса: Марс в 14°32′ Овна и Венера в 14°08′ Льва — партильный тригон, потому что оба в 14-м градусе. Современное упрощение — просто delta < 1°.
Dexter / Sinister (правый / левый аспект):
- Sinister (левый) — аспект отбрасывается вперёд по знакам зодиака (в направлении возрастания долготы).
- Dexter (правый) — аспект отбрасывается назад. Традиционно считается более сильным.
d_signed = signed_diff(λ₁, λ₂)
// аспект от P₁ к P₂:
if d_signed > 0: SINISTER // P₂ впереди P₁
else: DEXTER
1.7. Функция точности / силы (exactness / strength)
Базовая нормированная точность:
exactness = 1 − (delta / orb_limit) // 1.0 в точке, 0.0 на краю орбиса
Развёрнутые варианты — см. §7.
1.8. Истинное угловое расстояние (с учётом широты)
Если нужна не проекция, а реальный угол между направлениями на два тела:
cos(θ) = sin(β₁)·sin(β₂) + cos(β₁)·cos(β₂)·cos(λ₁ − λ₂)
θ = acos(clamp(cos_θ, −1, 1))
Численно устойчивее через atan2 (формула гаверсинуса-аналога):
θ = atan2( sqrt( (cos β₂ · sin Δλ)²
+ (cos β₁ · sin β₂ − sin β₁ · cos β₂ · cos Δλ)² ),
sin β₁ · sin β₂ + cos β₁ · cos β₂ · cos Δλ )
где Δλ = λ₂ − λ₁. Это тот же расчёт, что и большой круг на сфере. Практически применяется редко (кроме затмений и мунданных аспектов), но важно для Плутона (β до 17°) и астероидов с большим наклонением.
2. ПОЛНЫЙ КАТАЛОГ АСПЕКТОВ
2.1. Гармоническая деривация
Любой аспект — это доля окружности:
aspect_angle(n, k) = k · 360 / n
где n — гармоника (harmonic), k — кратность (обычно 1 ≤ k ≤ n/2, чтобы угол не превышал 180°).
Аспект «n-й гармоники» соответствует делению круга на n частей. Соединение = гармоника 1. Оппозиция = 2. Тригон = 3. Квадратура = 4. И т.д.
Важное свойство: если k и n имеют общий делитель, аспект сводится к более низкой гармонике. Например, 2·360/4 = 180° — это оппозиция (гармоника 2), а не самостоятельный аспект 4-й гармоники. «Чистые» аспекты гармоники n — те, где gcd(k, n) = 1.
pure_aspects(n):
return [ k*360/n for k in 1..floor(n/2) if gcd(k,n) == 1 ]
2.2. Мажорные (птолемеевы) аспекты — Major / Ptolemaic
| Аспект (рус.) | Англ. | Символ | Угол | Гармоника | Природа |
|---|---|---|---|---|---|
| Соединение | Conjunction | ☌ | 0° | 1 | нейтральный/усиливающий |
| Оппозиция | Opposition | ☍ | 180° | 2 | напряжённый |
| Тригон / Трин | Trine | △ | 120° | 3 | гармоничный |
| Квадратура | Square | □ | 90° | 4 | напряжённый |
| Секстиль | Sextile | ✶ | 60° | 6 (= 2·3) | гармоничный |
Птолемеевы, потому что описаны в «Тетрабиблосе». Только они признавались в классической и средневековой астрологии. Секстиль — производный (6 = 2×3), поэтому слабее тригона.
2.3. Минорные аспекты — Minor
| Аспект (рус.) | Англ. | Символ | Угол | Гармоника | Автор/традиция |
|---|---|---|---|---|---|
| Полусекстиль | Semisextile | ⚺ | 30° | 12 | Кеплер |
| Полуквадрат | Semisquare / Octile | ∠ | 45° | 8 | Кеплер |
| Полутораквадрат | Sesquiquadrate / Sesquisquare / Trioctile | ⚼ | 135° | 8 (k=3) | Кеплер |
| Квиконс / Инконъюнкция | Quincunx / Inconjunct | ⚻ | 150° | 12 (k=5) | Кеплер |
Замечания:
- 30° = 360/12, 150° = 5·360/12 — обе из 12-й гармоники.
- 45° = 360/8, 135° = 3·360/8 — обе из 8-й гармоники.
- «Инконъюнкт» в строгой традиции означал отсутствие аспекта (аверсия, aversion) — знаки, не видящие друг друга: 30°, 150°. Современное употребление сузило термин до 150°.
- Полуквадрат и полутораквадрат вместе называют октильной группой.
2.4. Квинтильное семейство (5-я гармоника) — Quintile family
| Аспект | Англ. | Угол (точно) | Формула | Гармоника |
|---|---|---|---|---|
| Дециль / Полуквинтиль | Decile / Semiquintile | 36° | 360/10 | 10 |
| Квинтиль | Quintile | 72° | 360/5 | 5 |
| Тредециль / Сескви-квинтиль | Tredecile / Sesquiquintile | 108° | 3·360/10 | 10 |
| Биквинтиль | Biquintile | 144° | 2·360/5 | 5 |
Символика 5-й гармоники: творчество, талант, мастерство, форма, «пятиконечная звезда». Введена Кеплером, развита Джоном Эдди.
Чистые аспекты гармоники 5: k=1 (72°), k=2 (144°). Чистые аспекты гармоники 10: k=1 (36°), k=3 (108°). (k=2, k=4, k=5 сводятся к 72°, 144°, 180°.)
2.5. Септильное семейство (7-я гармоника) — Septile family
| Аспект | Англ. | Угол (точно) | Десятичное | В град/мин |
|---|---|---|---|---|
| Септиль | Septile | 360/7 | 51.428571° | 51°25′43″ |
| Бисептиль | Biseptile | 2·360/7 | 102.857143° | 102°51′26″ |
| Трисептиль | Triseptile | 3·360/7 | 154.285714° | 154°17′09″ |
Все три — чистые (7 — простое число). 7-я гармоника иррациональна относительно 360 в целых градусах — отсюда её «мистическая» репутация: судьба, рок, вдохновение, иррациональное, одержимость.
Рекомендуемые орбисы: очень узкие, 1–2°.
2.6. Новильное семейство (9-я гармоника) — Novile family
| Аспект | Англ. | Угол | Формула | Чистый? |
|---|---|---|---|---|
| Новиль | Novile / Nonagon | 40° | 360/9 | да (gcd(1,9)=1) |
| Биновиль | Binovile | 80° | 2·360/9 | да (gcd(2,9)=1) |
| — (тригон) | — | 120° | 3·360/9 | нет → гармоника 3 |
| Квадрановиль | Quadnovile / Quadranovile | 160° | 4·360/9 | да (gcd(4,9)=1) |
9 = 3², поэтому 9-я гармоника — «тригон тригона»: духовное завершение, посвящение, плод, вынашивание (9 месяцев). В индийской астрологии соответствует варге навамша (D9) — 9-я гармоника карты.
2.7. 11-я гармоника — Undecile
| Аспект | Угол (точно) | Десятичное |
|---|---|---|
| Ундециль (semi-undecile у некоторых школ) | 360/11 | 32.727273° |
| Биундециль | 2·360/11 | 65.454545° |
| Триундециль | 3·360/11 | 98.181818° |
| Квадриундециль | 4·360/11 | 130.909091° |
| Квинундециль | 5·360/11 | 163.636364° |
Все чистые (11 — простое). 11-я гармоника: по Эдди — «прорыв», выход за рамки, разрыв с нормой, эксцентричность. Часто ошибочно называют «ундециль» угол 33° (округление).
2.8. 13-я гармоника — Tredecile family (осторожно: омонимия)
| Аспект | Угол | Десятичное |
|---|---|---|
| 360/13 | 27.6923° | 27°41′32″ |
| 2·360/13 | 55.3846° | 55°23′05″ |
| 3·360/13 | 83.0769° | 83°04′37″ |
| 4·360/13 | 110.7692° | 110°46′09″ |
| 5·360/13 | 138.4615° | 138°27′41″ |
| 6·360/13 | 166.1538° | 166°09′14″ |
Все чистые (13 — простое). Внимание на терминологию: слово «tredecile» в западных источниках чаще означает 108° (3/10 круга), а не 13-ю гармонику. Для 13-й гармоники используют «13th harmonic aspect» без специального имени.
2.9. Сводная таблица всех углов
| Угол (°) | Название | Гармоника | Класс |
|---|---|---|---|
| 0.000 | Conjunction | 1 | major |
| 27.692 | 13th harmonic | 13 | exotic |
| 30.000 | Semisextile | 12 | minor |
| 32.727 | Undecile | 11 | exotic |
| 36.000 | Decile / Semiquintile | 10 | quintile family |
| 40.000 | Novile | 9 | novile family |
| 45.000 | Semisquare / Octile | 8 | minor |
| 51.429 | Septile | 7 | septile family |
| 60.000 | Sextile | 6 | major |
| 65.455 | Biundecile | 11 | exotic |
| 72.000 | Quintile | 5 | quintile family |
| 80.000 | Binovile | 9 | novile family |
| 90.000 | Square | 4 | major |
| 100.000 | Decile (10th of 1000?) — не использовать | — | — |
| 102.857 | Biseptile | 7 | septile family |
| 108.000 | Tredecile / Sesquiquintile | 10 | quintile family |
| 120.000 | Trine | 3 | major |
| 135.000 | Sesquiquadrate | 8 | minor |
| 144.000 | Biquintile | 5 | quintile family |
| 150.000 | Quincunx / Inconjunct | 12 | minor |
| 154.286 | Triseptile | 7 | septile family |
| 160.000 | Quadnovile | 9 | novile family |
| 165.000 | Quindecile (Ricardo)* | — | special |
| 180.000 | Opposition | 2 | major |
* Quindecile 165° — аспект, популяризированный Ricardo Ricardo / Noel Tyl (одержимость, навязчивость). Не путать с 24° (= 360/15), который тоже иногда зовут quindecile. Угол 165° = 11·360/24, то есть из 24-й гармоники.
2.10. Параллели и контрпараллели (аспекты по склонению)
Параллель (parallel, ∥) — два тела имеют одинаковое склонение (declination, δ) и одного знака. Контрпараллель (contraparallel, ⚯) — одинаковое по модулю склонение, но разных знаков.
is_parallel(δ₁, δ₂, orb):
return sign(δ₁) == sign(δ₂) and |δ₁ − δ₂| ≤ orb
is_contraparallel(δ₁, δ₂, orb):
return sign(δ₁) != sign(δ₂) and |δ₁ + δ₂| ≤ orb
// эквивалентно: | |δ₁| − |δ₂| | ≤ orb при разных знаках
Универсальная форма через две проверки:
orb_parallel = |δ₁ − δ₂|
orb_contraparallel= |δ₁ + δ₂|
Интерпретация: параллель ≈ соединение по силе, контрпараллель ≈ оппозиция. Типичный орбис: 1° (жёстко) — 1°30′. Некоторые школы (Charles Jayne, Kt Boehrer) используют 0°30′ для «точной» параллели.
Формула склонения из эклиптических координат — см. §8.1.
2.11. Антисы и контрантисы (Antiscia / Contra-antiscia)
Антис (antiscion, «тень») — точка, зеркально отражённая относительно оси солнцестояний 0° Рака — 0° Козерога (т.е. относительно 90°/270°). Две точки в антисе имеют равную продолжительность дня — отсюда «симпатическая» связь.
antiscion(λ) = (180 − λ) mod 360
Проверка: λ = 90° (0° Рака) → 90°. Ось неподвижна. λ = 0° (0° Овна) → 180° (0° Весов)?? — нет, это ошибка. Проверим ещё раз: отражение относительно точки 90° по формуле 2·90 − λ = 180 − λ. Для λ=0 → 180. Но 0° Овна и 0° Весов равноудалены от 0° Рака (по 90° в каждую сторону) — да, всё верно, это корректная пара антисов. Однако 0° Овна и 0° Весов также являются контрантисами друг друга (особый вырожденный случай на осях).
Классические пары знаков-антисов (относительно оси Рак/Козерог):
| Знак | Антис-знак |
|---|---|
| Овен ↔ Дева | 0°♈ ↔ 30°♍ ... |
| Телец ↔ Лев | |
| Близнецы ↔ Рак | |
| Весы ↔ Рыбы | |
| Скорпион ↔ Водолей | |
| Стрелец ↔ Козерог |
Проверка формулой: 15° Тельца = 45° абс. → antiscion = 180 − 45 = 135° = 15° Льва. ✓ 10° Близнецов = 70° → 180 − 70 = 110° = 20° Рака. ✓
Контрантис (contra-antiscion) — отражение относительно оси равноденствий 0° Овна — 0° Весов:
contra_antiscion(λ) = (360 − λ) mod 360
Эквивалентно: contra_antiscion(λ) = (antiscion(λ) + 180) mod 360.
Проверка: 15° Тельца = 45° → 360 − 45 = 315° = 15° Водолея. ✓
Классические пары знаков-контрантисов:
| Знак | Контрантис-знак |
|---|---|
| Овен ↔ Рыбы | |
| Телец ↔ Водолей | |
| Близнецы ↔ Козерог | |
| Рак ↔ Стрелец | |
| Лев ↔ Скорпион | |
| Дева ↔ Весы |
Детекция контакта:
has_antiscia_contact(λ₁, λ₂, orb):
a = antiscion(λ₁)
return separation(a, λ₂) ≤ orb
has_contra_antiscia_contact(λ₁, λ₂, orb):
c = contra_antiscion(λ₁)
return separation(c, λ₂) ≤ orb
Отношение симметрично: antiscion(antiscion(λ)) = λ.
Орбис для антисов: классически очень узкий — 1° (Лилли требует партиль, т.е. тот же градус). Современные — до 2°.
Связь со склонением: точки в антисе имеют одинаковое склонение того же знака (при нулевой широте) — то есть антис ≈ параллель по долготе. Контрантис ≈ контрпараллель.
3. СИСТЕМЫ ОРБИСОВ
3.1. Традиционная система: орбисы планет (moiety)
В классике орбис принадлежит планете, а не аспекту. Это её «сфера лучей» (orb of light / orbis / radiation), простирающаяся на столько же градусов вперёд и назад.
Таблица 3.1.1 — Классические орбисы (Порфирий, Абу Машар, Сахль ибн Бишр, Ибн Эзра, Бонатти, аль-Бируни)
| Планета | Орбис (полный) | Мойети (половина) |
|---|---|---|
| ♄ Сатурн | 9° | 4°30′ |
| ♃ Юпитер | 9° | 4°30′ |
| ♂ Марс | 8° | 4°00′ |
| ☉ Солнце | 15° | 7°30′ |
| ♀ Венера | 7° | 3°30′ |
| ☿ Меркурий | 7° | 3°30′ |
| ☽ Луна | 12° | 6°00′ |
Источник: Porphyry, «Introduction to the Tetrabiblos», гл. 55: «Лучи Солнца достигают 30°, 15 вперёд и 15 назад. Луны — 24 градуса, 12 вперёд и 12 назад; Сатурн и Юпитер — 18 градусов, 9 вперёд и 9 назад; Марс — 16, 8 вперёд и 8 назад; Венера и Меркурий — 14, 7 вперёд и 7 назад.»
Терминологическая ловушка: Порфирий даёт суммарный «периметр» (30, 24, 18, 16, 14), Абу Машар / Ибн Эзра / Бонатти / Лилли дают орбис как «столько-то вперёд и столько-то назад» (15, 12, 9, 8, 7). Числа в таблице выше — это «вперёд и назад», то есть радиус сферы.
Таблица 3.1.2 — Уильям Лилли, «Christian Astrology» (1647), кн. I, гл. XIX, с. 107
Лилли даёт две колонки: свой опыт и «как пишут другие».
| Планета | Лилли (по опыту) | Комментарий Лилли | Древние |
|---|---|---|---|
| ♄ Сатурн | 10°00′ | «According to others» | 9°00′ |
| ♃ Юпитер | 12°00′ | «As some have wrote» | 9°00′ |
| ♂ Марс | 7°30′ | «All consent» | 7°00′ |
| ☉ Солнце | 17°00′ | «Most say» | 15°00′ |
| ♀ Венера | 8°00′ | «Many write but» | 7°00′ |
| ☿ Меркурий | 7°00′ | «All consent only» | 7°00′ |
| ☽ Луна | 12°30′ | «Generally but» | 12°00′ |
Таблица 3.1.3 — Мойети по Лилли (колонка «по опыту», делённая пополам)
| Планета | Мойети |
|---|---|
| ☉ Солнце | 8°30′ (8.5°) |
| ☽ Луна | 6°15′ (6.25°) |
| ☿ Меркурий | 3°30′ (3.5°) |
| ♀ Венера | 4°00′ (4.0°) |
| ♂ Марс | 3°45′ (3.75°) |
| ♃ Юпитер | 6°00′ (6.0°) |
| ♄ Сатурн | 5°00′ (5.0°) |
Аль-Бируни (Abu Rayhan al-Biruni, XI в.)
Аль-Бируни следует общей арабской линии: Солнце 15° вперёд и назад, Луна 12° вперёд и назад, Сатурн и Юпитер по 9°, Марс 8°, Венера и Меркурий по 7°. То есть его таблица совпадает с таблицей 3.1.1. Мойети Солнца 7°30′ — именно это значение Робсон позаимствовал для орбиса неподвижных звёзд 1-й величины.
Применение: формула мойети
orb_limit(P₁, P₂) = moiety(P₁) + moiety(P₂)
Примеры по Лилли:
- ☉ + ☽ = 8.5 + 6.25 = 14.75°
- ♄ + ♂ = 5.0 + 3.75 = 8.75°
- ☿ + ♀ = 3.5 + 4.0 = 7.5°
- ☉ + ♄ = 8.5 + 5.0 = 13.5°
Примеры по древним:
- ☉ + ☽ = 7.5 + 6.0 = 13.5°
- ♄ + ♂ = 4.5 + 4.0 = 8.5°
Критически важно: орбис одинаков для всех аспектов. Сатурн-Марс имеет орбис 8.75° и для соединения, и для полусекстиля — потому что орбис описывает досягаемость лучей планеты, а не «мощность аспекта».
Асимметрия орбисов (Ибн Эзра)
Ибн Эзра и Бонатти рассматривали ситуацию, когда одна планета уже «в орбисе» другой, но не наоборот:
Если между Луной и Сатурном 10 градусов, то Сатурн находится внутри орбиса Луны (12°), но Луна не находится внутри орбиса Сатурна (9°).
Это односторонняя связь, если применять индивидуальные орбисы, а не мойети. Реализация:
P1_sees_P2 = (delta ≤ orb(P₁))
P2_sees_P1 = (delta ≤ orb(P₂))
mutual = P1_sees_P2 and P2_sees_P1
Большинство современных «традиционных» программ используют мойети (симметрично), но исторически более точная модель — асимметричная.
Другие небесные тела в традиции
| Объект | Орбис (традиция) |
|---|---|
| Звёзды 1-й величины | 7°30′ (Робсон) |
| Звёзды 2-й величины | 5°30′ |
| Звёзды 3-й величины | 3°40′ |
| Асцендент, MC | ~5° (нет классического консенсуса) |
| Жребии (Lots/Parts) | Орбис планеты-управителя, или 0 (только партиль) |
| Лунные узлы | Обычно без орбиса или 3° |
Renaissance Astrology (Christopher Warnock) и другие традиционалисты: неплатенарные точки (Асцендент, узлы, жребии) не имеют собственных орбисов — используется орбис планеты, которая к ним аспектирует.
3.2. Современная система: фиксированные орбисы по аспектам
Таблица 3.2.1 — «Стандартная учебная» (типовая западная)
| Аспект | Орбис |
|---|---|
| Соединение | 8° |
| Оппозиция | 8° |
| Тригон | 8° |
| Квадратура | 8° |
| Секстиль | 6° |
| Полуквадрат | 2° |
| Полутораквадрат | 2° |
| Квиконс | 3° |
| Полусекстиль | 2° |
| Квинтиль/Биквинтиль | 2° |
| Септильные | 1° |
| Новильные | 1° |
Таблица 3.2.2 — Astrotheme (натальная карта)
| Аспект | Орбис |
|---|---|
| Соединение | 10.5° |
| Оппозиция | 10.0° |
| Тригон | 8.3° |
| Квадратура | 7.8° |
| Секстиль | 6.1° |
| Квиконс | 2.7° |
| Полутораквадрат | 2.5° |
| Полуквадрат | 1.5° |
| Полусекстиль | 1.0° |
| Квинтиль | 0.8° |
| Биквинтиль | 0.8° |
Поправки Astrotheme:
- Если участвует Солнце или Луна: +0.3° (18′) ко всем аспектам.
- Если аспект Солнце–Луна: +0.6° (36′).
- Лунные узлы и Лилит: орбис ограничен максимум 3°.
Таблица 3.2.3 — Astrotheme (синастрия / совместимость)
| Аспект | Орбис |
|---|---|
| Соединение | 10.0° |
| Оппозиция | 8.0° |
| Тригон | 6.0° |
| Квадратура | 6.0° |
| Секстиль | 4.5° |
| Квиконс | 2.0° |
| Полутораквадрат | 1.0° |
| Полуквадрат | 1.0° |
| Полусекстиль | 1.0° |
| Квинтиль / Биквинтиль | 1.0° |
Таблица 3.2.4 — Astrotheme (транзиты)
| Аспект | Орбис |
|---|---|
| Соединение | 2.6° |
| Оппозиция | 2.5° |
| Тригон | 2.3° |
| Квадратура | 2.3° |
| Секстиль | 2.3° |
| Квиконс | 1.5° |
| Полутораквадрат | 1.5° |
| Полуквадрат | 1.3° |
| Полусекстиль | 1.0° |
| Квинтиль / Биквинтиль | 1.0° |
Поправки транзитов: +0.1° (6′) при участии светила, +0.2° (12′) для Солнце–Луна.
Таблица 3.2.5 — «Широкая» схема (TimePassages / Solar Fire defaults)
| Аспект | Орбис |
|---|---|
| Соединение | 10.0° |
| Оппозиция | 10.0° |
| Тригон | 10.0° |
| Квадратура | 10.0° |
| Секстиль | 8.0° |
| Полусекстиль | 6.0° |
| Полуквадрат | 6.0° |
| Квиконс (inconjunct) | 5.0° |
| Квинтиль | 4.0° |
| Биквинтиль | 4.0° |
| Полутораквадрат | 4.0° |
Таблица 3.2.6 — «Узкая» исследовательская схема (statistical / Gauquelin-style)
| Аспект | Орбис |
|---|---|
| Соединение | 6° |
| Оппозиция | 6° |
| Тригон | 5° |
| Квадратура | 5° |
| Секстиль | 4° |
| Все минорные | 1–2° |
| Все экзотические (7, 9, 11, 13) | 0.5–1° |
3.3. Орбис как функция участвующих планет (гибридная современная)
Самая распространённая схема в софте: базовый орбис аспекта × множитель планеты, либо матрица «планета × аспект».
Таблица 3.3.1 — Матрица «планета × аспект» (типовой софт, градусы)
| Планета | ☌ | ☍ | △ | □ | ✶ | 30/45/135/150 | minor |
|---|---|---|---|---|---|---|---|
| ☉ Солнце | 10 | 10 | 8 | 8 | 6 | 3 | 1.5 |
| ☽ Луна | 10 | 10 | 8 | 8 | 6 | 3 | 1.5 |
| ☿ Меркурий | 7 | 7 | 6 | 6 | 4 | 2 | 1 |
| ♀ Венера | 7 | 7 | 6 | 6 | 4 | 2 | 1 |
| ♂ Марс | 8 | 8 | 7 | 7 | 5 | 2 | 1 |
| ♃ Юпитер | 9 | 9 | 7 | 7 | 5 | 2 | 1 |
| ♄ Сатурн | 9 | 9 | 7 | 7 | 5 | 2 | 1 |
| ♅ Уран | 6 | 6 | 5 | 5 | 4 | 1.5 | 1 |
| ♆ Нептун | 6 | 6 | 5 | 5 | 4 | 1.5 | 1 |
| ♇ Плутон | 6 | 6 | 5 | 5 | 4 | 1.5 | 1 |
| ☊ Узлы | 5 | 5 | 4 | 4 | 3 | 1 | 0.5 |
| ASC/MC | 8 | 8 | 7 | 7 | 5 | 2 | 1 |
| Хирон, астероиды | 3 | 3 | 3 | 3 | 2 | 1 | 0.5 |
Правило комбинирования (три варианта):
// А) максимум — самая либеральная
orb_limit = max(orb[P₁][A], orb[P₂][A])
// Б) среднее — «мойети-подобная»
orb_limit = (orb[P₁][A] + orb[P₂][A]) / 2
// В) минимум — самая строгая
orb_limit = min(orb[P₁][A], orb[P₂][A])
Наиболее распространён вариант А (максимум) — «светило тянет орбис на себя».
Мультипликативная схема
orb_limit = base_orb[A] × weight[P₁] × weight[P₂]
или
orb_limit = base_orb[A] × max(weight[P₁], weight[P₂])
Типовые веса:
| Класс объекта | weight |
|---|---|
| Светила (☉, ☽) | 1.25 |
| Личные (☿, ♀, ♂) | 1.00 |
| Социальные (♃, ♄) | 1.00 |
| Высшие (♅, ♆, ♇) | 0.85 |
| Углы (ASC, MC) | 1.00 |
| Узлы, Лилит, Хирон | 0.60 |
| Астероиды, фиктивные | 0.40 |
3.4. Орбис как функция «силы» аспекта (гармоническая деградация)
Идея (Эдди, Хэмблин, гармонисты): чем выше гармоника, тем уже орбис.
orb_limit(n) = K / n
где n — номер гармоники, K — константа (обычно 8…12).
При K = 10:
| Гармоника | Аспекты | orb = 10/n |
|---|---|---|
| 1 | 0° | 10.00° |
| 2 | 180° | 5.00° |
| 3 | 120° | 3.33° |
| 4 | 90° | 2.50° |
| 5 | 72°, 144° | 2.00° |
| 6 | 60° | 1.67° |
| 7 | 51.43°, ... | 1.43° |
| 8 | 45°, 135° | 1.25° |
| 9 | 40°, 80°, 160° | 1.11° |
| 10 | 36°, 108° | 1.00° |
| 11 | 32.73°, ... | 0.91° |
| 12 | 30°, 150° | 0.83° |
| 13 | 27.69°, ... | 0.77° |
Такая схема даёт слишком узкие мажорные орбисы для практики, поэтому чаще используют:
orb_limit(n) = K / sqrt(n)
При K = 12:
| Гармоника | orb = 12/√n |
|---|---|
| 1 | 12.00° |
| 2 | 8.49° |
| 3 | 6.93° |
| 4 | 6.00° |
| 5 | 5.37° |
| 6 | 4.90° |
| 7 | 4.54° |
| 8 | 4.24° |
| 9 | 4.00° |
| 12 | 3.46° |
Или эмпирический компромисс:
orb_limit(n) = 8 / n^0.7
3.5. «Аспекты — только в пределах знаков» (traditional sign-based)
Строгая эллинистическая модель: аспект существует только если планеты находятся в знаках, образующих аспект, независимо от точного угла (whole-sign aspects). Орбис определяет лишь силу и момент перфекции.
sign(λ) = floor(λ / 30) // 0..11
sign_distance = (sign(λ₂) − sign(λ₁)) mod 12
// 0=соединение, 2/10=секстиль, 3/9=квадратура, 4/8=тригон, 6=оппозиция
// 1, 5, 7, 11 = аверсия (нет аспекта)
Комбинация: градусный аспект внутри правильных знаков = наиболее сильная конфигурация. Градусный аспект, «выпавший» за границу знака (out-of-sign / dissociate aspect, диссоциированный аспект) — ослабленный и «неправильный».
is_dissociate(λ₁, λ₂, A):
degree_aspect = (|separation(λ₁,λ₂) − A| ≤ orb)
sd = (sign(λ₂) − sign(λ₁)) mod 12
sign_aspect = sd in EXPECTED_SIGN_DISTANCES[A]
return degree_aspect and not sign_aspect
4. АСПЕКТНЫЕ КОНФИГУРАЦИИ (PATTERNS)
Общие принципы детекции:
T— допуск (tolerance), обычно уже, чем обычный орбис: 6–8° для мажорных внутри фигур, 3° для квиконсов.- Планеты в фигуре могут быть стеллиумом (несколько в соединении на одном углу) — большинство алгоритмов сначала кластеризует соединения, потом ищет фигуры между кластерами.
- Следует избегать дубликатов: канонизировать набор планет (сортировка по id) и дедуплицировать.
4.0. Предварительная кластеризация соединений
cluster_conjunctions(planets, orb_conj):
clusters = []
for p in planets sorted by longitude:
placed = false
for c in clusters:
if separation(mean_longitude(c), p.lon) ≤ orb_conj:
c.add(p); placed = true; break
if not placed:
clusters.append(new Cluster(p))
// важен второй проход с учётом wraparound 360→0
merge_wraparound(clusters, orb_conj)
return clusters
Вспомогательная функция «круговое среднее»:
mean_longitude(cluster):
sx = Σ cos(λᵢ); sy = Σ sin(λᵢ)
return atan2(sy, sx) mod 360
4.1. Большой трин (Grand Trine, Большой тригон)
Структура: 3 планеты, попарно в тригонах (120°). Образует равносторонний треугольник.
detect_grand_trine(planets, T=8):
for each combination (a,b,c) of 3 planets:
if aspect(a,b, 120, T) and aspect(b,c, 120, T) and aspect(a,c, 120, T):
emit GrandTrine(a,b,c, element=dominant_element(a,b,c))
Подтип: если все три планеты в знаках одной стихии → «чистый» большой трин в огне/земле/воздухе/воде. Иначе — «диссоциированный».
4.2. Т-квадрат (T-Square, Тау-квадрат)
Структура: 2 планеты в оппозиции (180°), обе в квадратуре (90°) к третьей — апексу (apex / focal planet).
detect_t_square(planets, T=7):
for each pair (a,b):
if not aspect(a,b, 180, T): continue
for c in planets, c ∉ {a,b}:
if aspect(a,c, 90, T) and aspect(b,c, 90, T):
emit TSquare(opposition=(a,b), apex=c)
Важное уточнение: апекс — точка разрядки напряжения. Пустая точка (empty leg) — градус, противоположный апексу: (λ_apex + 180) mod 360.
Подтипы по модальности: кардинальный, фиксированный, мутабельный T-квадрат.
4.3. Большой крест (Grand Cross, Большой квадрат)
Структура: 4 планеты, две пары оппозиций, все смежные пары в квадратурах.
detect_grand_cross(planets, T=7):
for each combination (a,b,c,d):
// проверяем все 3 варианта разбиения на пары оппозиций
for (p1,p2,q1,q2) in [(a,c,b,d), (a,b,c,d), (a,d,b,c)]:
if aspect(p1,p2,180,T) and aspect(q1,q2,180,T)
and aspect(p1,q1,90,T) and aspect(q1,p2,90,T)
and aspect(p2,q2,90,T) and aspect(q2,p1,90,T):
emit GrandCross(p1,q1,p2,q2)
Эквивалентная проверка: два перекрывающихся T-квадрата, у которых апекс одного лежит в оппозиции к апексу другого.
4.4. Йод / Палец Бога (Yod, Finger of God / Finger of Fate)
Структура: 2 планеты в секстиле (60°), обе в квиконсе (150°) к третьей — апексу.
detect_yod(planets, T_sextile=4, T_quincunx=3):
for each pair (a,b):
if not aspect(a,b, 60, T_sextile): continue
for c in planets, c ∉ {a,b}:
if aspect(a,c, 150, T_quincunx) and aspect(b,c, 150, T_quincunx):
emit Yod(base=(a,b), apex=c)
Допуск для йода традиционно жёстче обычного: 3° максимум, часто 2°. Это ключевая деталь — при широком допуске йоды находятся в каждой второй карте.
Reaction point / «точка реакции» — градус, противоположный апексу: (λ_apex + 180) mod 360. Это середина секстильного основания + 180°.
4.5. Мистический прямоугольник (Mystic Rectangle)
Структура: 4 планеты: 2 оппозиции + 2 тригона + 2 секстиля. Прямоугольник, где диагонали — оппозиции, длинные стороны — тригоны, короткие — секстили.
detect_mystic_rectangle(planets, T=6):
for each combination (a,b,c,d):
// a—c и b—d оппозиции (диагонали)
if aspect(a,c,180,T) and aspect(b,d,180,T):
// проверяем стороны
sides = [(a,b),(b,c),(c,d),(d,a)]
trines = count of sides matching 120±T
sextiles = count of sides matching 60±T
if trines == 2 and sextiles == 2:
emit MysticRectangle(a,b,c,d)
Структурная закономерность: тригоны должны быть противоположными сторонами, и секстили тоже. Если a—b секстиль, то c—d секстиль, а b—c и d—a — тригоны.
4.6. Воздушный змей (Kite)
Структура: большой трин + четвёртая планета в оппозиции к одной из вершин трина (и, следовательно, в секстилях к двум другим).
detect_kite(planets, T=7):
for gt in detect_grand_trine(planets, T):
(a,b,c) = gt
for d in planets, d ∉ gt:
for tail in [a,b,c]:
others = gt \ {tail}
if aspect(tail, d, 180, T)
and aspect(others[0], d, 60, T)
and aspect(others[1], d, 60, T):
emit Kite(trine=gt, tail=tail, apex=d)
Терминология: d — «нос/вершина змея» (kite apex, focal point), tail — «хвост».
4.7. Большой секстиль / Звезда Давида (Grand Sextile / Star of David / Hexagon)
Структура: 6 планет, равномерно через 60°. Содержит 2 больших трина, 3 оппозиции, 6 секстилей.
detect_grand_sextile(planets, T=6):
for each combination (p₁..p₆):
sorted by longitude
ok = true
for i in 0..5:
if not aspect(p[i], p[(i+1) mod 6], 60, T): ok = false
// + проверка оппозиций
for i in 0..2:
if not aspect(p[i], p[i+3], 180, T): ok = false
if ok: emit GrandSextile(p₁..p₆)
Star of David (Звезда Давида) — иногда используется как синоним Grand Sextile (потому что фигура содержит два наложенных больших трина = гексаграмма). Некоторые авторы различают: Star of David = именно два больших трина, даже если не все секстили в орбисе.
detect_star_of_david(planets, T=7):
gts = detect_grand_trine(planets, T)
for each pair (gt1, gt2) with disjoint planet sets:
// проверяем, что вершины чередуются, т.е. между ними секстили/оппозиции
if all pairwise (x∈gt1, y∈gt2) form 60° or 180° within T:
emit StarOfDavid(gt1, gt2)
4.8. Стеллиум (Stellium, Стеллиум)
Структура: 3 (или 4) и более планет в соединении / в одном знаке / в одном доме.
Три определения — выбирать по конфигурации:
// A) по соединениям (цепочка)
detect_stellium_by_conjunction(planets, orb=8, min_count=3):
clusters = cluster_conjunctions(planets, orb)
return [c for c in clusters if len(c) ≥ min_count]
// B) по знаку
detect_stellium_by_sign(planets, min_count=3):
group by floor(λ/30)
return groups with count ≥ min_count
// C) по дому
detect_stellium_by_house(planets, min_count=3):
group by house_number
return groups with count ≥ min_count
Строгий вариант: весь стеллиум умещается в один орбис, т.е. separation(min λ, max λ) ≤ orb. Нестрогий (цепочный): каждая планета в орбисе к соседней, но крайние могут быть далеко — это часто даёт «ложные» стеллиумы длиной 30°+.
4.9. Колыбель (Cradle)
Структура: 4 планеты, образующие цепочку из 3 секстилей (60-60-60), концы цепочки — в оппозиции (180°). Внутри есть 2 тригона. Это «половина» большого секстиля.
detect_cradle(planets, T=6):
for each ordered sequence (a,b,c,d) by longitude:
if aspect(a,b,60,T) and aspect(b,c,60,T) and aspect(c,d,60,T)
and aspect(a,d,180,T)
and aspect(a,c,120,T) and aspect(b,d,120,T):
emit Cradle(a,b,c,d)
Проверка тригонов избыточна (следует из секстилей), но полезна как валидация допусков.
4.10. Молот Тора (Thor's Hammer / Молот Тора / Fist of God / God's Fist)
Структура: 2 планеты в квадратуре (90°), обе в полутораквадрате (135°) к третьей — апексу.
detect_thors_hammer(planets, T_square=6, T_sesq=3):
for each pair (a,b):
if not aspect(a,b, 90, T_square): continue
for c in planets, c ∉ {a,b}:
if aspect(a,c, 135, T_sesq) and aspect(b,c, 135, T_sesq):
emit ThorsHammer(base=(a,b), apex=c)
Геометрическая проверка: 90 + 135 + 135 = 360 ✓. Апекс — точка предельного напряжения и вынужденного действия.
4.11. Прямоугольник (Rectangle)
Общее семейство: 4 планеты, 2 оппозиции + 2 пары равных сторон.
Мистический прямоугольник (§4.5): стороны 60/120. Прямоугольник 45/135 (Octile Rectangle / «Rectangle»): стороны 45° и 135°, диагонали 180°.
detect_octile_rectangle(planets, T=3):
for each combination (a,b,c,d):
if aspect(a,c,180,T) and aspect(b,d,180,T):
if (aspect(a,b,45,T) and aspect(c,d,45,T)
and aspect(b,c,135,T) and aspect(d,a,135,T)):
emit Rectangle(a,b,c,d)
Проверка суммы: 45 + 135 + 45 + 135 = 360 ✓
Прямоугольник 30/150: стороны 30° и 150°, диагонали 180°. 30+150+30+150 = 360 ✓
4.12. Бумеранг / Двойной йод-ключ (Boomerang / Focused Yod)
Структура: йод + четвёртая планета в оппозиции к апексу йода (т.е. в точке реакции). Эта четвёртая планета оказывается в полусекстилях (30°) к обеим планетам основания йода.
detect_boomerang(planets, T_yod=3, T_opp=6, T_semisextile=3):
for yod in detect_yod(planets, ...):
(base_a, base_b, apex) = yod
for d in planets, d ∉ yod:
if aspect(apex, d, 180, T_opp)
and aspect(base_a, d, 30, T_semisextile)
and aspect(base_b, d, 30, T_semisextile):
emit Boomerang(yod=yod, release_point=d)
Проверка: 30 + 30 + 150 + 150 = 360 ✓. Точка d — «точка разрядки/выхода» энергии йода.
4.13. Двойной йод (Double Yod / Double Yod Key)
Структура: два йода, разделяющих общее основание или наложенные так, что образуется 5-планетная / 4-планетная фигура.
Классический Double Yod Key: 4 планеты — два секстиля и четыре квиконса, при этом две пары формируют два йода, чьи апексы находятся в секстиле друг к другу.
detect_double_yod(planets, T=3):
yods = detect_yod(planets, T)
for each pair (y1, y2):
if y1.apex != y2.apex:
// общая база или общая планета
shared = y1.planets ∩ y2.planets
if len(shared) ≥ 1:
// проверить секстиль между апексами
if aspect(y1.apex, y2.apex, 60, T):
emit DoubleYod(y1, y2)
Альтернативная геометрия (5 планет): центральная планета — апекс обоих йодов с двумя разными секстильными базами.
4.14. Хеле (Hele / Hele Pattern)
Структура: 4 планеты. Две оппозиции, разделённые тригоном и секстилем в определённом чередовании. Один из «прямоугольных» подтипов — иногда его определяют как две оппозиции, чьи концы связаны тригоном и секстилем с одной стороны.
Наиболее распространённая формулировка (Bil Tierney, «Dynamics of Aspect Analysis»): две оппозиции, соединённые двумя тригонами и двумя секстилями — то есть это фактически синоним мистического прямоугольника у ряда авторов. У других — фигура из 4 планет с расстояниями 60-120-60-120.
Практичная реализация: трактовать Hele как мистический прямоугольник (§4.5) с пометкой синонима, либо как:
detect_hele(planets, T=6):
// 4 планеты в последовательности с промежутками 60,120,60,120
for each ordered (a,b,c,d) by longitude:
g1 = separation_signed_forward(a,b)
g2 = separation_signed_forward(b,c)
g3 = separation_signed_forward(c,d)
if |g1-60|≤T and |g2-120|≤T and |g3-60|≤T:
emit Hele(a,b,c,d) // d—a автоматически 120
4.15. Прочие фигуры (краткий справочник детекции)
| Фигура | Состав | Условия |
|---|---|---|
| Wedge / Клин (Minor Grand Trine) | 3 планеты | оппозиция + тригон + секстиль |
| Boat / Trapezoid | 4 планеты | Grand Trine без одной стороны + ... : 2 секстиля + 2 тригона + 1 оппозиция |
| Grand Quintile | 5 планет | все смежные пары 72°±T |
| Golden Yod / Мистический йод | 3 планеты | 2 биквинтиля (144°) + 1 квинтиль (72°); 144+144+72=360 ✓ |
| Pentagram | 5 планет | квинтили/биквинтили, гармоника 5 |
| Grand Septile | 7 планет | все смежные 51.43°±T |
| Rosetta | 5 планет | комбинация тригонов/квадратур, редко реализуется |
| Yod с апексом-стеллиумом | ≥4 | кластеризация до детекции |
| Singleton | 1 планета | единственная планета в полусфере/стихии/модальности, не элемент аспектной геометрии |
| Splash / Bowl / Bucket / Locomotive / Bundle / Seesaw / Sling | все планеты | это типы карт по Марку Эдмунду Джонсу, не аспектные фигуры; детектируются по распределению долгот, см. ниже |
Типы карт по Джонсу (Jones Patterns) — быстрый алгоритм
classify_jones(longitudes):
sorted = sort(longitudes)
gaps = [ (sorted[(i+1)%n] − sorted[i]) mod 360 for i in 0..n-1 ]
max_gap = max(gaps)
span = 360 − max_gap // ширина занятой дуги
if span ≤ 120: return BUNDLE
if max_gap ≥ 120 and второй_разрыв малый: return BOWL // span ≤ 180
if есть один планета отдельно за разрывом ≥ 60 от «чаши»: return BUCKET (handle = та планета)
if span ≈ 240 (max_gap ≈ 120): return LOCOMOTIVE
if 2 группы, разделённые двумя разрывами ≥ 60: return SEESAW
if 8+ разрывов примерно равны: return SPLASH
else: return SPLAY
4.16. Универсальный движок детекции конфигураций
Вместо отдельного кода на каждую фигуру — декларативное описание:
PATTERN_DEFS = [
{ name: "Grand Trine", n: 3, edges: [(0,1,120),(1,2,120),(0,2,120)], tol: 8 },
{ name: "T-Square", n: 3, edges: [(0,1,180),(0,2,90),(1,2,90)], tol: 7, apex: 2 },
{ name: "Yod", n: 3, edges: [(0,1,60),(0,2,150),(1,2,150)], tol: 3, apex: 2 },
{ name: "Thor's Hammer", n: 3, edges: [(0,1,90),(0,2,135),(1,2,135)], tol: 3, apex: 2 },
{ name: "Golden Yod", n: 3, edges: [(0,1,72),(0,2,144),(1,2,144)], tol: 2, apex: 2 },
{ name: "Grand Cross", n: 4, edges: [(0,2,180),(1,3,180),(0,1,90),(1,2,90),(2,3,90),(3,0,90)], tol: 7 },
{ name: "Mystic Rect", n: 4, edges: [(0,2,180),(1,3,180),(0,1,60),(1,2,120),(2,3,60),(3,0,120)], tol: 6 },
{ name: "Kite", n: 4, edges: [(0,1,120),(1,2,120),(0,2,120),(0,3,180),(1,3,60),(2,3,60)], tol: 7 },
{ name: "Cradle", n: 4, edges: [(0,1,60),(1,2,60),(2,3,60),(0,3,180),(0,2,120),(1,3,120)], tol: 6 },
{ name: "Boomerang", n: 4, edges: [(0,1,60),(0,2,150),(1,2,150),(2,3,180),(0,3,30),(1,3,30)], tol: 3 },
{ name: "Rectangle", n: 4, edges: [(0,2,180),(1,3,180),(0,1,45),(1,2,135),(2,3,45),(3,0,135)], tol: 3 },
{ name: "Grand Sextile", n: 6, edges: [(0,1,60),(1,2,60),(2,3,60),(3,4,60),(4,5,60),(0,5,60),
(0,3,180),(1,4,180),(2,5,180)], tol: 6 },
]
detect_all(bodies):
results = []
clusters = cluster_conjunctions(bodies, 8) // опционально
for def in PATTERN_DEFS:
for combo in combinations(clusters, def.n):
for perm in permutations(combo): // нужны все перестановки
if all( |separation(perm[i].lon, perm[j].lon) − angle| ≤ def.tol
for (i,j,angle) in def.edges ):
results.append(Pattern(def.name, perm, tightness=...))
break // одна перестановка достаточна
return deduplicate(results)
Оптимизация: перестановок n! многовато для n=6 (720). Ускорение — сортировать участников по долготе перед проверкой (для симметричных фигур этого достаточно) и использовать canonical form для дедупликации.
Оценка «плотности» фигуры (tightness):
tightness = 1 − (Σ |actual − ideal| ) / (Σ tol)
или
tightness = 1 − max(|actual − ideal|) / tol
5. ГАРМОНИЧЕСКАЯ АСТРОЛОГИЯ (HARMONICS)
5.1. Джон Эдди (John Addey, 1920–1982)
Ключевой труд: «Harmonics in Astrology» (1976). Идея: астрологическое влияние — это волновой феномен. Зодиак — окружность, на которой накладываются волны разных частот (гармоник). Каждая гармоника n — это синусоида, укладывающаяся в круг n раз.
Из этой модели следуют два вывода:
- Аспекты — не самостоятельные сущности, а следствие наложения гармоник.
- Аспект угла
k·360/nв радиксе = соединение в n-й гармонической карте.
5.2. Формула гармонической карты
harmonic_longitude(λ, n) = (λ × n) mod 360
Полный алгоритм:
harmonic_chart(bodies, n):
result = []
for b in bodies:
λ_abs = absolute_longitude(b) // 0..360 от 0° Овна
λ_h = (λ_abs * n) mod 360
result.append( Body(b.id, λ_h) )
return result
Пример. Планета в 23°33′ Скорпиона.
- Абсолютная долгота: Скорпион начинается с 210°; 210 + 23.55 = 233.55° (233°33′).
- 5-я гармоника: 233.55 × 5 = 1167.75°.
- 1167.75 − 3×360 = 1167.75 − 1080 = 87.75°.
- 87.75° = 87°45′ = 27°45′ Близнецов.
5.3. Почему аспект превращается в соединение
Пусть λ₂ − λ₁ = k·360/n (точный аспект n-й гармоники). Тогда:
λ₂ᴴ − λ₁ᴴ = (λ₂·n − λ₁·n) mod 360
= ( (k·360/n)·n ) mod 360
= (k·360) mod 360
= 0
То есть точный аспект n-й гармоники становится точным соединением в H(n). Именно поэтому гармонические карты «фокусируют» слабые аспекты.
Аналогично: аспект 2k·360/n в радиксе → оппозиция в H(n/2) и т.д.
5.4. Ключевое следствие: умножение орбиса
Орбис тоже умножается на n:
orb_in_harmonic = orb_in_radix × n
Значит, для H(7) орбис соединения 7° соответствует радиксному орбису всего 1°. Практическое правило: в гармонической карте используйте орбис соединения не более 8/n — иначе конфигурация будет ложной.
Обратно: если вы хотите в радиксе орбис 1° для септиля, в H(7) орбис соединения = 7°.
5.5. Дробные и «возрастные» гармоники
Возрастная гармоника (Age Harmonic) — Robert Hand / Michael Harding:
age_harmonic_n = age_in_years + 1 // или точный возраст в годах (дробный)
λ_age = (λ × (age + 1)) mod 360
Для дробных n формула та же — n просто вещественное число. При n = 1 получаем радикс.
Обратная гармоника: λ / n даёт неоднозначность (n решений). Используется редко.
5.6. Гармоники и аспекты в гармонической карте
В H(n) можно искать не только соединения, но и обычные аспекты — это соответствует композитным гармоникам. Тригон в H(5) = аспект 360/15 = 24° в радиксе (5×3 = 15-я гармоника).
radix_angle = k × 360 / (n × m)
где n — номер гармонической карты, m — гармоника аспекта внутри неё.
5.7. Гармонический анализ распределения (harmonic spectrum)
Метод Эдди: для набора данных (например, 1000 дат рождения врачей) строится распределение углов Солнце-Сатурн, затем через преобразование Фурье ищутся выделяющиеся гармоники.
// Амплитуда n-й гармоники в выборке углов θᵢ (i=1..N)
A_n = (2/N) · | Σᵢ exp( i · n · θᵢ · π/180 ) |
// или раздельно:
C_n = (2/N) · Σ cos(n·θᵢ)
S_n = (2/N) · Σ sin(n·θᵢ)
A_n = sqrt(C_n² + S_n²)
φ_n = atan2(S_n, C_n) / n // фаза
Статистическая значимость: при равномерном случайном распределении A_n распределено по Рэлею, и N·A_n²/2 ~ χ² с 2 степенями свободы (тест Рэлея).
5.8. Гармоническая функция аспектов (Addey / Hamblin waveform)
Вместо дискретных орбисов — непрерывная функция:
strength(θ) = Σₙ aₙ · cos(n·θ + φₙ)
Простейший практический вариант — «косинусный аспектарий»:
aspect_wave(θ, n) = cos(n · θ) // максимум при θ = k·360/n
Суммируя первые несколько гармоник с весами, получают гладкую кривую силы аспекта без «обрыва на орбисе».
5.9. Соответствие гармоник и варг (Vargas) в джйотиш
| Гармоника | Варга | Санскрит | Тема |
|---|---|---|---|
| 1 | D1 | Раши | тело, жизнь |
| 2 | D2 | Хора | богатство |
| 3 | D3 | Дреккана | братья/сёстры |
| 4 | D4 | Чатуртхамша | недвижимость |
| 7 | D7 | Саптамша | дети |
| 9 | D9 | Навамша | супруг, дхарма |
| 10 | D10 | Дашамша | карьера |
| 12 | D12 | Двадашамша | родители |
| 16 | D16 | Шодашамша | комфорт |
| 20 | D20 | Вимшамша | духовность |
| 24 | D24 | Чатурвимшамша | образование |
| 27 | D27 | Накшатрамша | сила |
| 30 | D30 | Тримшамша | беды |
| 60 | D60 | Шаштьямша | всё, кармическая суть |
Внимание: варги в джйотиш вычисляются не по формуле λ×n mod 360 напрямую — там деление знака на n частей с последующим отображением по специфическим правилам для каждой варги. Формула Эдди — западная и даёт другой результат. Совпадение только концептуальное.
6. МИДПОЙНТЫ (MIDPOINTS) — КОСМОБИОЛОГИЯ / ЭБЕРТИН
6.1. Основы
Мидпойнт (midpoint, средняя точка, полусумма) — точка, равноудалённая от двух планет по эклиптике. Обозначение: A/B (читается «A slash B»).
Школа: Альфред Витте (Гамбургская школа, ураническая астрология, 1920-е) → Рейнхольд Эбертин (космобиология, «Kombination der Gestirneinflüsse» / «The Combination of Stellar Influences», 1940).
6.2. Формула мидпойнта — две точки
Любая пара точек на окружности имеет две средних точки, отстоящие на 180° друг от друга.
midpoint_direct(λ₁, λ₂):
// «ближний» мидпойнт — на короткой дуге
d = (λ₂ − λ₁) mod 360
if d > 180: d = d − 360 // −180..180
return (λ₁ + d/2) mod 360
midpoint_indirect(λ₁, λ₂):
return (midpoint_direct(λ₁, λ₂) + 180) mod 360
Наивная формула (λ₁ + λ₂)/2 НЕВЕРНА при пересечении 0°/360°.
Пример: λ₁ = 350°, λ₂ = 10°. Наивно: (350+10)/2 = 180° — это дальний мидпойнт. Правильный ближний: 0°.
Терминология:
- Direct midpoint / near midpoint (прямой, ближний) — на короткой дуге между планетами. Всегда
separation(λ₁, mid) ≤ 90°. - Indirect midpoint / far midpoint (косвенный, дальний) — противоположная точка.
В космобиологии обе точки равнозначны (планета на любой из них активирует мидпойнт), поскольку работа ведётся на 90°-диске, где они совпадают.
Векторная форма (устойчива численно):
midpoint_direct(λ₁, λ₂):
x = cos(λ₁) + cos(λ₂)
y = sin(λ₁) + sin(λ₂)
if |x| < ε and |y| < ε: // точная оппозиция — мидпойнт неопределён
return AMBIGUOUS
return atan2(y, x) mod 360
6.3. Число мидпойнтов
Для N тел: C(N,2) = N(N−1)/2 пар, каждая даёт 2 точки.
| N тел | Пар | Мидпойнт-точек |
|---|---|---|
| 10 | 45 | 90 |
| 14 | 91 | 182 |
| 16 | 120 | 240 |
| 20 | 190 | 380 |
6.4. Планетарные картины (Planetary Pictures)
Планетарная картина — конфигурация, где мидпойнт двух точек совпадает с третьей точкой или мидпойнтом другой пары.
Форма A/B = C:
midpoint(A, B) ≈ C (в пределах орбиса)
Читается: «C находится на мидпойнте A/B» или «соединённая символика A и B фокусируется через C».
Форма A/B = C/D (обобщённая, витте-ураническая):
midpoint(A, B) ≈ midpoint(C, D)
Эквивалентная алгебраическая форма (работает при отсутствии wraparound-проблем):
A + B ≡ C + D (mod 360)
Это фундаментальное уравнение уранической астрологии. Из него выводятся все остальные формы:
A + B = C + D // базовая
A + B − C = D // «сумма минус» — точка D вычисляемая
A + B = 2C // A/B = C, то есть C — мидпойнт A и B
A − B = C − D // «равные расстояния» — симметрия
A + B = C + Ascendant // персонализированная картина
Симметричные пары (Half-sums): если A + B = C + D, то все четыре точки симметричны относительно общей оси мидпойнта.
6.5. 90-градусный диск (90° Dial)
Идея: свернуть 360° в 90°, чтобы соединение, квадратура, оппозиция и «три четверти» (270°) оказались в одной точке.
dial90(λ) = λ mod 90
Свойства:
- ☌ (0°), □ (90°), ☍ (180°), □ (270°) → все дают одинаковую позицию на 90°-диске.
- Это в точности 4-я гармоника:
dial90(λ) = harmonic(λ, 4) / 4. - Эквивалентно:
harmonic_longitude(λ, 4) = 4 × dial90(λ).
Расстояние на 90°-диске:
dial90_separation(λ₁, λ₂):
d = (λ₁ − λ₂) mod 90
if d > 45: d = 90 − d
return d // 0..45
Другие диски:
| Диск | Формула | Гармоника | Что объединяет |
|---|---|---|---|
| 360° | λ | 1 | всё |
| 180° | λ mod 180 | 2 | ☌, ☍ |
| 90° | λ mod 90 | 4 | ☌, □, ☍ (жёсткие) |
| 45° | λ mod 45 | 8 | + ∠, ⚼ (полу/полутора) |
| 22.5° | λ mod 22.5 | 16 | 16-я гармоника |
| 120° | λ mod 120 | 3 | ☌, △ |
| 72° | λ mod 72 | 5 | ☌, квинтили |
| 51.43° | λ mod (360/7) | 7 | ☌, септили |
| 30° | λ mod 30 | 12 | ☌, ⚺, □(?), ⚻, ☍ |
Космобиологический стандарт: 90° диск как основной, 45° для тонких деталей.
6.6. Мидпойнт-деревья (Midpoint Trees)
Для каждой планеты (или угла) собираются все мидпойнты, на которых она стоит.
build_midpoint_tree(focal, bodies, orb):
tree = []
for each pair (A, B) in bodies, A ≠ B, A ≠ focal, B ≠ focal:
m_dir = midpoint_direct(λ_A, λ_B)
m_ind = (m_dir + 180) mod 360
for m in [m_dir, m_ind]:
// на 90°-диске:
d = dial90_separation(λ_focal, m)
if d ≤ orb:
tree.append( MidpointEntry(A, B, orb=d, indirect=(m==m_ind)) )
sort tree by orb ascending
return tree
Представление:
☉ Солнце
♂/♄ 0°12'
♀/ASC 0°31'
☽/♃ 0°47'
♅/MC 1°05'
6.7. Орбисы для мидпойнтов
Эбертин настаивал на очень узких орбисах:
| Уровень | Орбис | Применение |
|---|---|---|
| Максимально жёсткий | 0°30′ | «Ядро» картины |
| Стандарт Эбертина | 1°00′ | Натал |
| Расширенный | 1°30′ | Натал, включая вторичные |
| Предельный | 2°00′ | Только для светил / ASC / MC |
| Транзиты/дирекции | 0°30′ – 1°00′ | Прогностика |
Важно: орбис на 90°-диске — это «свёрнутый» орбис. Орбис 1° на 90°-диске = 1° в 360° для соединения, но также «покрывает» точки в 89°–91°, 179°–181°, 269°–271°.
Эбертин также использовал понятие «орбис по силе объекта»: Солнце, Луна, ASC, MC — 1°30′; планеты — 1°; остальное — 0°30′.
6.8. Классические комбинации Эбертина (примеры)
| Картина | Значение (по «Combination of Stellar Influences») |
|---|---|
| ☉ = ☽/ASC | личная встреча, значимые отношения |
| ☽ = ♀/♃ | счастье, гармония, беременность |
| ♂ = ♄/♅ | внезапное насилие, травма, «сила против препятствия» |
| ♄ = ☉/☽ | одиночество, разделение, скорбь |
| ASC = ♂/♄ | принуждение, тяжёлый труд |
| MC = ☉/♄ | ответственность, одиночество в карьере |
| ♅ = ♂/♇ | сверхусилие, катастрофическая мощь |
| ♃ = ☽/♀ | материнство, эстетическое счастье |
6.9. Sensitive Points (чувствительные точки) и Sums / Differences
Sum (сумма): (A + B) mod 360 — не мидпойнт, а «точка суммы» (используется в уранической астрологии как аналог арабских жребиев).
Difference (разность): (A − B) mod 360.
Обобщённая жребиевая формула:
Part = (A + B − C) mod 360
Например, Жребий Фортуны: Fortuna = (ASC + ☽ − ☉) mod 360 (дневная карта).
Связь с уравнением A + B = C + D: жребий — это решение D в A + B = C + D.
6.10. Итоговый алгоритм поиска планетарных картин
find_planetary_pictures(bodies, orb=1.0, dial=90):
pictures = []
// A/B = C
for each pair (A,B):
m = midpoint_direct(λ_A, λ_B)
for C in bodies, C ∉ {A,B}:
d = dial_separation(λ_C, m, dial)
if d ≤ orb: pictures.append(("A/B=C", A,B,C, d))
// A/B = C/D
mids = precompute all midpoints (with body pair labels)
sort mids by dial_position
// sweep-line для O(M log M) вместо O(M²)
for each adjacent group within orb on the dial:
emit all combinations (disjoint pairs only)
return pictures
Оптимизация: при 16 телах — 120 мидпойнтов; наивный поиск A/B=C/D даёт 120² = 14400 сравнений. Sweep-line по отсортированным позициям на диске сокращает до линейного.
7. ВЕС И ОЦЕНКА АСПЕКТОВ (SCORING)
7.1. Линейная деградация (наиболее распространённая)
strength(delta, orb_max) = 1 − delta / orb_max // 1 в точке, 0 на краю
Реализация с отсечением:
s = max(0, 1 − delta/orb_max)
7.2. Косинусная деградация (плавная, «мягкий край»)
strength = cos( (π/2) · delta / orb_max )
При delta = 0 → 1.0; при delta = orb_max → 0.0; производная на краю равна нулю (мягкое затухание).
Альтернатива — «приподнятый косинус» (raised cosine / Hann):
strength = 0.5 · ( 1 + cos( π · delta / orb_max ) )
При delta=0 → 1.0; delta=orb_max/2 → 0.5; delta=orb_max → 0.0. Производная нулевая на обоих концах — самая гладкая.
7.3. Гауссова деградация
strength = exp( − delta² / (2σ²) )
где σ = orb_max / 2.5 (тогда на краю орбиса сила ≈ 0.044) или σ = orb_max / 3 (≈ 0.011).
Формально не обращается в ноль, поэтому обычно отсекают: if delta > orb_max: strength = 0.
7.4. Степенная деградация (регулируемая «жёсткость»)
strength = ( 1 − delta/orb_max ) ^ p
| p | Поведение |
|---|---|
| 0.5 | «плоская» — далёкие аспекты почти так же сильны |
| 1.0 | линейная |
| 2.0 | квадратичная — резкое падение |
| 3.0 | очень концентрированная на точных |
7.5. Синусоидальная («орбис-волна», гармоническая)
strength = cos( n · (d − A) ) // где d — фактическое расстояние
или нормированно для аспекта n-й гармоники:
strength = ( 1 + cos( n · (d − A) · π/180 ) ) / 2
Даёт плавную периодическую функцию без явного орбиса вообще — сила плавно колеблется по всему кругу. Это подход Эдди/Хэмблина.
7.6. Итоговый вес аспекта в софте
Типичная составная формула:
weight(P₁, P₂, A, delta) =
aspect_base_weight[A]
× planet_weight[P₁]
× planet_weight[P₂]
× orb_decay(delta, orb_limit)
× applying_bonus
× sign_agreement_bonus
Таблица 7.6.1 — Базовые веса аспектов
| Аспект | Вес | Полярность |
|---|---|---|
| Соединение | 1.00 | нейтральная (зависит от планет) |
| Оппозиция | 0.90 | −1 |
| Квадратура | 0.85 | −1 |
| Тригон | 0.80 | +1 |
| Секстиль | 0.55 | +1 |
| Квиконс | 0.35 | −0.5 |
| Полутораквадрат | 0.30 | −0.5 |
| Полуквадрат | 0.30 | −0.5 |
| Полусекстиль | 0.20 | +0.3 |
| Квинтиль | 0.20 | +0.5 |
| Биквинтиль | 0.15 | +0.5 |
| Дециль/Тредециль | 0.10 | +0.3 |
| Септильные | 0.10 | нейтральная |
| Новильные | 0.10 | +0.3 |
| 11-я, 13-я гармоника | 0.05 | нейтральная |
| Параллель | 0.70 | как соединение |
| Контрпараллель | 0.60 | как оппозиция |
Таблица 7.6.2 — Веса планет
| Объект | Вес |
|---|---|
| ☉ Солнце | 1.00 |
| ☽ Луна | 1.00 |
| ASC | 0.95 |
| MC | 0.90 |
| ☿ Меркурий | 0.80 |
| ♀ Венера | 0.80 |
| ♂ Марс | 0.85 |
| ♃ Юпитер | 0.80 |
| ♄ Сатурн | 0.85 |
| ♅ Уран | 0.65 |
| ♆ Нептун | 0.60 |
| ♇ Плутон | 0.65 |
| ☊ Сев. узел | 0.50 |
| ⚷ Хирон | 0.40 |
| Лилит | 0.30 |
| Астероиды | 0.20 |
Бонусы/штрафы
applying_bonus = 1.15 if APPLYING else 1.00 // классически аппликация сильнее
(некоторые школы: 1.0 vs 0.85)
partile_bonus = 1.25 if delta < 1.0 else 1.00
dissociate_penalty= 0.75 if out_of_sign else 1.00
retrograde_factor = 0.90 if any planet retrograde else 1.00
angular_bonus = 1.20 if planet in angular house (1,4,7,10)
1.00 if succedent, 0.85 if cadent
7.7. Агрегированные метрики карты
Общая аспектная напряжённость:
tension = Σ weight(aspect) для аспектов с полярностью < 0
harmony = Σ weight(aspect) для аспектов с полярностью > 0
balance = (harmony − tension) / (harmony + tension) // −1..+1
Сила планеты по аспектам (aspect score):
score(P) = Σ_{все аспекты с участием P} weight(P, Q, A, delta) × polarity(A)
Индекс «загруженности» (aspect density):
density = (число найденных аспектов) / (C(N,2))
7.8. Пример численного расчёта
Солнце 12°14′ Овна (= 12.233°), Сатурн 15°08′ Рака (= 105.133°).
d = separation(12.233, 105.133) = 92.900°
A = 90 (квадратура)
delta = 2.900°
orb_limit (табл. 3.3.1, максимум) = max(orb[Sun][square]=8, orb[Saturn][square]=7) = 8°
Сила по разным функциям:
| Функция | Значение |
|---|---|
| Линейная: 1 − 2.9/8 | 0.6375 |
| Косинусная: cos(π/2 · 2.9/8) | 0.8383 |
| Raised cosine: 0.5(1+cos(π·2.9/8)) | 0.7203 |
| Гаусс (σ=8/2.5=3.2): exp(−2.9²/(2·3.2²)) | 0.6653 |
| Квадратичная: (1−2.9/8)² | 0.4064 |
Итоговый вес (линейная, аппликация, в знаке):
weight = 0.85 (квадратура) × 1.00 (Солнце) × 0.85 (Сатурн) × 0.6375 × 1.15 (аппликация)
= 0.5297
8. СКЛОНЕНИЕ (DECLINATION)
8.1. Формула склонения из эклиптических координат
Преобразование эклиптических (λ, β) в экваториальные (α, δ):
sin δ = sin β · cos ε + cos β · sin ε · sin λ
откуда:
δ = asin( sin β · cos ε + cos β · sin ε · sin λ )
Прямое восхождение:
α = atan2( sin λ · cos ε − tan β · sin ε , cos λ )
(результат нормализовать в 0…360).
Наклон эклиптики ε (obliquity of the ecliptic):
Средний наклон (формула IAU 1980 / Laskar, достаточно точна для ±1000 лет):
T = (JD − 2451545.0) / 36525 // юлианские столетия от J2000.0
ε₀ = 23°26′21.448″
− 46.8150″·T
− 0.00059″·T²
+ 0.001813″·T³
В градусах:
ε₀ = 23.439291111
− 0.0130041667·T
− 1.63888e-7·T²
+ 5.03611e-7·T³
Значения:
| Эпоха | ε₀ |
|---|---|
| J2000.0 (2000-01-01) | 23°26′21.4″ = 23.43929° |
| 1950.0 | 23°26′44.8″ = 23.44578° |
| 2000.0 | 23.43929° |
| 2026.0 | ≈ 23°26′11″ = 23.43639° |
| 2050.0 | ≈ 23°26′02″ = 23.43389° |
Для истинного наклона добавляется нутация по наклону Δε (до ±9.2″) — для астрологии несущественно.
8.2. Упрощённая формула (при нулевой широте, β = 0)
Для Солнца (β ≈ 0 всегда) и как приближение для планет:
δ = asin( sin ε · sin λ )
Таблица склонения Солнца по долготе (ε = 23.4363°, 2026):
| λ (°) | Знак/градус | δ |
|---|---|---|
| 0 | 0° Овна | 0°00′ |
| 15 | 15° Овна | +5°59′ |
| 30 | 0° Тельца | +11°28′ |
| 45 | 15° Тельца | +16°17′ |
| 60 | 0° Близнецов | +20°09′ |
| 75 | 15° Близнецов | +22°42′ |
| 90 | 0° Рака | +23°26′ (максимум) |
| 105 | 15° Рака | +22°42′ |
| 120 | 0° Льва | +20°09′ |
| 135 | 15° Льва | +16°17′ |
| 150 | 0° Девы | +11°28′ |
| 165 | 15° Девы | +5°59′ |
| 180 | 0° Весов | 0°00′ |
| 210 | 0° Скорпиона | −11°28′ |
| 240 | 0° Стрельца | −20°09′ |
| 270 | 0° Козерога | −23°26′ (минимум) |
| 300 | 0° Водолея | −20°09′ |
| 330 | 0° Рыб | −11°28′ |
8.3. Out-of-bounds (OOB, «за пределами границ»)
Планета out-of-bounds, если её склонение превышает максимальное склонение Солнца:
is_out_of_bounds(δ, ε):
return |δ| > ε // ε ≈ 23°26′ ≈ 23.4367°
Порог зависит от эпохи (см. таблицу ε выше). Многие программы используют фиксированное 23°26′ = 23.43333° или 23°27′ = 23.45°.
Какие тела бывают OOB: | Тело | Макс. |δ| | Бывает OOB? | |---|---|---| | ☉ Солнце | 23°26′ | никогда (по определению) | | ☽ Луна | до 28°43′ | да, циклично (период 18.6 года — нутация узлов) | | ☿ Меркурий | до ~26° | да, часто | | ♀ Венера | до ~28° | да | | ♂ Марс | до ~27° | да | | ♃ Юпитер | до ~24° | редко | | ♄ Сатурн | до ~24° | редко | | ♅ Уран | до ~24° | очень редко | | ♆ Нептун | до ~23° | практически нет | | ♇ Плутон | до ~45° | да, часто (большая широта) |
Лунный цикл OOB: Луна максимально OOB, когда её узлы совпадают с равноденствиями и наклонение (5°09′) складывается с ε: 23°26′ + 5°09′ = 28°35′ (major lunar standstill, «большое лунное стояние»). Минимум: 23°26′ − 5°09′ = 18°17′ (minor standstill) — тогда Луна OOB не бывает вовсе.
| Период | Тип стояния | Макс. |δ| Луны | |---|---|---| | 2006 | Major | 28°43′ | | 2015 | Minor | 18°08′ | | 2025 | Major | 28°43′ | | 2034 | Minor | 18°08′ |
Интерпретация OOB (Kt Boehrer, Steven Forrest): «вне закона», за рамками нормы, экстремальность, гениальность/девиантность, отсутствие социальных ограничений.
8.4. Детекция параллелей и контрпараллелей — полный алгоритм
detect_declination_aspects(bodies, orb=1.0):
results = []
for each pair (A, B):
δA = declination(A); δB = declination(B)
orb_par = abs(δA − δB)
orb_contra= abs(δA + δB)
if orb_par ≤ orb and sign(δA) == sign(δB):
results.append(Parallel(A, B, orb_par))
if orb_contra ≤ orb and sign(δA) != sign(δB):
results.append(Contraparallel(A, B, orb_contra))
return results
Граничный случай: если одно из склонений близко к нулю (|δ| < orb), то и параллель, и контрпараллель могут формально пройти. Корректная обработка — использовать только |δA − δB| ≤ orb для параллели и |δA + δB| ≤ orb для контрпараллели, не проверяя знаки:
is_parallel = |δA − δB| ≤ orb
is_contraparallel = |δA + δB| ≤ orb
// при δA ≈ δB ≈ 0 оба истинны — это корректно, обе интерпретации применимы
Аппликация/сепарация по склонению: через производную склонения dδ/dt:
dδ/dt ≈ ( δ(t+h) − δ(t−h) ) / (2h)
// затем тот же метод, что в §1.5 метод 1
8.5. Деклинационные аспекты за пределами параллели
Некоторые школы (Charles Jayne, Leigh Westin) используют деклинационные градусные аспекты (declination aspects / «contra-declinations»):
// Аналог квадратуры в склонении: разница склонений ≈ ε/2 ≈ 11°43'
// Аналог других аспектов вычисляется через долготу точек равного склонения
Более распространён подход через antiscia (§2.11) — они математически связаны: точки с равным склонением по долготе и есть антисы.
Ключевое тождество (при β=0):
δ( antiscion(λ) ) = δ(λ)
Проверка: sin δ = sin ε · sin λ; antiscion(λ) = 180 − λ; sin(180 − λ) = sin λ. Следовательно склонения равны. ✓
δ( contra_antiscion(λ) ) = −δ(λ)
Проверка: contra_antiscion(λ) = 360 − λ = −λ; sin(−λ) = −sin λ. ✓
То есть антис = параллель по долготе, контрантис = контрпараллель по долготе — для тел с нулевой широтой. Для тел с ненулевой широтой они расходятся, и это важное различие: антисы — долготная симметрия, параллели — реальное склонение.
8.6. Восхождение по прямой и «мунданные» аспекты
Right ascension (прямое восхождение, α) — аналог долготы на экваторе. Аспекты в RA («aspects in right ascension») используются в примарных дирекциях.
α = atan2( sin λ · cos ε − tan β · sin ε, cos λ ) mod 360
separation_RA = separation(α₁, α₂)
Aspects in mundo (мунданные аспекты) — по домам, а не по эклиптике. Расстояние измеряется в «домных градусах»:
house_position(λ) = house_number + fraction_within_house // непрерывная величина 1.0..13.0
mundane_separation = |hp₁ − hp₂| × 30 // в «домных градусах»
ПРИЛОЖЕНИЕ A. СВОДНАЯ РЕАЛИЗАЦИЯ (псевдокод)
import math
from itertools import combinations
# ---------- базовые утилиты ----------
def norm360(x): return x % 360.0
def separation(a, b):
d = (b - a) % 360.0
return 360.0 - d if d > 180.0 else d
def signed_diff(a, b):
return (b - a + 180.0) % 360.0 - 180.0
# ---------- каталог аспектов ----------
ASPECTS = [
("Conjunction", 0.0, 1, "major"),
("Opposition", 180.0, 2, "major"),
("Trine", 120.0, 3, "major"),
("Square", 90.0, 4, "major"),
("Sextile", 60.0, 6, "major"),
("Semisextile", 30.0, 12, "minor"),
("Semisquare", 45.0, 8, "minor"),
("Sesquiquadrate", 135.0, 8, "minor"),
("Quincunx", 150.0, 12, "minor"),
("Decile", 36.0, 10, "quintile"),
("Quintile", 72.0, 5, "quintile"),
("Tredecile", 108.0, 10, "quintile"),
("Biquintile", 144.0, 5, "quintile"),
("Septile", 360/7, 7, "septile"),
("Biseptile", 720/7, 7, "septile"),
("Triseptile", 1080/7, 7, "septile"),
("Novile", 40.0, 9, "novile"),
("Binovile", 80.0, 9, "novile"),
("Quadnovile", 160.0, 9, "novile"),
("Undecile", 360/11, 11, "exotic"),
("Quindecile", 165.0, 24, "special"),
]
# ---------- орбисы ----------
ORB_TABLE = { # planet -> {aspect_class: orb}
"Sun": {"major": 10, "minor": 3, "quintile": 2, "septile": 1, "novile": 1, "exotic": 0.5, "special": 2},
"Moon": {"major": 10, "minor": 3, "quintile": 2, "septile": 1, "novile": 1, "exotic": 0.5, "special": 2},
"Mercury": {"major": 7, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
"Venus": {"major": 7, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
"Mars": {"major": 8, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
"Jupiter": {"major": 9, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
"Saturn": {"major": 9, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
"Uranus": {"major": 6, "minor": 1.5, "quintile": 1, "septile": 0.5, "novile": 0.5, "exotic": 0.5, "special": 1},
"Neptune": {"major": 6, "minor": 1.5, "quintile": 1, "septile": 0.5, "novile": 0.5, "exotic": 0.5, "special": 1},
"Pluto": {"major": 6, "minor": 1.5, "quintile": 1, "septile": 0.5, "novile": 0.5, "exotic": 0.5, "special": 1},
"ASC": {"major": 8, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
"MC": {"major": 8, "minor": 2, "quintile": 1.5, "septile": 1, "novile": 1, "exotic": 0.5, "special": 1.5},
}
# традиционные мойети (Lilly, по опыту)
LILLY_MOIETY = {"Sun":8.5, "Moon":6.25, "Mercury":3.5, "Venus":4.0,
"Mars":3.75, "Jupiter":6.0, "Saturn":5.0}
ANCIENT_MOIETY = {"Sun":7.5, "Moon":6.0, "Mercury":3.5, "Venus":3.5,
"Mars":4.0, "Jupiter":4.5, "Saturn":4.5}
def orb_limit_modern(p1, p2, aspect_class):
return max(ORB_TABLE[p1][aspect_class], ORB_TABLE[p2][aspect_class])
def orb_limit_traditional(p1, p2, table=LILLY_MOIETY):
return table[p1] + table[p2]
# ---------- поиск аспектов ----------
def find_aspects(bodies, mode="modern"):
"""bodies: list of dicts {id, lon, speed}"""
out = []
for A, B in combinations(bodies, 2):
d = separation(A["lon"], B["lon"])
for name, angle, harmonic, cls in ASPECTS:
if mode == "modern":
limit = orb_limit_modern(A["id"], B["id"], cls)
else:
if cls != "major": continue # традиция: только птолемеевы
limit = orb_limit_traditional(A["id"], B["id"])
delta = abs(d - angle)
if delta <= limit:
out.append({
"a": A["id"], "b": B["id"], "aspect": name,
"angle": angle, "orb": delta, "limit": limit,
"exactness": 1 - delta/limit,
"phase": applying(A, B, angle),
"partile": delta < 1.0,
"harmonic": harmonic,
})
break # один аспект на пару
return out
def applying(A, B, angle, h=0.01):
d0 = abs(separation(A["lon"], B["lon"]) - angle)
d1 = abs(separation(A["lon"] + A["speed"]*h,
B["lon"] + B["speed"]*h) - angle)
if d1 < d0 - 1e-12: return "applying"
if d1 > d0 + 1e-12: return "separating"
return "exact"
# ---------- деклинация ----------
def obliquity(jd):
T = (jd - 2451545.0) / 36525.0
return (23.439291111 - 0.0130041667*T
- 1.63888e-7*T*T + 5.03611e-7*T**3)
def declination(lon, lat, eps):
L, B, E = map(math.radians, (lon, lat, eps))
return math.degrees(math.asin(
math.sin(B)*math.cos(E) + math.cos(B)*math.sin(E)*math.sin(L)))
def is_oob(dec, eps): return abs(dec) > eps
# ---------- антисы ----------
def antiscion(lon): return (180.0 - lon) % 360.0
def contra_antiscion(lon): return (360.0 - lon) % 360.0
# ---------- мидпойнты ----------
def midpoint(a, b):
d = signed_diff(a, b)
return (a + d/2.0) % 360.0
def dial(lon, size=90.0): return lon % size
def dial_sep(a, b, size=90.0):
d = (a - b) % size
return size - d if d > size/2 else d
# ---------- гармоники ----------
def harmonic(lon, n): return (lon * n) % 360.0
ПРИЛОЖЕНИЕ B. КОНТРОЛЬНЫЕ ЗНАЧЕНИЯ ДЛЯ ТЕСТОВ
| Вход | Функция | Ожидаемый результат |
|---|---|---|
| separation(350, 10) | 20.0 | |
| separation(10, 350) | 20.0 | |
| separation(0, 180) | 180.0 | |
| separation(0, 181) | 179.0 | |
| signed_diff(350, 10) | +20.0 | |
| signed_diff(10, 350) | −20.0 | |
| midpoint(350, 10) | 0.0 | |
| midpoint(10, 350) | 0.0 | |
| midpoint(0, 180) | 90.0 (неоднозначно, но direct = 90) | |
| midpoint(100, 200) | 150.0 | |
| midpoint(350, 100) | 45.0 | |
| antiscion(45) | 15° Тельца | 135.0 = 15° Льва |
| antiscion(90) | 0° Рака | 90.0 (неподвижна) |
| antiscion(270) | 0° Козерога | 270.0 (неподвижна) |
| contra_antiscion(45) | 315.0 = 15° Водолея | |
| contra_antiscion(0) | 0.0 (неподвижна) | |
| harmonic(233.55, 5) | 87.75 | |
| harmonic(72, 5) | 0.0 | |
| harmonic(51.4285714, 7) | ≈0.0 | |
| dial(275, 90) | 5.0 | |
| dial_sep(5, 89, 90) | 6.0 | |
| declination(90, 0, 23.4393) | 0° Рака | +23.4393 |
| declination(0, 0, 23.4393) | 0.0 | |
| declination(270, 0, 23.4393) | −23.4393 | |
| orb_limit_traditional("Sun","Moon", LILLY) | 14.75 | |
| orb_limit_traditional("Saturn","Mars", LILLY) | 8.75 |
ПРИЛОЖЕНИЕ C. ГЛОССАРИЙ РУС/АНГЛ
| Русский | English |
|---|---|
| Аспект | Aspect |
| Орбис | Orb |
| Мойети (половина орбиса) | Moiety |
| Аппликация | Applying |
| Сепарация | Separating |
| Партильный | Partile |
| Платический | Platic |
| Соединение | Conjunction |
| Оппозиция | Opposition |
| Тригон / Трин | Trine |
| Квадратура | Square |
| Секстиль | Sextile |
| Полусекстиль | Semisextile |
| Полуквадрат | Semisquare / Octile |
| Полутораквадрат | Sesquiquadrate / Trioctile |
| Квиконс / Инконъюнкция | Quincunx / Inconjunct |
| Квинтиль | Quintile |
| Биквинтиль | Biquintile |
| Септиль | Septile |
| Новиль | Novile |
| Параллель | Parallel |
| Контрпараллель | Contraparallel |
| Склонение | Declination |
| За пределами границ | Out-of-bounds (OOB) |
| Антис | Antiscion |
| Контрантис | Contra-antiscion |
| Мидпойнт / Полусумма | Midpoint / Half-sum |
| Планетарная картина | Planetary picture |
| Большой трин | Grand Trine |
| Т-квадрат | T-Square |
| Большой крест | Grand Cross |
| Йод / Палец Бога | Yod / Finger of God |
| Мистический прямоугольник | Mystic Rectangle |
| Воздушный змей | Kite |
| Большой секстиль | Grand Sextile |
| Стеллиум | Stellium |
| Колыбель | Cradle |
| Молот Тора | Thor's Hammer |
| Бумеранг | Boomerang |
| Гармоника | Harmonic |
| 90-градусный диск | 90° Dial |
| Наклон эклиптики | Obliquity of the ecliptic |
| Диссоциированный аспект | Dissociate / out-of-sign aspect |
| Правый / левый аспект | Dexter / Sinister |
| Рефранация | Refranation |
| Перенос света | Translation of light |
| Собирание света | Collection of light |
| Запрещение | Prohibition |
КРИТИЧЕСКИЕ ЗАМЕЧАНИЯ ПО РЕАЛИЗАЦИИ
- Всегда используйте
norm360вместо%в языках с отрицательным остатком (C, C++, Java, JS, Go). - Мидпойнт нельзя считать как
(a+b)/2— обязательна обработка wraparound. - Скорость планет должна быть знаковой — ретроградность критична для аппликации/сепарации.
- Орбис аспекта и фактический орб — разные величины, не смешивайте в API.
- Для йодов и молотов Тора допуск обязан быть ≤3°, иначе ложные срабатывания в каждой карте.
- Гармонические карты: орбис делить на n.
- Соединение — не «аспект 0°» в смысле деления круга; это гармоника 1 и вырожденный случай. Некоторые движки ошибочно применяют к нему логику «0 mod 360 = 360».
- Отсутствующий аспект ≠ отсутствие связи — в традиции существует аверсия (30°, 150°) как значимое состояние.
- При поиске фигур сначала кластеризуйте соединения, иначе стеллиум из 3 планет даст 3 «одинаковых» больших трина.
- Проверяйте все перестановки участников при детекции несимметричных фигур (T-квадрат, йод) — иначе апекс определится неверно.
Sources
- Orbs of Influence — Steven Birchfield (полный разбор классических орбисов: Порфирий, Абу Машар, Сахль ибн Бишр, Ибн Эзра, Бонатти, Лилли)
- Skyscript — Glossary: Moiety
- Skyscript Forum — Traditional orb factors
- Renaissance Astrology — The Ptolemaic Aspects, Orbs and Perfection
- Astrotheme — Astrological Aspects, Their Orb and Meaning (числовые таблицы орбисов)
- TimePassages / Astrograph — Aspect Orbs
- Kerykeion — Cosmobiology: Reinhold Ebertin and the Midpoint Method
- Cafe Astrology — Midpoints
- ebertinmethod.com — An Introduction to Cosmobiology
- Augurine — Harmonic Charts (формула λ×n mod 360)
- ZodiacRoots — Harmonics in Astrology: H1–H32 Complete Guide
- Spucchi Wiki — Antiscia / Contra-antiscia Aspects
- Wikipedia — Reinhold Ebertin
- Astrolibrary — Astrology Aspects and Orbs Explained
Примечание к отчёту для вызывающего агента: документ содержит ~1050 строк, покрывает все 8 запрошенных разделов. Главные подтверждённые из первоисточников факты: (а) таблица Лилли с двумя колонками (10/12/7.5/17/8/7/12.5 «по опыту» против 9/9/7/15/7/7/12 «древних») и его мойети (☉8.5, ☽6.25, ☿3.5, ♀4.0, ♂3.75, ♃6.0, ♄5.0); (б) орбисы аль-Бируни совпадают с общеарабской линией (☉15, ☽12, ♄/♃9, ♂8, ♀/☿7 «вперёд и назад»); (в) важное терминологическое различие — Порфирий даёт суммарный «периметр» (30/24/18/16/14), остальные авторы дают радиус; (г) числовые таблицы орбисов Astrotheme для натала/синастрии/транзитов с поправками на светила; (д) формулы антисов (180−λ) и контрантисов (360−λ) и их точная связь со склонением. Файлы не создавались.