Содержание
Математика деления небесной сферы на 12 домов. Все формулы приведены в градусной мере. Источники: Swiss Ephemeris (
swehouse.c, Astrodienst), Wikipedia "House (astrology)", Skyscript (Michael Wackford), Alexey Borealis, Astrodienst House Systems overview.
0. ОБОЗНАЧЕНИЯ И БАЗОВЫЕ ВЕЛИЧИНЫ
| Символ | Значение | Единица |
|---|---|---|
φ (fi) | географическая широта места | град, + север |
λ_geo | географическая долгота | град, + восток |
ε (eps) | наклон эклиптики к экватору (obliquity) | ≈ 23.4366° на 2000 |
θ / RAMC / ARMC | прямое восхождение MC = Local Sidereal Time × 15 | град |
LST | местное звёздное время | часы |
α (RA) | прямое восхождение точки | град |
δ (D, dec) | склонение точки | град |
λ | эклиптическая долгота | град |
β | эклиптическая широта | град |
A | азимут | град |
h | высота над горизонтом (altitude) | град |
H | часовой угол | град |
AD | ascensional difference (разность восхождения) | град |
OA | oblique ascension (косое восхождение) | град |
SDA / SNA | semi-diurnal / semi-nocturnal arc | град |
0.1. RAMC — фундамент всего
RAMC = LST × 15°
LST (в часах) = GST + λ_geo / 15
GST = GMST + уравнение равноденствий (nutation in RA)
GMST (Greenwich Mean Sidereal Time) вычисляется из юлианской даты UT:
T = (JD_UT − 2451545.0) / 36525
GMST[sec] = 67310.54841
+ (876600·3600 + 8640184.812866)·T
+ 0.093104·T²
− 6.2e-6·T³
GMST[deg] = (GMST[sec] / 240) mod 360
Swiss Ephemeris: swe_sidtime() / swe_sidtime0(). Суточная скорость ARMC — константа ARMCS ≈ 360.985647366 °/сут (используется в AscDash для скоростей куспидов).
0.2. Основные сферические переходы
Экватор → эклиптика (β = 0, точка на экваторе с α):
λ = arctan2( sin α · cos ε + tan δ · sin ε , cos α )
β = arcsin( sin δ · cos ε − cos δ · sin ε · sin α )
Эклиптика → экватор:
α = arctan2( sin λ · cos ε − tan β · sin ε , cos λ )
δ = arcsin( sin β · cos ε + cos β · sin ε · sin λ )
Для точки НА эклиптике (β = 0) это упрощается до:
tan α = tan λ · cos ε
sin δ = sin λ · sin ε
Swiss Ephemeris реализует это как swe_cotrans(x_in, x_out, eps).
0.3. Ascensional difference и semi-arc — сердце всех time-систем
Для точки со склонением δ на широте φ:
sin AD = tan φ · tan δ → AD = arcsin( tan φ · tan δ )
SDA = 90° + AD (полудуга дневная, для северного полушария и δ>0)
SNA = 90° − AD (полуночная полудуга)
SDA + SNA = 180°
Косое восхождение (oblique ascension) — точка на экваторе, восходящая одновременно с данной:
OA = α − AD (восход)
OD = α + AD (заход, oblique descension)
Условие вырождения: |tan φ · tan δ| > 1 ⇒ arcsin не определён ⇒ точка циркумполярна (никогда не восходит или не заходит). Это происходит при
|δ| > 90° − |φ|
Так как |δ| ≤ ε для точек эклиптики, эклиптика содержит циркумполярные точки при |φ| > 90° − ε ≈ 66.56° — полярный круг. Это — единственная и подлинная причина отказа Placidus и Koch.
δ
↑
+ε ──┼────────── эклиптика достигает ±23.44°
│
условие циркумполярности: |δ| > 90° − |φ|
│
φ = 66.56° → порог = 23.44° = ε ← ПОЛЯРНЫЙ КРУГ
φ = 70° → порог = 20° < ε ← часть эклиптики циркумполярна
A. УГЛЫ (THE ANGLES)
Углы — не «дома», а фундаментальные точки пересечения больших кругов с эклиптикой. Все квадрантные системы строятся на них.
Зенит (Z)
●
MC ● │
╲ │
─────────────●─────┼──────────●───── ГОРИЗОНТ
ASC │ DSC
│
● IC ● Надир
A.1. Midheaven — MC (Medium Coeli)
Концепция: точка пересечения меридиана (большой круг через полюсы мира, зенит и надир) с эклиптикой, в верхней (южной для сев. полушария) кульминации. MC — это точка эклиптики, чьё прямое восхождение равно RAMC.
Формула:
MC = arctan( tan(RAMC) / cos ε )
Правило квадранта (код Swiss Ephemeris дословно):
tant = tand(th); /* th = RAMC */
hsp->mc = atand(tant / cose);
if (th > 90 && th <= 270)
hsp->mc = swe_degnorm(hsp->mc + 180);
hsp->mc = swe_degnorm(hsp->mc);
В форме arctan2 (безопаснее):
MC = arctan2( sin(RAMC) , cos(RAMC) · cos ε )
Свойство: MC всегда определён на ЛЮБОЙ широте, включая полюс. От φ не зависит вовсе.
MC ≠ Зенит
Зенит — точка прямо над головой: h = 90°, склонение зенита δ_Z = φ, прямое восхождение α_Z = RAMC. Зенит лежит на меридиане, но не на эклиптике (кроме вырожденных случаев). MC — это проекция меридиана на эклиптику, то есть точка эклиптики с α = RAMC. Зенит и MC совпадают по RA, но различаются по склонению.
Эклиптическая долгота Зенита (через co-latitude) — это Vertex-подобная конструкция; сам Зенит в эклиптических координатах:
λ_Z = arctan2( sin(RAMC)·cos ε + tan φ · sin ε , cos(RAMC) )
β_Z = arcsin( sin φ · cos ε − cos φ · sin ε · sin(RAMC) )
Случай, когда MC — НЕ высшая точка эклиптики
Это критически важный и часто игнорируемый факт.
- MC определяется как точка эклиптики на меридиане. Меридиан пересекает эклиптику в двух точках: MC и IC (разделены 180° по долготе).
- Обычно MC — верхняя кульминация (выше горизонта). Но:
- При |φ| > 90° − ε (за полярным кругом) возможна ситуация, когда точка, находящаяся на меридиане с
α = RAMC, находится ниже горизонта, а противоположная точка (α = RAMC + 180°) — выше. - Высота MC над горизонтом:
h_MC = 90° − |φ − δ_MC|, гдеsin δ_MC = sin(MC)·sin ε. Приφ > 90° − δ_MC... фактически MC может оказаться под горизонтом на высоких широтах.
- При |φ| > 90° − ε (за полярным кругом) возможна ситуация, когда точка, находящаяся на меридиане с
Swiss Ephemeris обрабатывает это явно:
"When MC sinks below horizon: all cusps must be added 180 degrees,
and houses will be in clockwise direction."
- Также при |φ| = 90° (полюс) горизонт совпадает с экватором, все точки эклиптики имеют постоянную высоту
h = δ, ничто не восходит и не заходит. MC/IC формально всё ещё вычисляются (RAMC растёт), но их смысл вырождается. - Отдельно: «высшая точка эклиптики» (nonagesimal, точка эклиптики с максимальной высотой) — это НЕ MC. Nonagesimal отстоит на 90° от точки пересечения эклиптики с горизонтом, и её долгота =
ASC + 90°только в приближении. Разница MC vs nonagesimal может достигать десятков градусов.
A.2. Ascendant — ASC
Концепция: восточная точка пересечения горизонта с эклиптикой. Градус зодиака, восходящий в данный момент в данном месте.
Стандартная формула:
ASC = arctan2( cos(RAMC) , −( sin(RAMC)·cos ε + tan φ · sin ε ) )
Эквивалентная форма (чаще встречается):
cos(RAMC)
ASC = arctan ──────────────────────────────
− sin(RAMC)·cos ε − tan φ·sin ε
Реализация Swiss Ephemeris — функция Asc1(x, f, sine, cose) — обобщённая «asc на полюсе f»:
static double Asc1(double x1, double f, double sine, double cose)
{
...
ass = - tand(f) * sine + cose * cosd(x);
sinx = sind(x);
if (fabs(ass) < VERY_SMALL) ass = 0;
if (ass == 0) { if (sinx < 0) ass = -VERY_SMALL; else ass = VERY_SMALL; }
if (fabs(sinx) < VERY_SMALL) sinx = 0;
ass = atand(sinx / ass);
if (ass < 0) ass += 180; /* квадрантная коррекция */
...
}
То есть:
Asc1(x, f) = arctan( sin x / ( cos x · cos ε − tan f · sin ε ) )
с приведением к правильному квадранту.
И тогда:
ASC = Asc1( RAMC + 90° , φ )
Это ключ: весь Swiss Ephemeris строится на одной функции Asc1(равноточка, высота полюса). Все квадрантные системы — это просто разные пары (x, f).
Правило квадранта для ASC (классическая форма без arctan2):
- Вычислить
ASC₀ = arctan( cos(RAMC) / (−sin(RAMC)·cos ε − tan φ·sin ε) ) - Если
ASC₀ < 0→ASC₀ += 180° - Если
sin(RAMC) > 0… в разных редакциях правило формулируют так: ASC должен лежать в полукруге(MC, MC+180°). Каноническая проверка: ASC должен быть в интервале(MC, MC + 180°)по возрастанию долготы. Если нет — прибавить 180°.
Вырождение ASC:
- При
|φ| = 90°→tan φ = ∞→ ASC не определён (горизонт = экватор, эклиптика пересекает его в двух фиксированных точках 0° Овна и 0° Весов, но «восходящая» неопределима). - За полярным кругом ASC остаётся определён (это важно!), но может «прыгать» на 180° — то есть ASC может оказаться в западной части горизонта. В такие моменты ASC и DSC меняются ролями; порядок домов становится по часовой стрелке.
- Скорость ASC (
dASC/dt) на высоких широтах становится огромной — эклиптика лежит почти вдоль горизонта, и ASC «пробегает» полсферы за минуты.
A.3. Descendant — DSC и Imum Coeli — IC
DSC = ASC + 180° (mod 360)
IC = MC + 180° (mod 360)
Это точные тождества по определению во всех системах — противоположные точки на эклиптике. (В 3D DSC — реальная западная точка пересечения горизонта с эклиптикой, и она действительно ровно в 180° от ASC, так как эклиптика — большой круг и горизонт — большой круг, пересекаются в двух диаметрально противоположных точках.)
A.4. Vertex и Anti-Vertex
Концепция: Vertex — точка пересечения прайм-вертикала (prime vertical: большой круг через восточную и западную точки горизонта и зенит) с эклиптикой, в западной полусфере. Anti-Vertex — противоположная точка (восточная).
Ключевая идея: Vertex вычисляется той же формулой, что ASC, но:
- вместо широты φ используется ко-широта
90° − φ - вместо RAMC используется
RAMC − 90°(то есть RA западной точки горизонта)
Формула Swiss Ephemeris (дословно):
if (fi >= 0)
f = 90 - fi;
else
f = -90 - fi;
hsp->vertex = Asc1(th - 90, f, sine, cose);
То есть:
Vertex = Asc1( RAMC − 90° , 90° − φ ) для φ ≥ 0
Vertex = Asc1( RAMC − 90° , −90° − φ ) для φ < 0
Anti-Vertex = Vertex + 180°
Развёрнуто:
cos(RAMC − 90°)
Vertex = arctan ─────────────────────────────────────────
−sin(RAMC−90°)·cos ε − tan(90°−φ)·sin ε
где tan(90° − φ) = cot φ.
Вырождение Vertex:
- При
φ = 0(экватор) → ко-широта = 90° →cot 0... точнееtan(90°) = ∞⇒ Vertex вырождается. Физически: на экваторе прайм-вертикал совпадает с меридианом, Vertex = IC (или MC). - На полюсе (
φ = ±90°) ко-широта = 0 ⇒ прайм-вертикал = экватор ⇒ Vertex = точка равноденствия. - Vertex почти всегда попадает в дома 5–8 (западная половина карты). При очень низких широтах он уходит к IC.
A.5. East Point / Equatorial Ascendant (EP)
Концепция: восточная точка горизонта (East Point of the horizon) имеет α = RAMC + 90°, δ = 0. Через неё и полюсы мира проходит «Unnamed Great Circle» (часовой круг восточной точки). Его пересечение с эклиптикой = Equatorial Ascendant.
Эквивалентно: это ASC, вычисленный для широты φ = 0.
Формула Swiss Ephemeris (дословно):
th2 = swe_degnorm(th + 90);
tant = tand(th2);
hsp->equasc = atand(tant / cose);
if (th2 > 90 && th2 <= 270)
hsp->equasc = swe_degnorm(hsp->equasc + 180);
То есть:
EP = arctan( tan(RAMC + 90°) / cos ε )
с квадрантной коррекцией: если (RAMC + 90°) ∈ (90°, 270°] → +180°.
Эквивалентно в arctan2:
EP = arctan2( sin(RAMC + 90°) , cos(RAMC + 90°) · cos ε )
Или через Asc1:
EP = Asc1( RAMC + 90° , 0 )
— то есть буквально ASC на нулевой широте. Это подтверждает: EP определён на ЛЮБОЙ широте, включая полюса. Отсюда его ценность для полярных карт.
Различие терминов:
- East Point строго = точка горизонта (не эклиптическая долгота).
- Equatorial Ascendant = её эклиптическая проекция.
- Часто используются как синонимы.
A.6. Polar Ascendant и Co-Ascendants
Swiss Ephemeris выдаёт несколько дополнительных точек в массиве ascmc[]:
/* co-ascendant, Koch */
hsp->coasc1 = swe_degnorm(Asc1(th - 90, fi, sine, cose) + 180);
/* co-ascendant, Munkasey */
if (fi >= 0)
hsp->coasc2 = Asc1(th + 90, 90 - fi, sine, cose);
else
hsp->coasc2 = Asc1(th + 90, -90 - fi, sine, cose);
/* polar ascendant, M. Munkasey */
hsp->polasc = Asc1(th - 90, fi, sine, cose);
Формулы:
Co-Ascendant (Koch) = Asc1(RAMC − 90°, φ) + 180°
Co-Ascendant (Munkasey) = Asc1(RAMC + 90°, 90° − φ)
Polar Ascendant (Munkasey) = Asc1(RAMC − 90°, φ)
Заметьте: Polar Ascendant = Co-Ascendant(Koch) − 180°.
Полная таблица ascmc[] в Swiss Ephemeris
| Индекс | Константа | Точка |
|---|---|---|
| 0 | SE_ASC | Ascendant |
| 1 | SE_MC | MC |
| 2 | SE_ARMC | ARMC (RAMC) |
| 3 | SE_VERTEX | Vertex |
| 4 | SE_EQUASC | Equatorial Ascendant (East Point) |
| 5 | SE_COASC1 | Co-Ascendant (Walter Koch) |
| 6 | SE_COASC2 | Co-Ascendant (Michael Munkasey) |
| 7 | SE_POLASC | Polar Ascendant (M. Munkasey) |
B. СИСТЕМЫ ДОМОВ
Общая таксономия
ДЕЛЕНИЕ ПО ПРОСТРАНСТВУ (space) ДЕЛЕНИЕ ПО ВРЕМЕНИ (time)
───────────────────────────── ─────────────────────────
эклиптика: Equal, Whole Sign, Placidus (полудуги)
Porphyry, Vehlow Koch (полудуги MC)
экватор: Meridian, Morinus, Alcabitius (полудуги ASC)
Regiomontanus, Carter Topocentric (квази-полудуги)
прайм-верт: Campanus
горизонт: Horizontal (H)
ASC-зенит: Krusinski-Pisa-Goelzer
Ключевое различие: space-системы делят некоторый большой круг на равные дуги; time-системы делят время движения точки.
B.1. PLACIDUS (код P) — трисекция полудуг
Концепция
Каждая точка эклиптики совершает суточный путь: от IC через горизонт (восход) к MC, и обратно. Полудневная дуга (SDA) — путь от восхода до кульминации. Полуночная (SNA) — от кульминации нижней до восхода.
Placidus определяет куспид N-го дома как точку эклиптики, которая в данный момент прошла ровно 1/3 или 2/3 своей собственной полудуги от угла.
MC
│ ← 11 дом: точка, прошедшая 2/3 SDA от восхода
│ ← 12 дом: точка, прошедшая 1/3 SDA от восхода
─────┼──── ASC (восход, 0 SDA)
│ ← 2 дом: 1/3 SNA
│ ← 3 дом: 2/3 SNA
IC
Иначе: 12-й дом = множество точек, для которых «прошло 1/3 полудневной дуги от восхода». Это не большой круг — это кривая двойной кривизны, так называемая «S-curve» Placidus. Именно поэтому нет замкнутого решения.
Формулы
Для точки с прямым восхождением α и склонением δ:
SDA = 90° + arcsin( tan φ · tan δ )
Куспиды 11 и 12 дома должны удовлетворять системе (S-curve × эклиптика):
S-curve (11 дом): α(δ) = RAMC + (2/3)·SDA(δ) ...
В каноничной записи (Alexey Borealis) для 12-го дома:
RA(δ) = RAMC + [ 90° + arcsin(tan φ · tan δ) ] / 3
и точка одновременно лежит на эклиптике:
sin RA = tan δ / tan ε
Эти два уравнения — трансцендентная система без аналитического решения.
Итерационный алгоритм (каноничный)
RA₀ = RAMC + 30°
RA₁ = RAMC + arccos( −sin RA₀ · tan φ · tan ε ) / 3
RA₂ = RAMC + arccos( −sin RA₁ · tan φ · tan ε ) / 3
...
Сходится к неподвижной точке. Здесь использовано DSA(RA) = arccos( −sin RA · tan φ · tan ε ) — форма полудуги, выраженная сразу через RA точки на эклиптике (подставлено sin δ = sin λ sin ε и tan α = tan λ cos ε).
Реализация Swiss Ephemeris (дословно)
/* Placidus */
case 'P':
if (fabs(fi) >= 90 - ekl) { /* within polar circle */
retc = ERR;
strcpy(hsp->serr, "within polar circle, switched to Porphyry");
goto porphyry;
}
a = asind(tand(fi) * tane); /* ascensional difference of MC-ish */
fh1 = atand(sind(a / 3) / tane);
fh2 = atand(sind(a * 2 / 3) / tane);
/* ... */
for (ih = 10; ih <= 12; ih++) {
ih2 = ih - 9;
fac = 2.0;
if (ih == 11 || ih == 3) fac = 3.0; /* 1/3 vs 2/3 */
rectasc = swe_degnorm((int)(30 * ih2) + th);
tant = tand(asind(sine * sind(Asc1(rectasc, fh, sine, cose))));
/* iteration */
for (i = 1; i <= iteration_count; i++) {
tant = tand(asind(sine * sind(hsp->cusp[ih])));
if (tant == 0) { ... }
f = atand(sind(asind(tanfi * tant) / fac) / tant);
/* pole height */
hsp->cusp[ih] = Asc1(rectasc, f, sine, cose);
if (i > 1 && fabs(swe_difdeg2n(hsp->cusp[ih], cuspsv)) < VERY_SMALL_PLAC_ITER)
break;
cuspsv = hsp->cusp[ih];
}
}
Формула итерации в математической записи — «метод высоты полюса» (pole height):
Дано: rectasc = RAMC + 30°·k (k = 1, 2 для 11-го, 12-го дома)
fac = 3 (для 11 дома, 1/3 дуги)
fac = 1.5 (для 12 дома, 2/3 дуги) [в коде fac=2 → 1/2 ... см. ниже]
Итерация:
δᵢ = arcsin( sin ε · sin λᵢ ) ← склонение текущей оценки
tᵢ = tan δᵢ
fᵢ₊₁ = arctan( sin( arcsin(tan φ · tᵢ) / fac ) / tᵢ ) ← высота полюса
λᵢ₊₁ = Asc1( rectasc , fᵢ₊₁ )
Повторять до |λᵢ₊₁ − λᵢ| < ε_tol (VERY_SMALL_PLAC_ITER)
Начальное приближение: f₀ = arctan( sin(AD_max/fac) / tan ε ), где AD_max = arcsin(tan φ · tan ε).
Куспиды 2, 3 получаются симметрично (через RAMC + 30°·k для нижней полусферы), а 1, 4, 7, 10 = ASC, IC, DSC, MC.
Улучшение в Swiss Ephemeris 2.09: "Improvement of the Placidus house calculation" — более устойчивая итерация (комбинация бисекции и Ньютона-Рафсона; робастная реализация стартует с бисекции, затем переключается на Newton-Raphson при достаточной близости).
Почему Placidus отказывает выше ~66°
Условие циркумполярности точки эклиптики: |δ| > 90° − |φ|
Максимум |δ| на эклиптике = ε ≈ 23.44°
⇒ первая циркумполярная точка при φ = 90° − ε = 66.56°
Для циркумполярной точки полудуга не существует: она либо никогда не восходит (SDA не определена), либо никогда не заходит (SNA не определена). arcsin(tan φ · tan δ) имеет аргумент > 1 → NaN.
Физически: для этих градусов зодиака понятие «1/3 пути от восхода к кульминации» лишено смысла, так как восхода нет. Куспид не существует, а не «трудно вычисляется».
Swiss Ephemeris:
if (fabs(fi) >= 90 - ekl) {
retc = ERR;
strcpy(hsp->serr, "within polar circle, switched to Porphyry");
goto porphyry;
}
Важная тонкость: отказ наступает не строго на 66.56°, а тогда, когда конкретная искомая точка оказывается циркумполярной. На 60° Placidus работает, но даёт дома чудовищно неравные (один дом может занять 80°, другой 5°). SE применяет жёсткое отсечение по широте для детерминированности.
История
- Метод трисекции полудуг восходит к Птолемею (Tetrabiblos, косвенно) и был описан Абу Ма'шаром и, вероятно, ранее.
- Первая подтверждённая публикация — Giovanni Antonio Magini, 1602 (Tabulae primi mobilis).
- Первое документированное использование — Чехия, 1627.
- Название — от Placido de Titis (1603–1668), итальянского монаха-оливетанца и профессора математики в Павии, чей труд Physiomathematica sive Coelestis Philosophia (1650) сделал систему популярной.
- Стала доминирующей в англоязычной астрологии XIX–XX вв. благодаря дешёвым таблицам домов Рафаэля.
- Michael Wackford (Skyscript, «Placido & the Semi-Arc Method of House Division») подробно разбирает историческую атрибуцию и показывает, что Placido не изобретал метод.
B.2. KOCH (Birthplace Houses, код K)
Концепция
Формально Koch — тоже time-система, но делится не полудуга самой точки куспида, а полудуга градуса MC.
Определение: берём зодиакальный градус MC. Вычисляем, за сколько времени он прошёл путь от восхода до текущей кульминации (его SDA). Делим этот интервал на 3. Для каждой трети строим горизонт для того момента времени и смотрим, какой градус эклиптики восходил тогда.
То есть 12-й куспид = ASC, вычисленный для RAMC − (1/3)·SDA_MC... но с поправкой на широту, что и делает систему сложной.
Более точно: Koch строится «на равных приращениях прямого восхождения в каждом квадранте» (equal increments of Right Ascension per quadrant), где приращение задаётся ascensional difference градуса MC.
Формулы (Swiss Ephemeris, дословно)
case 'K': /* Koch houses */
if (fabs(fi) >= 90 - ekl) {
retc = ERR;
strcpy(hsp->serr, "within polar circle, switched to Porphyry");
goto porphyry;
}
sina = sind(hsp->mc) * sine / cosd(fi); /* always << 1, so no ERR */
cosa = sqrt(1 - sina * sina);
c = atand(tanfi / cosa);
ad3 = asind(sind(c) * sina) / 3.0;
hsp->cusp[11] = Asc1(th + 30 - 2 * ad3, fi, sine, cose);
hsp->cusp[12] = Asc1(th + 60 - ad3, fi, sine, cose);
hsp->cusp[ 2] = Asc1(th +120 + ad3, fi, sine, cose);
hsp->cusp[ 3] = Asc1(th +150 + 2 * ad3, fi, sine, cose);
Математически:
sin a = sin(MC) · sin ε / cos φ
cos a = √(1 − sin²a)
c = arctan( tan φ / cos a )
AD₃ = arcsin( sin c · sin a ) / 3 ← треть ascensional difference MC
cusp11 = Asc1( RAMC + 30° − 2·AD₃ , φ )
cusp12 = Asc1( RAMC + 60° − 1·AD₃ , φ )
cusp 2 = Asc1( RAMC + 120° + 1·AD₃ , φ )
cusp 3 = Asc1( RAMC + 150° + 2·AD₃ , φ )
cusp 1 = ASC, cusp10 = MC
Обратите внимание: здесь Asc1 вызывается с настоящей широтой φ, а не с высотой полюса — это отличает Koch от Regiomontanus/Placidus.
Отказ на высоких широтах
Комментарий Swiss Ephemeris:
"Koch and Placidus don't work in the polar circle.
We swap MC/IC so that MC is always before AC in the zodiac.
We then divide the quadrants into 3 equal parts, ie apply Porphyry."
Причина: c = arctan(tan φ / cos a) — при φ → 90° это выходит за пределы, а главное arcsin(sin c · sin a) может дать аргумент > 1. Плюс сам градус MC может оказаться циркумполярным.
Koch отказывает раньше и грубее, чем Placidus: уже около 60–63° куспиды начинают вести себя разрывно, поскольку Koch привязан к одной точке (MC), и её циркумполярность рушит всю систему разом.
История
Walter A. Koch (1895–1970), немецкий астролог. Опубликовал систему в 1960-х (Regiomontanus und das Häusersystem des Geburtsortes, 1960). Немецкое название — Geburtsorthäuser (GOH — houses of the birthplace), отсюда код "Koch/GOH" в Swiss Ephemeris. Koch утверждал, что система «привязывает дома к месту рождения» более точно. Популярна у немецкоязычных астрологов и исследователей статистики.
Существует историческая претензия, что метод предвосхитил Fiedrich Zanzinger и Heinz Specht.
B.3. REGIOMONTANUS (код R) — трисекция экватора
Концепция
Пространственная система. Делим небесный экватор на 12 равных дуг по 30°, начиная от точки пересечения экватора с горизонтом (восточная точка, α = RAMC + 90°). Через точки деления и полюсы горизонта (= северная и южная точки горизонта, полюсы вертикала... строго: полюсы горизонта — зенит и надир; здесь речь о полюсах прайм-вертикала, то есть северной и южной точках горизонта) проводим большие круги («house circles»). Их пересечения с эклиптикой — куспиды.
Экватор поделён на 12 × 30°
↓
────●───●───●───●───●────
╲ │ ╱ house circles через
╲ │ ╱ N и S точки горизонта
╲│╱
● (N point of horizon)
Формулы (Swiss Ephemeris, дословно)
case 'R': /* Regiomontanus houses */
fh1 = atand(tanfi * 0.5);
fh2 = atand(tanfi * cosd(30));
hsp->cusp[11] = Asc1(30 + th, fh1, sine, cose);
hsp->cusp[12] = Asc1(60 + th, fh2, sine, cose);
hsp->cusp[ 2] = Asc1(120 + th, fh2, sine, cose);
hsp->cusp[ 3] = Asc1(150 + th, fh1, sine, cose);
hsp->cusp[ 1] = hsp->ac;
hsp->cusp[10] = hsp->mc;
Математически:
f₁₁ = arctan( tan φ · sin 30° ) = arctan( 0.5 · tan φ )
f₁₂ = arctan( tan φ · sin 60° ) = arctan( cos30° · tan φ )
cusp11 = Asc1( RAMC + 30° , f₁₁ )
cusp12 = Asc1( RAMC + 60° , f₁₂ )
cusp 2 = Asc1( RAMC + 120° , f₁₂ )
cusp 3 = Asc1( RAMC + 150° , f₁₁ )
Обобщённо: высота полюса для куспида, отстоящего на H° от меридиана:
tan f_H = tan φ · sin H
Это и есть определяющее уравнение Regiomontanus. При H = 90° → f = φ → получаем ASC (проверка корректности).
Свойства и вырождение
- Не отказывает нигде, кроме буквально
|φ| = 90°(тамtan φ = ∞). - За полярным кругом даёт математически корректные, но геометрически странные результаты (дома могут «переворачиваться»).
- Основа классической примарной дирекции (Regiomontan primary directions) и системы Morin de Villefranche.
- John Frawley (The Real Astrology) — решительный сторонник Regiomontanus для хорарной астрологии, аргументируя что это система, использовавшаяся европейскими астрологами в период расцвета традиции (XV–XVII вв.), и что она корректно работает с primary directions.
История
Johannes Müller von Königsberg (1436–1476), латинизированно Regiomontanus — крупнейший математик и астроном своего времени, автор De triangulis omnimodis (основополагающий труд по тригонометрии). Таблицы домов опубликованы посмертно (Tabulae directionum, 1475/1490). Систему, вероятно, разработал Абрахам Ибн Эзра (XII в.) или арабские авторы ранее; Regiomontanus её популяризировал. Доминировала в Европе XV–XVII вв., затем вытеснена Placidus.
B.4. CAMPANUS (код C) — трисекция прайм-вертикала
Концепция
Пространственная система. Делим прайм-вертикал (большой круг через восточную точку горизонта, зенит, западную точку, надир) на 12 равных дуг по 30°, начиная от восточной точки горизонта. Через точки деления и северную/южную точки горизонта проводим большие круги. Пересечения с эклиптикой — куспиды.
Это «самая пространственная» из систем: она делит физическое пространство вокруг наблюдателя на 12 равных клиньев, как дольки апельсина, ось которых — линия север-юг горизонта.
Зенит
●
╱────┼────╲ Прайм-вертикал делён на 12×30°
● │ ●
East ●─────┼─────● West
● │ ●
╲────┼────╱
Надир
Формулы (Swiss Ephemeris, дословно)
case 'C': /* Campanus houses */
fh1 = asind(sind(fi) / 2);
fh2 = asind(sqrt(3.0) / 2 * sind(fi));
xh1 = atand(sqrt(3.0) / cosfi);
xh2 = atand(1 / sqrt(3.0) / cosfi);
hsp->cusp[11] = Asc1(th + 90 - xh1, fh1, sine, cose);
hsp->cusp[12] = Asc1(th + 90 - xh2, fh2, sine, cose);
hsp->cusp[ 2] = Asc1(th + 90 + xh2, fh2, sine, cose);
hsp->cusp[ 3] = Asc1(th + 90 + xh1, fh1, sine, cose);
Математически:
f₁₁ = arcsin( sin φ · sin 30° ) = arcsin( sin φ / 2 )
f₁₂ = arcsin( sin φ · sin 60° ) = arcsin( (√3/2)·sin φ )
x₁₁ = arctan( tan 60° / cos φ ) = arctan( √3 / cos φ )
x₁₂ = arctan( tan 30° / cos φ ) = arctan( 1/(√3·cos φ) )
cusp11 = Asc1( RAMC + 90° − x₁₁ , f₁₁ )
cusp12 = Asc1( RAMC + 90° − x₁₂ , f₁₂ )
cusp 2 = Asc1( RAMC + 90° + x₁₂ , f₁₂ )
cusp 3 = Asc1( RAMC + 90° + x₁₁ , f₁₁ )
Обобщённая форма для азимутального угла A на прайм-вертикале (A от восточной точки):
sin f_A = sin φ · cos A
tan x_A = cot A / cos φ ← сдвиг по RA от восточной точки
Свойства
- Определена всюду, включая полюс (при
φ = 90°:f = arcsin(cos A),x = arctan(cot A / 0) = ±90°— вырождается аккуратно). - Даёт очень неравные дома на высоких широтах, но никогда не отказывает.
- Совпадает с Equal House на экваторе при определённых условиях? Нет — на экваторе (
φ=0):f=0,x₁₁ = arctan(√3) = 60°,x₁₂ = 30°⇒ куспиды =Asc1(RAMC+30°, 0)и т.д. — то есть на экваторе Campanus = Meridian/Axial система. - Campanus, Regiomontanus и Meridian образуют семейство: все они
Asc1(что-то, высота-полюса), различаясь только законом распределения.
История
Campanus of Novara (Giovanni Campano, ок. 1220–1296), итальянский математик, астроном и капеллан папы Урбана IV. Автор комментария к Евклиду и Theorica Planetarum. Метод, однако, использовался и до него — упоминается у арабских авторов; иногда приписывается Аль-Бируни.
B.5. PORPHYRY (код O) — трисекция эклиптических дуг
Концепция
Простейшая квадрантная система. Берём четыре угла (ASC, IC, DSC, MC) и делим каждый эклиптический квадрант между ними на три равные части по долготе.
MC ──────┬──────┬────── ASC
cusp11 cusp12
(по долготе, равными третями)
Формулы (Swiss Ephemeris, дословно)
porphyry:
acmc = swe_difdeg2n(hsp->ac, hsp->mc); /* дуга от MC к ASC */
if (acmc < 0) {
hsp->ac = swe_degnorm(hsp->ac + 180);
acmc = swe_difdeg2n(hsp->ac, hsp->mc);
}
hsp->cusp[ 1] = hsp->ac;
hsp->cusp[ 2] = swe_degnorm(hsp->ac + (180 - acmc) / 3);
hsp->cusp[ 3] = swe_degnorm(hsp->ac + (180 - acmc) / 3 * 2);
hsp->cusp[ 4] = swe_degnorm(hsp->mc + 180);
hsp->cusp[ 5] = swe_degnorm(hsp->mc + 180 + acmc / 3);
hsp->cusp[ 6] = swe_degnorm(hsp->mc + 180 + acmc / 3 * 2);
hsp->cusp[10] = hsp->mc;
hsp->cusp[11] = swe_degnorm(hsp->mc + acmc / 3);
hsp->cusp[12] = swe_degnorm(hsp->mc + acmc / 3 * 2);
Математически, где Q = ASC − MC (mod 360):
cusp10 = MC
cusp11 = MC + Q/3
cusp12 = MC + 2Q/3
cusp 1 = ASC
cusp 2 = ASC + (180° − Q)/3
cusp 3 = ASC + 2(180° − Q)/3
cusp 4 = IC = MC + 180°
cusp 5 = IC + Q/3
cusp 6 = IC + 2Q/3
cusp 7 = DSC
cusp 8 = DSC + (180° − Q)/3
cusp 9 = DSC + 2(180° − Q)/3
Свойства
- Никогда не отказывает (кроме
|φ| = 90°, где нет ASC). Поэтому Swiss Ephemeris использует Porphyry как универсальный fallback для Placidus, Koch, Gauquelin в полярной зоне. - Даёт разумные, монотонные дома при любой широте.
- Порядок домов гарантированно правильный, так как
Q ∈ (0°, 180°)после коррекции.
История
Приписывается Порфирию Тирскому (233–305 н.э.), неоплатонику, автору Introduction to the Tetrabiblos of Ptolemy. Однако впервые описана Веттием Валентом (II в. н.э.) в Anthologiae — на век раньше. Это древнейшая известная квадрантная система.
B.6. EQUAL HOUSE (коды A и E) — от ASC
Концепция
Делим эклиптику на 12 равных дуг по 30°, начиная от градуса Асцендента.
Формула
cusp₁ = ASC
cuspₙ = ASC + 30°·(n − 1) mod 360, n = 1..12
Код:
case 'A': case 'E':
hsp->cusp[1] = hsp->ac;
for (i = 2; i <= 12; i++)
hsp->cusp[i] = swe_degnorm(hsp->cusp[1] + (i - 1) * 30);
Свойства
- Определена всюду, где определён ASC (то есть везде кроме точных полюсов).
- MC не совпадает с 10-м куспидом (кроме особых случаев). MC «плавает» между 8-м и 11-м домом. Сторонники считают это достоинством (MC — самостоятельная точка, не куспид), противники — недостатком.
- Сторонники Equal House (особенно британская школа — Margaret Hone, Charles Carter, Ronald Davison) утверждают: при высоких широтах (>60°) она даёт наименьшие искажения по сравнению с квадрантными системами.
История
Древнейшая после Whole Sign. Встречается в эллинистических текстах (Валент, Птолемей — Птолемей в Tetrabiblos III.10 описывает Equal-подобный расчёт для hyleg). В XX в. возрождена Alan Leo, затем Margaret Hone (The Modern Textbook of Astrology, 1951) сделала её стандартом британской Faculty of Astrological Studies.
B.7. WHOLE SIGN HOUSES (код W) — знак = дом
Концепция
Дом = знак. Знак, содержащий ASC, целиком становится 1-м домом (от 0° этого знака до 30°). Следующий знак — 2-й дом, и т.д. Градус ASC внутри 1-го дома роли куспида не играет — он лишь маркер.
Формула
cusp₁ = 30° · floor( ASC / 30° )
cuspₙ = cusp₁ + 30°·(n − 1) mod 360
Код:
case 'W': /* equal, whole sign */
hsp->cusp[1] = hsp->ac;
for (i = 2; i <= 12; i++)
hsp->cusp[i] = swe_degnorm(hsp->cusp[1] + (i - 1) * 30);
for (i = 1; i <= 12; i++)
hsp->cusp[i] -= fmod(hsp->cusp[i], 30); /* обрезка до начала знака */
Свойства
- Никогда не отказывает, определена абсолютно везде, включая полюса (если ASC определён; на полюсе можно взять любую конвенцию).
- Идеально стабильна при высоких широтах — главный практический аргумент.
- Границы домов совпадают с границами знаков ⇒ планета в знаке всегда в соответствующем доме, что резко упрощает интерпретацию аспектов «по знакам» (whole-sign aspects), лежащих в основе эллинистической техники.
История
Древнейшая система — базовая для эллинистической (I в. до н.э. — VII в. н.э.), индийской (Rāśi chart) и ранней арабской астрологии. Встречается у Валента, Доротея Сидонского, Фирмика Матерна, Павла Александрийского, Ретория.
Вышла из употребления в западной астрологии около X века (вытеснена квадрантными системами арабо-персидской традиции, особенно Alcabitius). Возрождена в 1980–90-х усилиями проекта Project Hindsight (Robert Hand, Robert Schmidt, Robert Zoller) и последующей работы Chris Brennan (Hellenistic Astrology, 2017), Demetra George. Сейчас — доминирующая система в traditional/Hellenistic revival.
B.8. ALCABITIUS (код B) — трисекция полудуг ASC
Концепция
Time-система, предшественник Placidus. Берём полудневную дугу градуса Асцендента (SDA_ASC). Делим её на 3 равные части. Каждая треть даёт приращение прямого восхождения. Через полученные точки экватора проводим часовые круги (меридианы), их пересечения с эклиптикой — куспиды.
Иначе: делим время, за которое ASC доходит до меридиана, на три части.
Формулы (Swiss Ephemeris, дословно)
case 'B': /* Alcabitius houses */
dek = asind(sind(hsp->ac) * sine); /* declination of Asc */
r = -tanfi * tand(dek);
sda = acosd(r); /* semi-diurnal arc of Asc */
sna = 180 - sda; /* semi-nocturnal arc */
sd3 = sda / 3;
sn3 = sna / 3;
rectasc = swe_degnorm(th + sn3); /* cusp 2 */
hsp->cusp[2] = Asc1(rectasc, 0, sine, cose);
rectasc = swe_degnorm(th + 2 * sn3); /* cusp 3 */
hsp->cusp[3] = Asc1(rectasc, 0, sine, cose);
rectasc = swe_degnorm(th + 180 - 2 * sd3); /* cusp 5 */
hsp->cusp[5] = Asc1(rectasc, 0, sine, cose);
rectasc = swe_degnorm(th + 180 - sd3); /* cusp 6 */
hsp->cusp[6] = Asc1(rectasc, 0, sine, cose);
Математически:
δ_ASC = arcsin( sin(ASC) · sin ε )
SDA = arccos( −tan φ · tan δ_ASC )
SNA = 180° − SDA
sd₃ = SDA / 3
sn₃ = SNA / 3
cusp 2 = Asc1( RAMC + sn₃ , 0 )
cusp 3 = Asc1( RAMC + 2·sn₃ , 0 )
cusp 5 = Asc1( RAMC + 180° − 2·sd₃ , 0 )
cusp 6 = Asc1( RAMC + 180° − sd₃ , 0 )
cusp 8,9,11,12 = противоположные (+180°)
cusp 1 = ASC, cusp 10 = MC
Обратите внимание: Asc1(x, 0) = проекция точки экватора на эклиптику через часовой круг (высота полюса 0 = полюс мира). Именно поэтому Alcabitius — «трисекция экватора».
Отличие Alcabitius от Placidus
| Alcabitius | Placidus | |
|---|---|---|
| Что делится | полудуга ASC (одна дуга) | полудуга каждого куспида (своя дуга) |
| Решение | замкнутое, за один проход | итеративное |
| Куспидная кривая | часовой круг (большой круг) | S-curve (не большой круг) |
| Отказ | только при циркумполярном ASC | при циркумполярном любом куспиде |
Anthony Louis («How do Alcabitius and Placidus Houses Differ?») отмечает, что на средних широтах разница обычно 1–4°, но на высоких широтах расходятся сильно.
Вырождение
SDA = arccos(−tan φ · tan δ_ASC): если |tan φ · tan δ_ASC| > 1, arccos не определён — ASC циркумполярен. Так как |δ_ASC| ≤ ε, это тоже полярный круг, но происходит реже, чем у Placidus: отказ наступает только когда сам градус ASC циркумполярен, а не любой из куспидов. Практически Alcabitius работает несколько выше 66.5°, чем Placidus.
История
Alcabitius = латинизация ʿAbd al-ʿAzīz ibn ʿUthmān al-Qabīṣī (ум. ок. 967), арабский астролог из Алеппо, автор Introduction to the Art of Judgements of the Stars (al-Madkhal), переведённого на латынь Иоанном Севильским (XII в.). Система, вероятно, восходит к Ринатусу/греческим источникам; сам аль-Кабиси приписывает её более ранним авторам. Доминирующая система в Европе X–XV вв., вытеснена Regiomontanus.
B.9. MORINUS (код M)
Концепция
Чисто математическая система, игнорирующая и горизонт, и широту наблюдателя. Делим небесный экватор на 12 дуг по 30° начиная от RAMC, затем проецируем точки деления на эклиптику вдоль кругов эклиптической широты (то есть через полюсы эклиптики, а не мира).
Формулы (Swiss Ephemeris, дословно)
case 'M': /* Morinus houses */
for (i = 1; i <= 12; i++) {
a = swe_degnorm(th + (i + 2) * 30.0);
x[0] = a;
x[1] = 0;
x[2] = 1;
swe_cotrans(x, x, -ekl); /* экватор → эклиптика */
hsp->cusp[i] = x[0];
}
Математически:
Для дома i: α_i = RAMC + 30°·(i + 2)
Точка на экваторе: (α_i, δ=0)
Проекция на эклиптику через swe_cotrans(−ε):
λ_i = arctan2( sin α_i · cos ε , cos α_i )
(так как δ=0, формула упрощается: tan λ = tan α · cos ε с квадрантной коррекцией)
Свойства
- Не зависит от широты вообще ⇒ работает идеально на любой широте, включая полюса.
- ASC не является 1-м куспидом; MC не является 10-м. Углы полностью независимы от домов.
- Michael Wackford (Skyscript): «The Meridian system and the method devised by Morinus both work very well near the Poles, if only because neither uses true geographic latitude. These methods locate all horoscopes at the Equator... so their 1st house cusps are rarely marked by the Ascendant.» — то есть система «переносит» все гороскопы на экватор.
- Куспид 1 =
Asc1-проекция точкиRAMC + 90°... фактическиcusp[1] = cotrans(RAMC + 90°)= Equatorial Ascendant (EP)! То есть у Morinus 1-й куспид = East Point.
История
Jean-Baptiste Morin de Villefranche (1583–1656), придворный астролог Людовика XIII, автор монументальной Astrologia Gallica (1661, посмертно). Ирония: сам Морен использовал Regiomontanus, а систему «Morinus» ему приписали позднее (вероятно, по одному из его предложений в Astrologia Gallica, кн. XVII). Система не использовалась им на практике.
B.10. TOPOCENTRIC (Polich-Page, код T)
Концепция
Авторы утверждали, что система выведена эмпирически (из наблюдений за событиями), и что основана на «топоцентрической» системе координат — конусе, ось которого — ось вращения Земли, а вершина — наблюдатель. Дома суть пересечения этих конусов с эклиптикой.
Однако математически это оказалось тривиальной аппроксимацией Placidus.
Формулы (Swiss Ephemeris, дословно)
case 'T': /* 'topocentric' houses */
fh1 = atand(tanfi / 3.0);
fh2 = atand(tanfi * 2.0 / 3.0);
hsp->cusp[11] = Asc1(30 + th, fh1, sine, cose);
hsp->cusp[12] = Asc1(60 + th, fh2, sine, cose);
hsp->cusp[ 2] = Asc1(120 + th, fh2, sine, cose);
hsp->cusp[ 3] = Asc1(150 + th, fh1, sine, cose);
hsp->cusp[ 1] = hsp->ac;
hsp->cusp[10] = hsp->mc;
Математически:
f₁₁ = arctan( tan φ / 3 )
f₁₂ = arctan( 2 · tan φ / 3 )
cusp11 = Asc1( RAMC + 30° , f₁₁ )
cusp12 = Asc1( RAMC + 60° , f₁₂ )
cusp 2 = Asc1( RAMC + 120° , f₁₂ )
cusp 3 = Asc1( RAMC + 150° , f₁₁ )
Сравнение с Regiomontanus и Placidus
Вся разница между тремя системами — закон высоты полюса:
| Система | Высота полюса для куспида 11 / 3 | для куспида 12 / 2 |
|---|---|---|
| Regiomontanus | arctan(tan φ · sin 30°) = arctan(0.5 tan φ) | arctan(tan φ · sin 60°) = arctan(0.866 tan φ) |
| Topocentric | arctan(tan φ / 3) = arctan(0.333 tan φ) | arctan(2 tan φ / 3) = arctan(0.667 tan φ) |
| Placidus | итеративно ≈ arctan(0.333 tan φ) при малых δ | ≈ arctan(0.667 tan φ) |
Именно так: Topocentric — это Placidus, у которого высоты полюсов зафиксированы в точности линейной трисекции φ, без итерации. Placidus итеративно решает f = arctan( sin(arcsin(tan φ tan δ)/3) / tan δ ), что при малых δ (разложение arcsin ≈ x, sin ≈ x) даёт f ≈ arctan(tan φ / 3) — ровно формулу Topocentric.
Практически: разность куспидов Topocentric и Placidus обычно < 1° (Wikipedia: "The house cusps are always within a degree of those given in the Placidus system"). Расхождение растёт с широтой и с |δ| куспида.
Преимущество: Topocentric не отказывает за полярным кругом, так как нет итерации и нет arcsin с аргументом >1. Поэтому его иногда используют как «полярный Placidus».
История
Wendel Polich (венгр, жил в Аргентине) и A. Page Nelson (англ., Аргентина), опубликовали в 1961–1964 (The Topocentric System of Houses). Возникла в Буэнос-Айресе. Авторы утверждали эмпирическое происхождение; математическая эквивалентность Placidus была показана позднее.
B.11. MERIDIAN / AXIAL ROTATION SYSTEM (код X)
Концепция
Делим небесный экватор на 12 дуг по 30° от RAMC, затем проецируем на эклиптику через часовые круги (полюсы мира). Отличие от Morinus: Morinus проецирует через полюсы эклиптики, Meridian — через полюсы мира.
Формулы (Swiss Ephemeris, дословно)
case 'X': /* Meridian houses ('axial rotation system') */
for (i = 1; i <= 12; i++) {
a = swe_degnorm(th + (i + 2) * 30.0);
tant = tand(a);
hsp->cusp[i] = atand(tant / cose);
if (a > 90 && a <= 270)
hsp->cusp[i] = swe_degnorm(hsp->cusp[i] + 180);
hsp->cusp[i] = swe_degnorm(hsp->cusp[i]);
}
Математически:
α_i = RAMC + 30°·(i + 2)
cusp_i = arctan( tan α_i / cos ε ) [с квадрантной коррекцией: если α_i ∈ (90°,270°] → +180°]
Эквивалентно Asc1(α_i, 0).
Свойства
cusp[10] = MC✓ (при i=10: α = RAMC + 360° = RAMC)cusp[1] = Asc1(RAMC + 90°, 0)= Equatorial Ascendant / East Point ✓- Не зависит от широты ⇒ работает на любой широте, включая полюса.
- Дома в эклиптических градусах не равны 30° (из-за проекции через cos ε), но равны 30° в прямом восхождении.
Соотношение с Morinus: обе системы делят экватор на 12×30° от RAMC; различие только в способе проекции (полюсы мира vs полюсы эклиптики). На практике различаются на несколько градусов.
История
Предложена австралийским астрологом David Cope (псевдоним Zariel) в начале XX в. Самая популярная система у школы Уранианской астрологии (Гамбургская школа) и у астрологов, работающих с Equatorial/Right-Ascension методами. Также известна как Zariel system, Equatorial system, Axial rotation system.
B.12. HORIZONTAL / AZIMUTHAL (код H)
Концепция
Делим горизонт на 12 дуг по 30° по азимуту, начиная от северной точки. Через точки деления и зенит/надир (полюсы горизонта) проводим вертикалы. Их пересечения с эклиптикой — куспиды.
То есть дома — просто азимутальные секторы. 1-й куспид на азимуте 180° (север... зависит от конвенции), 10-й — там, где азимут соответствует направлению на юг.
Формулы
Реализация Swiss Ephemeris применяет преобразование ко-широты и поворот на 180°:
case 'H': /* horizon houses */
for (i = 1; i <= 3; i++) {
if (fi >= 0) fh = 90 - fi;
else fh = -90 - fi;
hsp->cusp[i] = Asc1(th + 90 - 30 * i, fh, sine, cose);
}
for (i = 11; i <= 12; i++) {
...
hsp->cusp[i] = Asc1(th + 90 - 30 * i + 360, fh, sine, cose);
}
/* сдвиг на 180° и разворот, в зависимости от полушария */
Математически, куспид дома i соответствует азимуту A_i от южной точки горизонта:
Куспид i лежит на вертикале с азимутом A_i = 180° − 30°·(i − 1) (конвенция варьируется)
Для точки горизонта (h = 0) с азимутом A:
sin δ = −cos φ · cos A (h = 0)
tan H = sin A / ( cos A · sin φ ) (часовой угол)
α = RAMC + H
λ = проекция (α, δ) на эклиптику
Обобщённая форма через Asc1 с ко-широтой: используется f = 90° − φ, аргумент RAMC + 90° − 30°·i. Это структурно та же формула, что Vertex (который тоже использует ко-широту), обобщённая на 12 точек.
Свойства
- Определена везде, кроме буквально
φ = ±90°(на полюсе горизонт = экватор, азимут неопределён). - Оси:
cusp[1]— это направление на север (или юг), а не ASC. Углы карты не совпадают с ASC/MC. - Используется в мунданной астрологии, астрокартографии, и иногда — как «локальное пространство» (Local Space, Michael Erlewine) — хотя Local Space строго это другая техника (азимутальные линии планет, а не дома).
B.13. KRUSINSKI-PISA-GOELZER (код U)
Концепция
Строим вертикальный большой круг через ASC, Зенит, DSC и Надир. (Заметьте: это НЕ прайм-вертикал — прайм-вертикал проходит через восточную/западную точки горизонта, а этот круг — через сам Асцендент, который в общем случае не совпадает с восточной точкой.)
Делим этот круг на 12 равных дуг по 30°. 1-й куспид = ASC, 10-й куспид = Зенит. Через точки деления проводим меридианные круги (часовые круги) и проецируем на эклиптику.
Зенит (= cusp 10 на круге)
●
╱────┼────╲
● │ ● ← круг ASC–Zenith–DSC–Nadir,
ASC ●──────┼──────● DSC делённый на 12×30°
● │ ●
╲────┼────╱
Надир
Ключевое свойство: ASC = 1-й куспид точно, и «Зенит» играет роль 10-го. Astrodienst: "Ascendant and MC are identical with the 1st and 10th house cusps" — здесь MC понимается как проекция зенита.
Формулы (Swiss Ephemeris, дословно)
case 'U': /* Krusinski-Pisa-Goelzer */
/* заданы: raaz = RA of ascendant-zenith axis, oblaz = obliquity of that circle */
...
/* транформация в систему координат круга ASC-Zenith */
swe_cotrans(x, x, -eps);
xasc[0] = swe_degnorm(xasc[0] - raaz);
xtemp = atand(tand(xasc[0]) / cosd(oblaz));
...
Алгоритм полностью:
1. Вычислить ASC и Зенит.
2. Определить большой круг через ASC и Зенит:
- его наклон к эклиптике: oblaz
- долгота его восходящего узла на эклиптике: raaz
3. Перейти во вращённую систему, где этот круг — «экватор»:
x' = λ − raaz, затем поворот на oblaz
4. Куспиды в этой системе: u_i = 30°·(i − 1) от ASC
5. Обратное преобразование:
tan(x) = tan(u_i) / cos(oblaz) ← но с проекцией через ЧАСОВЫЕ круги
λ_i = x + raaz
Свойства
- Определена везде, включая полярные широты. Никогда не отказывает (кроме
φ = ±90°, где нет ASC). - Сохраняет и ASC, и MC как куспиды 1 и 10 (в отличие от Equal House).
- Это делает систему привлекательной альтернативой Placidus для полярных карт.
История
Уникальный случай тройного независимого открытия:
- Georg Goelzer (Швейцария), 1993 — первая публикация
- Milan Píša (Чехия), 1994 — под названием «Amphora»
- Bogdan Krusiński (Польша), 1995
Включена в Swiss Ephemeris в марте 2006 под именем «Krusinski houses»; впоследствии, когда выяснился приоритет, переименована в «Krusinski-Pisa-Goelzer». Ни Krusiński, ни Astrodienst изначально не знали о работах Pisa и Goelzer.
B.14. APC HOUSES (код Y)
Концепция
APC = Ascendant Parallel Circle. Дома строятся по кругам, параллельным Асценденту — то есть по малым кругам, параллельным большому кругу, определяемому Асцендентом.
Система делит дневную/ночную дугу асцендента подобно Alcabitius, но проецирует через другую конструкцию.
Формула (Swiss Ephemeris, дословно)
/* APC house calculation */
dret = atan2( tan(dasc) * tan(ph) * sin(az) + sin(a),
cos(e) * ( tan(dasc) * tan(ph) * cos(az) + cos(a) )
+ sin(e) * tan(ph) * sin(az - a) );
где:
dasc— склонение Асцендентаph— широта φ (в радианах)az,a— угловые параметры деленияe— наклон эклиптики ε
Математически:
tan δ_ASC · tan φ · sin(az) + sin(a)
λ = arctan2 ──────────────────────────────────────────────────────────────
cos ε·( tan δ_ASC · tan φ · cos(az) + cos a ) + sin ε · tan φ · sin(az − a)
Свойства
Работает за полярным кругом там, где Placidus и Koch отказывают. Относительно молодая и редко используемая система; включена в Swiss Ephemeris для полноты.
B.15. SRIPATI (код S) — индийская
Концепция
Sripati bhava — индийская квадрантная система, математически эквивалентная сдвинутому Porphyry.
Алгоритм: сначала вычисляются точки Porphyry (трисекция квадрантов между ASC, IC, DSC, MC). Затем эти точки становятся серединами домов (bhava madhya), а границы (bhava sandhi) — средние точки между соседними серединами.
Porphyry cusp → становится СЕРЕДИНОЙ дома (bhāva madhya)
Границы дома → середины между серединами (bhāva sandhi)
Результат: сдвиг на полдома относительно Porphyry
Формула
1. Вычислить Porphyry-куспиды: P₁..P₁₂
2. Sripati-границы: S_i = ( P_{i−1} + P_i ) / 2 (по кратчайшей дуге)
Swiss Ephemeris:
case 'S': /* Sripati houses */
goto porphyry; /* сначала Porphyry */
...
/* затем сдвиг: cusp[i] = среднее между porphyry[i-1] и porphyry[i] */
for (i = 1; i <= 12; i++) {
j = i + 1; if (j > 12) j = 1;
hsp->cusp[i] = swe_degnorm( hsp->cusp[i]
- swe_difdeg2n(hsp->cusp[j], hsp->cusp[i]) / 2 );
}
Точнее: S_i = P_i − (P_{i+1} − P_i)/2 (с нормализацией через swe_difdeg2n).
История
Названа в честь Śrīpati (श्रीपति, ок. 1039–1056 н.э.), индийского математика и астронома из Махараштры, автора Jyotiṣaratnamālā, Siddhāntaśekhara и Dhīkoṭidakaraṇa. Метод описан в его трудах. Одна из немногих индийских систем, реализованных в западном ПО.
B.16. EQUAL MC (код D) и VEHLOW (код V)
Equal MC / M-House (код D)
Концепция: как Equal House, но отсчёт от MC, а не от ASC. MC становится 10-м куспидом точно.
Формула:
cusp₁₀ = MC
cuspₙ = MC + 30°·(n − 10) mod 360
⇔ cusp₁ = MC + 90°
Код:
case 'D': /* equal, begin at MC */
hsp->cusp[10] = hsp->mc;
for (i = 11; i <= 12; i++)
hsp->cusp[i] = swe_degnorm(hsp->cusp[10] + (i - 10) * 30);
hsp->cusp[1] = swe_degnorm(hsp->cusp[10] + 90);
...
Здесь ASC не совпадает с 1-м куспидом.
Vehlow Equal (код V)
Концепция: Equal House, но ASC помещается в середину 1-го дома, а не на его куспид. Мотивация: Асцендент — точка максимальной силы, и естественнее считать её центром дома, а не границей.
Формула:
cusp₁ = ASC − 15°
cuspₙ = cusp₁ + 30°·(n − 1) mod 360
Код (дословно):
case 'V': /* equal, Vehlow */
hsp->cusp[1] = swe_degnorm(hsp->ac - 15);
for (i = 2; i <= 12; i++)
hsp->cusp[i] = swe_degnorm(hsp->cusp[1] + (i - 1) * 30);
История: Johannes Vehlow, немецкий астролог, Lehrkursus der wissenschaftlichen Geburtsastrologie (1930-е). Популярна в немецкоязычной традиции.
Equal / 1 = 0° Aries (код N)
case 'N': /* equal, 1 = Aries */
hsp->cusp[1] = 0;
for (i = 2; i <= 12; i++)
hsp->cusp[i] = 30.0 * (i - 1);
Дома тождественны знакам, начиная с 0° Овна. Используется для мунданных карт и как техническая опция (дома = знаки, независимо от времени).
B.17. SUNSHINE, PULLEN SD/SR, CARTER, NEO-PORPHYRY
Sunshine Houses (коды I — Treindl, i — Makransky)
Концепция: система, использующая склонение Солнца как опорную величину вместо склонения куспида. Идея: Placidus-подобная трисекция полудуг, но все полудуги вычисляются для склонения Солнца в момент рождения. Это делает систему определённой за полярным кругом (кроме случаев, когда само Солнце циркумполярно).
Формулы (Swiss Ephemeris — две реализации):
δ_☉ = склонение Солнца
SDA_☉ = arccos( −tan φ · tan δ_☉ )
sd₃ = SDA_☉ / 3, sn₃ = (180° − SDA_☉) / 3
cusp 11 = Asc1( RAMC + sd₃ ... ) /* с высотами полюса по типу Placidus */
Реализация 'I' (Alois Treindl) и 'i' (Michael Makransky) различаются трактовкой MC: Makransky-версия помещает MC иначе, применяя солнечные дуги для позиционирования кульминации. Оба варианта включены в Swiss Ephemeris для совместимости с разными публикациями.
Автор концепции: Michael Makransky, развита на основе идей Placidus. В Swiss Ephemeris — код Y в некоторых документациях, I/i в коде.
Pullen SD — Sinusoidal Delta (код L)
Концепция: квадранты делятся не равномерно (как Porphyry), а по синусоидальному закону приращения (delta). Мотивация: Porphyry даёт резкие «скачки» размеров домов при переходе между квадрантами; синусоидальное распределение сглаживает переходы.
Формула: пусть квадрант имеет длину Q, а средний размер дома Q/3. Приращение (delta) распределяется синусоидально:
размер дома_k = Q/3 + Δ · sin(...)
В коде Swiss Ephemeris — итеративное распределение с нормализацией, чтобы сумма трёх домов = Q.
Pullen SR — Sinusoidal Ratio (код Q)
Концепция: то же, но распределение по отношению (ratio), а не по разности. Требует решения кубического уравнения.
Формула (из кода):
ccr = pow(csq - c, third);
cqx = sqrt(two23 * ccr + 1.0);
r1 = 0.5 * cqx;
То есть решается кубическое уравнение r³ + ... = 0 методом Кардано, где r — коэффициент геометрической прогрессии размеров домов внутри квадранта. Три дома квадранта имеют размеры a, a·r, a·r² с условием a(1 + r + r²) = Q, и r определяется отношением соседних квадрантов.
Автор: Walter Pullen, автор бесплатной астрологической программы Astrolog. Обе системы описаны в документации Astrolog.
Carter Poli-Equatorial (код F)
Концепция: делим экватор на 12 дуг по 30°, но начиная от прямого восхождения Асцендента (а не от RAMC). Проецируем на эклиптику через часовые круги.
Формула (из кода):
case 'F': /* Carter poli-equatorial */
a = x[0]; /* rectascension of ascendant */
for (i = 1; i <= 12; i++) {
ra = swe_degnorm(a + (i - 1) * 30);
tant = tand(ra);
hsp->cusp[i] = atand(tant / cose);
if (ra > 90 && ra <= 270)
hsp->cusp[i] = swe_degnorm(hsp->cusp[i] + 180);
}
Математически:
α_ASC = arctan2( sin(ASC)·cos ε , cos(ASC) ) ← RA Асцендента
α_i = α_ASC + 30°·(i − 1)
cusp_i = Asc1( α_i , 0 ) = arctan( tan α_i / cos ε ) [+квадрант]
Свойства: cusp[1] = ASC точно ✓. cusp[10] ≠ MC в общем случае. Работает на любой широте.
История: Charles E. O. Carter (1887–1968), британский астролог, президент Astrological Lodge of the Theosophical Society, основатель Faculty of Astrological Studies. Описана в Essays on the Foundations of Astrology.
Neo-Porphyry
Концепция: вариант Porphyry, в котором вместо равного деления квадранта по долготе применяется деление, обеспечивающее плавность при переходе через углы. Как правило: размеры домов в квадранте пропорциональны не 1:1:1, а определяются сглаживающей функцией от размера соседних квадрантов. Часто реализуется как частный случай Pullen SD.
Автор: Walter Pullen формализовал; концептуально близка к «Dynamic Porphyry» и предложениям L. Edward Johndro.
B.18. GAUQUELIN SECTORS (код G) — 36 секторов
Концепция
Не система домов в классическом смысле, а статистический инструмент. Суточный путь планеты делится на 36 секторов, причём деление — по времени (аналогично Placidus), начиная от восхода.
Ключевая особенность: сектора нумеруются по часовой стрелке от Асцендента (в направлении суточного движения), а не против.
Сектор 1 начинается на ASC (восход)
Сектор 9/10 — около MC (кульминация)
Сектор 19 — около DSC (заход)
Сектор 28 — около IC
Плюс/интенсивность: Gauquelin обнаружил «эффект плюс-зон» — статистические пики в секторах 1–3 (сразу после восхода) и 9–12 (сразу после кульминации), названные «зоны Гоклена» (Gauquelin plus zones).
Формулы
Реализуются двумя способами (Swiss Ephemeris, swe_gauquelin_sector()):
Метод 1 — по эклиптической долготе (2D): деление аналогично Placidus, но на 36 частей вместо 12:
Для планеты с (α, δ):
SDA = arccos( −tan φ · tan δ )
SNA = 180° − SDA
H = α − RAMC (часовой угол, приведённый)
Если планета над горизонтом:
sector = 10 − 9 · ( H_от_MC / SDA ) /* пропорция полудуги */
Если под горизонтом:
sector = 28 − 9 · ( H_от_IC / SNA )
(точная нумерация зависит от конвенции; ключевое — пропорциональное деление полудуги на 9 частей, всего 36 секторов)
Метод 2 — по фактическому восходу/заходу (3D): swe_gauquelin_sector() с параметром imeth, вычисляющий реальные моменты восхода/захода планеты (с учётом её широты, диска, рефракции) и интерполирующий положение по времени между ними. Это более физически корректно и учитывает эклиптическую широту.
Swiss Ephemeris сигнатура:
int32 swe_gauquelin_sector(
double t_ut, int32 ipl, char *starname, int32 iflag,
int32 imeth, /* 0..5 — метод расчёта */
double *geopos, double atpress, double attemp,
double *dgsect, char *serr);
Возвращает dgsect — непрерывное дробное значение сектора от 1.0 до 37.0(=1.0).
Значения imeth:
- 0 — по долготе, центр планеты, без рефракции
- 1 — по долготе, с учётом восхода/захода
- 2 — по восходу/заходу центра диска
- 3 — по восходу/заходу с рефракцией
- 4, 5 — варианты с учётом верхнего края диска
Вырождение
За полярным кругом планеты могут не восходить/заходить ⇒ сектора не определены. Swiss Ephemeris возвращает ошибку или переключается на fallback.
История
Michel Gauquelin (1928–1991) и Françoise Gauquelin — французские психологи-статистики. С 1950-х проводили массовые статистические исследования положений планет в гороскопах выдающихся профессионалов. Обнаружили «Марс-эффект» (Mars effect): у чемпионов спорта Марс статистически чаще находится в секторах сразу после восхода и кульминации. Работа вызвала десятилетия споров (комитет CSICOP, Ertel, Müller). Секторное деление — их собственный методологический инструмент.
Suitbert Ertel позднее уточнил, предложив непрерывную «eminence»-шкалу вместо дискретных плюс-зон.
B.19. ИНДИЙСКАЯ / ВЕДИЧЕСКАЯ ТРАДИЦИЯ
Rāśi chart (раши-карта) — Whole Sign
Основная карта индийской астрологии — D-1 / Rāśi chart — построена по принципу Whole Sign: знак, содержащий лагну (Асцендент), есть 1-й дом целиком.
Lagna (ASC) = 17° Тельца
⇒ 1-й дом = весь Телец (0°–30°)
⇒ 2-й дом = Близнецы, и т.д.
Это прямое наследие эллинистической традиции (или общий индо-эллинистический источник).
Bhāva Chalit (भाव चलित) — «подвижные дома»
Bhāva Chalit — отдельная карта, где дома вычисляются квадрантно (обычно Sripati или Equal-from-lagna с bhava madhya), и потому планета может «сместиться» в другой дом относительно раши-карты.
Терминология:
- Bhāva madhya (भाव मध्य) — середина дома. В индийской традиции это точка максимальной силы дома, аналог «куспида» западной традиции. Лагна = bhāva madhya 1-го дома, а не его начало.
- Bhāva sandhi (भाव संधि) — стык, граница между домами. Средняя точка между двумя соседними bhāva madhya.
Западная конвенция: |—— cusp — дом — cusp ——|
начало конец
Индийская конвенция: |—sandhi— madhya —sandhi—|
(центр)
Это структурно тождественно Vehlow Equal (где ASC — середина 1-го дома), но применённое к квадрантному делению.
Sripati Bhāva
См. B.15. Формально: Porphyry-куспиды → bhāva madhya; sandhi = средние точки. Самая распространённая квадрантная система в джйотише.
Equal Bhāva (Sama Bhāva)
bhāva madhya₁ = Lagna
bhāva madhya_n = Lagna + 30°·(n − 1)
bhāva sandhi_n = bhāva madhya_n − 15°
Эквивалентна Vehlow Equal в западных терминах.
KP (Krishnamurti Paddhati) — использует Placidus
K. S. Krishnamurti (1908–1972) создал систему KP, ключевые особенности:
- Дома — строго Placidus (западная система, импортированная в джйотиш)
- Аянамша KP (≈ Lahiri минус небольшая поправка, ≈ 23°43' на 2000)
- Куспиды — начала домов (западная конвенция), НЕ середины
- Ключевая техника — sub-lord (деление накшатры-даши по пропорциям Вимшоттари на уровни: звезда → sub → sub-sub)
Это редкий случай гибрида: западная математика домов + индийская сидерическая система координат и даша-техники.
Сравнительная таблица индийских систем
| Система | Принцип | Куспид = |
|---|---|---|
| Rāśi (D-1) | Whole Sign | начало знака |
| Sama/Equal Bhāva | Equal от лагны | середина (madhya) |
| Sripati Bhāva | Porphyry сдвинутый | середина (madhya) |
| Bhāva Chalit | обычно Sripati | середина (madhya) |
| KP | Placidus | начало (западная конвенция) |
B.20. WHOLE SIGN vs EQUAL — ИСТОРИЧЕСКИЙ СПОР
Суть различия
ASC = 17°23' Тельца
WHOLE SIGN: EQUAL:
1 дом: 0°00' Телец 1 дом: 17°23' Телец
2 дом: 0°00' Близнецы 2 дом: 17°23' Близнецы
... ...
Планета в 5° Тельца Планета в 5° Тельца
→ 1-й дом → 12-й дом
Различие смещает планеты на целый дом почти в половине случаев.
Историческая позиция
Аргументы за Whole Sign (Robert Schmidt, Chris Brennan, Demetra George, Project Hindsight):
- Все ранние эллинистические тексты (Валент, Дорофей, Павел Александрийский, Фирмик, Реторий) используют «места» (τόποι, topoi) совпадающие со знаками. Текстологический анализ показывает, что термин «дом» (οἶκος, oikos) в эллинистике означал домицилий планеты (знак), а понятие «место» было отсчётом знаков от восходящего.
- Аспекты в эллинистической астрологии — по знакам (whole-sign aspects), а не по градусной орбе. Whole Sign делает дома и аспекты единой системой.
- Индийская традиция независимо сохранила Whole Sign до сегодняшнего дня, что свидетельствует об общем древнем источнике.
- Квадрантные системы (Porphyry) в эллинистике использовались параллельно, но для другой цели — определения силы планеты (dynamic strength), а не топического значения.
Аргументы за Equal (традиционная британская школа; Deborah Houlding занимает промежуточную позицию):
- Птолемей (Tetrabiblos III.11) при расчёте hyleg/aphetic places использует деление в 25°/5° от ASC — что предполагает градусную, а не знаковую логику.
- Равные дома сохраняют равенство при любой широте и при этом привязаны к точному градусу ASC, который является физически определённой точкой.
- Некоторые эллинистические источники (Реторий) допускают обе трактовки.
Позиция Deborah Houlding (The Houses: Temples of the Sky): исторически сосуществовали несколько подходов; whole sign доминировал для топических значений, а equal и quadrant — для оценки силы. Спор о «правильной» системе ложен, поскольку древние применяли их к разным задачам.
Позиция John Frawley (The Real Astrology, The Horary Textbook): для хорарной астрологии — Regiomontanus, как система европейской традиции XVI–XVII вв., в которой писали Лилли и Бонатти. Frawley резко критикует Placidus как историческую случайность («дешёвые таблицы Рафаэля»).
Позиция William Lilly (Christian Astrology, 1647): Regiomontanus.
Хронология использования
−100 … +700 Whole Sign доминирует (эллинистика, Индия)
Porphyry — для оценки силы
+800 … +1000 Арабы вводят Alcabitius; Whole Sign отступает
+1000 … +1450 Alcabitius доминирует в Европе
+1450 … +1650 Regiomontanus (Lilly, Bonatti-переводы, Morin)
+1650 … +1900 Placidus распространяется (Magini→Placido→Raphael)
+1900 … +1980 Placidus почти монопольно; Equal в Британии;
Koch в Германии; Campanus/Regiomontanus у меньшинств
+1980 … н.в. Возрождение Whole Sign (Project Hindsight, Brennan)
C. ПРАКТИЧЕСКАЯ ЧАСТЬ
C.1. Полная таблица кодов Swiss Ephemeris (hsys)
Из swehouse.c, функция swe_houses() / swe_house_name():
| Код | Система | Тип деления | Полярный круг |
|---|---|---|---|
A | Equal (от ASC) | эклиптика | OK |
B | Alcabitius | время (полудуга ASC) | отказ при циркумп. ASC |
C | Campanus | прайм-вертикал | OK |
D | Equal (от MC) / M-House | эклиптика | OK |
E | Equal (синоним A) | эклиптика | OK |
F | Carter poli-equatorial | экватор от RA(ASC) | OK |
G | Gauquelin sectors (36) | время | отказ |
H | Horizon / Azimuthal | горизонт | OK (кроме φ=±90°) |
I | Sunshine (Treindl) | время (склон. Солнца) | OK (если Солнце не циркумп.) |
i | Sunshine (Makransky) | время (склон. Солнца) | OK |
J | Savard-A | — | — |
K | Koch / GOH | время (полудуга MC) | отказ → Porphyry |
L | Pullen SD (sinusoidal delta) | эклиптика | OK |
M | Morinus | экватор (проекция ч/з полюс эклиптики) | OK везде |
N | Equal / 1 = 0° Aries | эклиптика | OK везде |
O | Porphyry | эклиптика (трисекция квадранта) | OK |
P | Placidus (по умолчанию) | время (полудуга куспида) | отказ → Porphyry |
Q | Pullen SR (sinusoidal ratio) | эклиптика | OK |
R | Regiomontanus | экватор (полюсы горизонта) | OK |
S | Sripati | эклиптика (Porphyry-сдвиг) | OK |
T | Topocentric (Polich-Page) | экватор (линейный полюс) | OK |
U | Krusinski-Pisa-Goelzer | круг ASC–Zenith | OK везде |
V | Equal Vehlow (ASC = середина 1 дома) | эклиптика | OK |
W | Whole Sign | знак | OK везде |
X | Meridian / Axial rotation | экватор (полюсы мира) | OK везде |
Y | APC houses | ASC-параллельные круги | OK |
Замечание о разночтении кодов: в некоторых версиях документации Astrodienst встречаются иные соответствия (например, B=APC, Y=Sunshine, X=Krusinski, U=Pullen, V=Vehlow). Актуальная истина — исходник swehouse.c текущей версии Swiss Ephemeris (таблица выше). Всегда проверяйте через swe_house_name(hsys) перед использованием.
Вызов API
int32 swe_houses(
double tjd_ut, /* JD в UT */
double geolat, /* географическая широта */
double geolon, /* географическая долгота */
int hsys, /* код системы (int, но передаётся char) */
double *cusps, /* [13] или [37] для Gauquelin */
double *ascmc); /* [10] — ASC, MC, ARMC, Vertex, EP, ... */
int32 swe_houses_ex(tjd_ut, iflag, geolat, geolon, hsys, cusps, ascmc);
int32 swe_houses_ex2(tjd_ut, iflag, geolat, geolon, hsys,
cusps, ascmc, cusp_speed, ascmc_speed, serr);
/* если ARMC уже известен (напр. для гипотетических карт) */
int32 swe_houses_armc(double armc, double geolat, double eps,
int hsys, double *cusps, double *ascmc);
int32 swe_houses_armc_ex2(armc, geolat, eps, hsys,
cusps, ascmc, cusp_speed, ascmc_speed, serr);
char *swe_house_name(int hsys); /* → "Placidus", "Koch/GOH", ... */
Возвращаемое значение: OK (0) или ERR (−1). При ERR с сообщением "within polar circle, switched to Porphyry" результат всё равно заполнен — но Porphyry-куспидами. Обрабатывайте это явно.
Размер массива: для hsys='G' (Gauquelin) cusps должен иметь 37 элементов, иначе — переполнение буфера.
C.2. Обработка полярных областей — полная стратегия
Иерархия отказов
φ = ±90° (полюс)
├── ASC не определён → Equal, Whole Sign, Vehlow, Porphyry, Campanus, Regio, Koch, Placidus ВСЕ падают
└── Работают ТОЛЬКО: Morinus (M), Meridian (X), Equal/Aries (N)
— они не используют широту вообще
|φ| > 90° − ε ≈ 66.56° (за полярным кругом)
├── Placidus (P) → ERR, fallback Porphyry
├── Koch (K) → ERR, fallback Porphyry
├── Gauquelin (G)→ ERR
├── Alcabitius (B) → ERR только если сам ASC циркумполярен
└── Остальные работают, но с искажениями
60° < |φ| < 66.5°
├── Все работают формально
└── Квадрантные системы дают чудовищно неравные дома:
один дом может занять 100°+, соседний — 3°
Явный код обработки в Swiss Ephemeris
if (fabs(fi) >= 90 - ekl) { /* within polar circle */
retc = ERR;
strcpy(hsp->serr, "within polar circle, switched to Porphyry");
goto porphyry;
}
И, для случая, когда MC уходит под горизонт:
/* We swap MC/IC so that MC is always before AC in the zodiac.
We then divide the quadrants into 3 equal parts, ie apply Porphyry.
When MC sinks below horizon: all cusps must be added 180 degrees,
and houses will be in clockwise direction. */
Псевдокод коррекции:
acmc = ASC − MC (по кратчайшей дуге, ∈ [−180°, 180°])
if acmc < 0:
ASC = ASC + 180° /* переворот */
acmc = ASC − MC
/* теперь acmc ∈ (0°, 180°), Porphyry корректен */
Рекомендации для полярных карт
| Ситуация | Рекомендуемая система |
|---|---|
| |φ| < 60° | любая |
| 60° < |φ| < 66.5° | Whole Sign, Equal, Porphyry, Topocentric, Krusinski |
| |φ| > 66.5° | Whole Sign, Equal, Krusinski (U), Meridian (X), Morinus (M) |
| |φ| ≈ 90° | только Morinus (M), Meridian (X), Equal/Aries (N) |
| нужен «полярный Placidus» | Topocentric (T) — ближайший аналог, не отказывает |
| нужны ASC и MC как куспиды | Krusinski (U) — единственная не-отказывающая |
Michael Wackford, «The Polar Horoscope» и «The Polar Arcs» (Skyscript) — исчерпывающий разбор поведения углов и дуг в полярных широтах.
C.3. Определение дома планеты
Наивный метод (2D, по долготе)
def house_of_2d(planet_lon, cusps):
"""cusps[1..12] — куспиды в порядке возрастания (mod 360)"""
for i in range(1, 13):
j = i % 12 + 1
lo, hi = cusps[i], cusps[j]
if lo <= hi:
if lo <= planet_lon < hi:
return i
else: # переход через 0°
if planet_lon >= lo or planet_lon < hi:
return i
return None
Работает для: Equal, Whole Sign, Vehlow, Porphyry, Sripati, Equal MC, Equal/Aries — систем, куспиды которых упорядочены по долготе.
Ломается для: Placidus, Koch, Campanus, Regiomontanus, Topocentric, Alcabitius — на высоких широтах куспиды могут выйти из порядка (cusp₁₂ может оказаться до cusp₁₁ по долготе). Тогда наивный алгоритм даёт мусор.
Проблема эклиптической широты (2D vs 3D)
Суть проблемы: куспид дома — это точка на эклиптике (β = 0). Но планета в общем случае имеет ненулевую эклиптическую широту β.
↑ β
│ ● Плутон (β = +17°) ← физически в 8-м доме
│ ╱
───┼────●──────────────────→ λ эклиптика (β=0)
│ проекция ← по долготе попадает в 9-й дом
│
cusp9
Куспидные плоскости (для Placidus — S-кривые, для Campanus — большие круги) — трёхмерные поверхности. Планета, лежащая вне эклиптики, может находиться по другую сторону куспидной поверхности, чем её эклиптическая проекция.
Величина эффекта:
- Луна (β до ±5.3°) — сдвиг до ~2° по долготе на средних широтах
- Плутон (β до ±17°) — сдвиг может достигать нескольких градусов, в редких случаях планета меняет дом
- Астероиды, кометы, транснептуны — эффект ещё сильнее
- Эффект максимален вблизи ASC/DSC и на высоких широтах
Skyscript: «The problem of latitude error arises precisely because the ecliptic degree position is shown in a 2-D house position, when the planet, lying off the ecliptic in 3-D, possibly occupies a neighbouring house.»
Правильный метод — swe_house_pos() (3D)
double swe_house_pos(
double armc, /* ARMC = RAMC */
double geolat, /* географическая широта */
double eps, /* наклон эклиптики */
int hsys, /* код системы */
double *xpin, /* xpin[0]=долгота планеты, xpin[1]=ШИРОТА планеты */
char *serr);
Возвращает: double в диапазоне [1.0, 13.0), где целая часть — номер дома, а дробная — позиция внутри дома (0.0 = на куспиде, 0.5 = в середине).
3.25 → 3-й дом, четверть пути от куспида 3
11.99 → 11-й дом, почти на куспиде 12
Ключевое: функция принимает и долготу, и широту планеты и решает задачу в 3D — находит, между какими куспидными поверхностями лежит планета.
Внутренняя логика (по типам систем):
- Placidus/Koch/Topocentric/Alcabitius (time-системы): вычисляется реальная полудуга планеты с её фактическим δ (не δ эклиптической проекции), затем определяется, какую долю полудуги она прошла:
δ_planet = arcsin( sin β · cos ε + cos β · sin ε · sin λ )
α_planet = arctan2( sin λ · cos ε − tan β · sin ε , cos λ )
H = α_planet − RAMC (часовой угол)
SDA = arccos( −tan φ · tan δ_planet )
позиция в доме = f( H / SDA )
- Campanus/Regiomontanus/Horizontal (space-системы): планета переводится в соответствующую систему координат (прайм-вертикал / экватор+полюсы горизонта / горизонт), и её угловая координата напрямую даёт номер дома:
Campanus: азимутальная координата на прайм-вертикале
Regio: прямое восхождение с высотой полюса
Horizontal: азимут
Для этих систем 3D-решение точное и аналитическое.
- Equal/Whole Sign/Porphyry: 3D не имеет смысла (куспиды определены по долготе), функция просто использует
xpin[0].
Пример использования:
double xp[6], hpos;
char serr[256];
/* получить положение планеты с широтой */
swe_calc_ut(tjd, SE_PLUTO, SEFLG_SWIEPH, xp, serr);
/* xp[0]=λ, xp[1]=β */
hpos = swe_house_pos(armc, geolat, eps, 'P', xp, serr);
printf("Плутон в доме %d (позиция %.3f)\n", (int)hpos, hpos - (int)hpos);
Для сравнения 2D: передать xpin[1] = 0.0 — получим наивный результат.
Gauquelin sector position
int32 swe_gauquelin_sector(
double t_ut, int32 ipl, char *starname, int32 iflag,
int32 imeth, double *geopos,
double atpress, double attemp,
double *dgsect, char *serr);
Возвращает dgsect ∈ [1.0, 37.0) — непрерывную позицию в 36-секторной шкале.
Практические рекомендации
| Задача | Метод |
|---|---|
| Solar/lunar chart, Equal/WS | 2D достаточно |
| Placidus + планета близко к куспиду | обязательно 3D (swe_house_pos) |
| Плутон, астероиды, TNO | всегда 3D |
| Высокая широта (>50°) | всегда 3D |
| Исследования Gauquelin | swe_gauquelin_sector с imeth ≥ 2 |
| Сравнение систем | считать все и сравнивать через swe_house_pos |
D. СВОДНАЯ ТАБЛИЦА: ЧТО ДЕЛИТСЯ И КАК
| Система | Делимый круг/величина | Проекция на эклиптику через | Формула куспида (обобщённая) | ASC=1? | MC=10? | Полярный отказ |
|---|---|---|---|---|---|---|
| Placidus | полудуга каждой точки (время) | S-curve | итерация f = arctan(sin(arcsin(tanφ·tanδ)/k)/tanδ) | ✓ | ✓ | да |
| Koch | полудуга градуса MC (время) | горизонты разных моментов | Asc1(RAMC+30k∓m·AD₃, φ) | ✓ | ✓ | да |
| Alcabitius | полудуга ASC (время) | часовые круги | Asc1(RAMC±k·SDA/3, 0) | ✓ | ✓ | частично |
| Topocentric | — (эмпирич./≈Placidus) | «конусы» | Asc1(RAMC+30k, arctan(k·tanφ/3)) | ✓ | ✓ | нет |
| Regiomontanus | экватор (30°) | полюсы горизонта | Asc1(RAMC+30k, arctan(tanφ·sin30k)) | ✓ | ✓ | нет |
| Campanus | прайм-вертикал (30°) | N/S точки горизонта | Asc1(RAMC+90±x, arcsin(sinφ·cosA)) | ✓ | ✓ | нет |
| Horizontal | горизонт (30° азимута) | зенит/надир | Asc1(RAMC+90−30i, 90°−φ) | ✗ | ✗ | нет |
| Meridian | экватор (30°) | полюсы мира | arctan(tan(RAMC+30k)/cos ε) | ✗ (=EP) | ✓ | нет, везде |
| Morinus | экватор (30°) | полюсы эклиптики | cotrans(RAMC+30k, −ε) | ✗ (=EP) | ✗ | нет, везде |
| Carter | экватор от α(ASC) | полюсы мира | arctan(tan(α_ASC+30k)/cos ε) | ✓ | ✗ | нет |
| Krusinski | круг ASC–Зенит (30°) | часовые круги | вращённая система координат | ✓ | ✓ | нет |
| APC | ASC-параллельные круги | — | arctan2(...) (см. B.14) | ✓ | ✓ | нет |
| Porphyry | эклиптика (квадрант/3) | — | MC + kQ/3 | ✓ | ✓ | нет |
| Sripati | Porphyry, сдвинутый | — | (P_i + P_{i+1})/2 | ~ | ~ | нет |
| Pullen SD | эклиптика, синусоид. Δ | — | Q/3 + Δsin(...) | ✓ | ✓ | нет |
| Pullen SR | эклиптика, геом. прогрессия | — | кубическое ур-ние Кардано | ✓ | ✓ | нет |
| Equal | эклиптика (30° от ASC) | — | ASC + 30(n−1) | ✓ | ✗ | нет |
| Equal MC | эклиптика (30° от MC) | — | MC + 30(n−10) | ✗ | ✓ | нет |
| Vehlow | эклиптика (ASC в центре) | — | ASC − 15 + 30(n−1) | ~ | ✗ | нет |
| Whole Sign | знаки | — | 30·floor(ASC/30) + 30(n−1) | ~ | ✗ | нет, везде |
| Equal/Aries | знаки от 0° Овна | — | 30(n−1) | ✗ | ✗ | нет, везде |
| Sunshine | полудуга Солнца | — | по δ_☉ | ✓ | ✓ | частично |
| Gauquelin | полудуга / 9 (36 секторов) | — | f(H/SDA) | — | — | да |
Легенда: ✓ = совпадает точно; ✗ = не совпадает; ~ = ASC внутри 1-го дома, но не на куспиде.
E. ПРОВЕРОЧНЫЙ КОД (референсная реализация)
from math import sin, cos, tan, asin, acos, atan, atan2, radians, degrees, fmod
def d2r(x): return radians(x)
def r2d(x): return degrees(x)
def norm360(x): return fmod(fmod(x, 360.0) + 360.0, 360.0)
def asc1(x, f, eps):
"""Обобщённая функция Swiss Ephemeris: Asc1(равноточка x, высота полюса f)."""
x = norm360(x)
n = (x // 90) % 4 # квадрант
ass = -tan(d2r(f))*sin(d2r(eps)) + cos(d2r(eps))*cos(d2r(x))
sinx = sin(d2r(x))
if abs(ass) < 1e-12: ass = 1e-12 if sinx >= 0 else -1e-12
res = r2d(atan(sinx / ass))
if res < 0: res += 180.0
# приведение к правильному квадранту относительно x
if sinx < 0: res += 180.0
return norm360(res)
def mc(ramc, eps):
v = r2d(atan(tan(d2r(ramc)) / cos(d2r(eps))))
if 90 < ramc <= 270: v += 180
return norm360(v)
def ascendant(ramc, phi, eps):
return asc1(ramc + 90.0, phi, eps)
def vertex(ramc, phi, eps):
f = 90.0 - phi if phi >= 0 else -90.0 - phi
return asc1(ramc - 90.0, f, eps)
def east_point(ramc, eps):
return asc1(ramc + 90.0, 0.0, eps)
def regiomontanus(ramc, phi, eps):
tf = tan(d2r(phi))
f11 = r2d(atan(tf * 0.5))
f12 = r2d(atan(tf * cos(d2r(30))))
c = [0]*13
c[10] = mc(ramc, eps); c[1] = ascendant(ramc, phi, eps)
c[11] = asc1(ramc + 30, f11, eps)
c[12] = asc1(ramc + 60, f12, eps)
c[2] = asc1(ramc + 120, f12, eps)
c[3] = asc1(ramc + 150, f11, eps)
for i in range(4, 10): c[i] = norm360(c[i-3+0] ) # заполнить оппозициями
for i in range(1, 7): c[i+6] = norm360(c[i] + 180)
return c
def topocentric(ramc, phi, eps):
tf = tan(d2r(phi))
f11 = r2d(atan(tf / 3.0))
f12 = r2d(atan(tf * 2.0 / 3.0))
c = [0]*13
c[10] = mc(ramc, eps); c[1] = ascendant(ramc, phi, eps)
c[11] = asc1(ramc + 30, f11, eps)
c[12] = asc1(ramc + 60, f12, eps)
c[2] = asc1(ramc + 120, f12, eps)
c[3] = asc1(ramc + 150, f11, eps)
for i in range(1, 7): c[i+6] = norm360(c[i] + 180)
return c
def placidus_cusp(ramc, phi, eps, rect_offset, fac, max_iter=100, tol=1e-9):
"""rect_offset: 30 (c11), 60 (c12), 120 (c2), 150 (c3)
fac: 3 для 1/3 дуги, 1.5 для 2/3"""
rectasc = norm360(ramc + rect_offset)
tanfi = tan(d2r(phi)); tane = tan(d2r(eps)); sine = sin(d2r(eps))
# начальное приближение
a = r2d(asin(tanfi * tane))
f = r2d(atan(sin(d2r(a / fac)) / tane))
lam = asc1(rectasc, f, eps)
for _ in range(max_iter):
dec = r2d(asin(sine * sin(d2r(lam))))
t = tan(d2r(dec))
if abs(t) < 1e-12: break
arg = tanfi * t
if abs(arg) > 1.0:
raise ValueError("circumpolar — Placidus undefined (polar circle)")
f = r2d(atan(sin(d2r(r2d(asin(arg)) / fac)) / t))
new = asc1(rectasc, f, eps)
if abs(new - lam) < tol: lam = new; break
lam = new
return lam
ИСТОЧНИКИ
- Swiss Ephemeris — General Documentation (astro.com)
- Swiss Ephemeris Programmer's Documentation (swephprg.htm)
- swehouse.c — исходный код Swiss Ephemeris (GitHub, aloistr/swisseph)
- Wikipedia — House (astrology)
- Wikipedia — Equatorial ascendant
- Alexey Borealis — Calculating Placidus house cusps
- Michael Wackford — Placido & the Semi-Arc Method of House Division (Skyscript)
- Michael Wackford — The Polar Horoscope (Skyscript)
- Michael Wackford — The Polar Arcs (Skyscript)
- Astrodienst — Krusinski-Pisa-Goelzer house system
- Astrodienst — House systems overview
- Anthony Louis — How do Alcabitius and Placidus Houses Differ?
- Skyscript Forum — 3D Houses: the most accurate method of house placement?
- pyswisseph docs — astrological house systems
- Astrolearn — Astrological Houses and Angles, House Division Cusps
Примечание для реализации: единственный надёжный источник истины по кодам hsys — функция swe_house_name() конкретной версии библиотеки. Документация Astrodienst и исходный код исторически расходились по буквам B/Y/U/V/X. Всегда валидируйте коды программно перед релизом.