Как работать со швейцарскими эфемеридами в Microsoft Office Excel
Мало кому известно, но швейцарские
эфемериды можно подключить к Excel и проводить астрономические/астрологические расщеты любой сложности прямо на рабочем листе.
Прежде всего эта информация пригодиться, если вы занимаетесь астрологическими исследованиями или желаете провести какие-то нестандартные расщеты, которые не получается сделать в стандартных астрологических программах.
Если вы умеете немного праграммировать на Visual Basic, то в сочетании со математическими/статистическими возможностями в Exel и возможностью создавать макросы, - перед вами откроются безграничные возможности в моделировании експериментов, которые не может дать ни одна астрологическая/математичекая программа.
Но даже без знания Visual Basic можно сделать очень многое!!!
И так начнем с основ.
Для начала нам нужно будет подключить сами эфемериды к книге.
Т.е. задекларировать основные функции швейцарских эфемерид в рабочей книге и установить библиотеку швейцарских эфемерид.
Для этого:
1. Скопируйте файл: "swedll32.dll" в папку c:/windows/System32.
Этот файл входит в комплект постави многих астрологических программ, на пример ZET , но если его у вас нет, скачать его (вместе с документацией на английском языке, исходниками и др. полезностями) можно по ссылке: (4 MB).
2. Теперь идем в Exel. Создаем новый документ.
Далее заходим: Меню "Сервис" -> "Макросы" -> "Редактор Visual basic".
Находим надпись "книга1.xls" (Если вы назвали документ по другому, то ваше название), и кликаем правой кнопкой мыши, выбираем "insert"->"module" emph.gif
и вставляем в появившеся окне следующий текст (єто основные деклорации функций):
Продолжение в следующем посте....
Последний раз редактировалось LordWilex, 24.06.2008 в 02:05.
Ксожалению не поместилось в пост....
Короче, тогда просто вставляем содержимое этого файла в окно: SweDecl.zip
И так, основа у нас теперь есть, но с в таком виде с большинством функций работать очень сложно, поэтому добавим в конец следующий текст:
Function jday(year As Integer, month As Integer, day As Integer, hour As Integer, _
min As Integer, sec As Double, Optional greg) As Double
' returns julian day number given date in gregorian calender (greg=1)
' or julian calendar (greg = 0). If greg ommited, then Gregorian is assumed.
Dim a As Double
Dim b As Integer
a = 10000# * year + 100# * month + day
If (a < -47120101) Then MsgBox "Warning: date too early for algorithm"
If (IsMissing(greg)) Then greg = 1
If (month <= 2) Then
month = month + 12
year = year - 1
End If
If (greg = 0) Then
b = -2 + Fix((year + 4716) / 4) - 1179
Else
b = Fix(year / 400) - Fix(year / 100) + Fix(year / 4)
End If
a = 365# * year + 1720996.5
jday = a + b + Fix(30.6001 * (month + 1)) + day + (hour + min / 60 + sec / 3600) / 24
End Function
Public Function Plc(ByVal JD As Double, ByVal pl As Variant, Optional ByVal CType, Optional ByVal XPos) As Double
Dim x(6) As Double
Dim cusp(13) As Double
Dim ascmc(10) As Double
swe_set_ephe_path ("D:\SWESEMPHES")
iflag = SEFLG_SPEED + SEFLG_MOSEPH
If pl > 99990 And pl < 100018 Then
asss = swe_houses_ex(JD, iflag, CType, XPos, asc("P"), cusp(0), ascmc(0))
csp = pl - 99990
Plc = cusp(csp)
Call swe_close
Exit Function
End If
If CType = "Def" Then iflag = SEFLG_SPEED + SEFLG_MOSEPH
If CType = "STrop" Then iflag = SEFLG_TRUEPOS + SEFLG_SWIEPH
If CType = "SSid" Then iflag = SEFLG_SIDEREAL + SEFLG_SWIEPH
If CType = "SHel" Then iflag = SEFLG_HELCTR + SEFLG_SWIEPH
If CType = "SXYZ" Then iflag = SEFLG_XYZ + SEFLG_SWIEPH
If CType = "SRad" Then iflag = SEFLG_RADIANS + SEFLG_SWIEPH
If CType = "MTrop" Then iflag = SEFLG_TRUEPOS + SEFLG_MOSEPH
If CType = "MSid" Then iflag = SEFLG_SIDEREAL + SEFLG_MOSEPH
If CType = "MHel" Then iflag = SEFLG_HELCTR + SEFLG_MOSEPH
If CType = "MXYZ" Then iflag = SEFLG_XYZ + SEFLG_MOSEPH
If CType = "MRad" Then iflag = SEFLG_RADIANS + SEFLG_MOSEPH
If XPos = 1 Or XPos = "Lat" Then Plc = x(1)
If XPos = 2 Or XPos = "Lon" Then Plc = x(2)
If XPos = 3 Or XPos = "Dis" Then Plc = x(3)
If XPos = 4 Or XPos = "SpdLat" Then Plc = x(4)
If XPos = 5 Or XPos = "SpdLon" Then Plc = x(5)
If XPos = 6 Or XPos = "SpdDis" Then Plc = x(6)
If XPos = 7 Or XPos = "Er" Then Plc = serr$
DoEvents
End Function
Public Function ASPECT(x, y)
ASPECT = Abs(swe_difdeg2n(x, y))
End Function
Public Function ASPECT2(x, y)
ASPECT2 = swe_difdeg2n(x, y)
End Function
Это основной "джентльменский" набор функций, другие функции мы будем добавлять сюда же..
Внимание!!! Не забудьте заменить D:\SWESEMPHES на путь к файлам со швейцарскими эфемеридами на вашем компьютере, иначе почти ни чего работать не будет!!!
Сами файлы эфемерид, если у вас их нет, - можно скачать здесь: .
И так, сохраняем и теперь мы можем работать с эфемеридами прямо на рабочем листе.
Продолжение следует
Последний раз редактировалось LordWilex, 24.06.2008 в 02:17.
Ура!!! Теперь мы можем начать работать, давайте попробуем вычислить тропическую долготу Солнца на 10 авнуста 1980 года в 13:58:40 GMT.
Для начала нам все же понадобиться определить юлианскую дату, на это время (к сожаления все функции работают только с юлианскими датами).
Для этого либо нажимаем кнопку Fx на панели инструментов, либо заходим в меню "вставка" -> "функция", и в, появившеся окне выбираем категирию "определенные пользователем", дальще ищем функуцию "jday" и выбираем её.
Параметр pl - это номер планеты в системе швейцарских эфемерид.
Параметр JD - это юлианская дата
Параметр CType - это выбор зодиака (STrop - трапический, SSid Сидерический). Буква S в начале означает швейцарские эфемериды, а T - эфемериды Мошьера (TTrop), которые тоже включены в файл swedll32.dll.
Параметр XPos - это выбор координаты (на пример 0 это долгота, 1 Широта, можно на пример получить XYZ координаты и т.д. )
Короче нажимаем ОК и получаем результат.
И так 10-8-1980 в 13:58:40 GMT Долгота Солнца была 138,0711226 (или 18-й градус льва).
Спасибо, очень рад, что єта технология пригодиться не только мне
Прежде чем продолжать, хотелось бы по подробней раскрыть некоторые неясные моменты из прошлых постов, в основном это касается функции plc.
1. Параметр CType, это выбор системы зодиака, а так же вида эфемерид. Первая буква в параметре, как я уже сказал, указывает тип эфемерид.
S - Швейцарские эфемериды, - более точные, но требуют помимо библиотеки swedll32.dll присутствия на компьютере самих файлов эфемерид (хотя ты бы файлов: sepl_18.se1, semo_18.se1, seas_18.se1). Их сточность сопоставима с точностью эфемерид DE405/DE406, поэтому их вполне можно использовать и для научных целей.
M - Эфемериды Мошьера. Встроены в файл swedll32.dll, поэтому ни чего дополнительного для работы с ними скачивать не нужно (к астероидам это утверждение не относится). Являются апроксимацией эфемериды DE404. Но во первых они не так точны, как швейцарские эфемериды, и для кретичных к точности научных задач, обычно не подходят. Во вторых работают они медленей швейцарских эфемерид, а при большом объеме вычислений это может отнять у вас лишних пару дней. Но для практических задачь очень даже подойдут. Единственный существнный +, - это небольшой размер.
Пример использования:
STrop - тропический задиак по швейцарским эфемеридам.
MTrop - Тропический зодиак, Эфемериды Мошьера.
*****
SSid (MSid) - Вернуть координаты планеты в сидерическом зодиаке
SHel (MHel) - Вернуть координаты планеты в гелиоцентре
SXYZ (MXYZ) - Вернуть XYZ координаты (используется в астрономии)
SRad (MRad) - Вернуть координаты в радианах
2. Параметр pl - номер планеты в системе швейцарских эфемерид (координаты планет вычисляются аналогично солнцу в предыдущем посте, только 0 нужно заменить на номер планеты).
**** (Система Луна-Земля)
10 - Средний Восх. узел
11 - Истинный Восх. узел
12 - Средний апогей Луны (Лилит)
13 - Истиный апогей Луны
14 - Земля (в любом случае, результат в гелиоцентре).
*** (Основные астероиды. Эти астероиды включены в стандартный файл seas_18.se1)
15 - Хирон
16 - Фол
17 - Церара
18 - Плалада
19 - Юнона
20 - Веста
****
21 - INTP APOG (не знаю, что это такое, очевидно какой-то апогей...)
23 - INTP PERG (тоже не знаю, но явно перегей какой-то)
**** (Другие фиктивные планеты)
48 - Изида
49 - Нибиру (? В англиской транскрипции: Nibiru, Очевидно один из результатов "вычисления" 10-й планеты Солнечной системы).
50 - Харингтон (то же самое)
51 - Нептун Леверьера
52 - Нептун Адамса
53 - Плутон Лоуэла
54 - Плутон Пикеринга
*****
Так же, имеется возможность добавлять орбитальные элементы других фиктивных плапнет (как для земной орбиты, так и для солнечной), записав их в специальный файл.
Кстати, нам ни чего не мешает записать туда же и орбитальные элементы астероидов, если нет желания скачивать его эфемериды, правда точность таких координат астероида будет весьма сомнительна.
**** Особенности работы с астероидами. Номера астероидов.
Для того, чтобы вычислить астероид нужно:
а). Закачать файл с эфемиридами астероида (на сегоднешний момент на сайте швейцарских эфемерид их доступно уже десятки, если не сотни тысяч)и положить его в папку с эфемеридами.
б). Прибавить к номеру астероида 10000, а дальше, вставляем в функцию и вычисляем, как и все остальные планеты.
На пример, если вам нужно вычислить астероид Урания (Urania) порядковый № которого 30, мы:
- Скачиваем файл se00030s.se1, и кладем его в папку с эфемеридами.
- Прибавляем к 10000 № астероида. 10000 + 30 = 10030 , - это и будет номер, который мы подставляем в функцию plc
**** Особенности работы с домами.
Так же при помощи этой функции можно вычислить координаты начала домов в системе Плацидуса.
Для этого нужно к номеру дома прибавить 99990 и подствавить это число в функцию plc вместо планеты.
На пример:
Асцендент = 99990 +1 = 99991
II дом = 99990 + 2 = 99992
и т.д...
К сожалению, этот алгоритм писался мной для личных целей, а я работаю только с плацидусом или равнодомной системой, поэтому работа с домами плохо продуманна... вообще-то тут есть возможность работать не меньше, чем с десятком систем....
Вобщем, в следуюущий раз что-нить придумаем, чтобы обойти это и посветим следующий пост работе с домами.
******
P.S. Кстати, забыл упамянуть еще об одной вещи. Наверное будет не очень удобно каждый раз, когда создаешь документ, вставлять в него код с функциями , да и не нужно
Просто создаем пустой документ, вставяем в него функции, как было описанно в начале, а потом просто сохраняем как, "Надстройка Exel" (файл с расширением .xla), на прмер, swe.xla
Потом все закрываем. Входим в меню "Сервис" - > "Надстройки" -> "Обзор" и подключаем наш файл. После этого все функции швейцарских эфемерид будут доступны в любом документе exel, на вашем компьютере.
Здесь положил , выложенную на ныне покойном suastroclub.narod.ru, там хороший пример.
Сегодня уже не так актуальна тема, поскольку MSO и Excel в том числе, как мы недавно узнали, стоит денег, причём больших, за которые вполне можно купить полноценный астропроцессор.
Лично у меня ни на рабочей, ни на домашней машине офиса нет.
Вот если бы были примеры реализации работы swedll32.dll совместно с Openoffice.org, в частности Calc, то были бы и мои "респект и уважуха".
Так же при помощи этой функции можно вычислить координаты начала домов в системе Плацидуса.
Для этого нужно к номеру дома прибавить 99990 и подствавить это число в функцию plc вместо планеты.
На пример:
Асцендент = 99990 +1 = 99991
У меня почему-то смещение на +1. Т.е. для МС нужно поставить не +10, а +11.
Да, еще вопрос. Каким образом функция Plc может расчитывать куспиды домов, если не задаются географические координаты? А если расчитывает, то на какое место?
Здесь положил работу Алексея Богдановского, выложенную на ныне покойном suastroclub.narod.ru, там хороший пример.
Спосибо! Не встречал этот пример. Эти функции можно использовать вместе с другими и расширить возможности!
Цитата:
Сообщение от DoReMi
Сегодня уже не так актуальна тема, поскольку MSO и Excel в том числе, как мы недавно узнали, стоит денег, причём больших, за которые вполне можно купить полноценный астропроцессор.
Лично у меня ни на рабочей, ни на домашней машине офиса нет.
Вот если бы были примеры реализации работы swedll32.dll совместно с Openoffice.org, в частности Calc, то были бы и мои "респект и уважуха"
Не согласен, во первых астрологические процессоры, - это астрологиеские процессоры.
Не смотря на то, что сейчас в них очень много возможностей, - ориентированны они на стандартные задачи... и очень трудно приспособить их под что-то свое...
На пример, со статистикой в них особо не разгуляешься..
А матаматические/статистические программы, - это совсем другое, но к сожалению, астрологическими функциями они пока особо не наделены :))))
Я уверен, что сейчас есть много астрологов, которые хотели БЫ и могли БЫ заняься исследованиями, но не могут реализовать свои идеи только из-за того, что отсутствуют гибкие средства для работы с астрологической статистикой, а программировать что-то свое они не умеют...
По крайней мере, пока не созданно ни чего лучшего, думаю, самый лучший путь это интегрировать эфемериды в стандартные математические программы.
Думаю exel сейчас есть не меньше, чем на 90% компютеров (а может и больше), и эта программа обладает всеми возможностями для статистической обработки данных, а швейцарсикие эфемериды бесплатны (если не закрывать исходный код и не использовать их в коммерческих целях) и в том или ином виде присутствуют на компьютерах большинства астрологов.
К тому же, в таком виде (ШЭ + Exel), - это очень гибкое решение, можно до бесконечности наращивать возможности, добавлая новые функции/макросы...
Поверьте мне, в этой связке можно реализовать любую идею, просто немного нужно "набить руку".
К сожалению, у меня нет Openoffice.org, но на сколько я помню, там в качесте языка макросов используется один из вариантов Basic'a, который кажется даже совместим с VB, так что думаю достаточно в функции внести небольшие коррективы и они прекрасно заработают и на вашей платформе.
У меня был еще опыт интеграции швейцарских эфемерид в MathCad, но там на много сложней, нужно писать библиотеки-переходники на С++, так что пока реализованны только расщеты самих координат планет, но зато остальные функции (типа аспектов) можно определить на самом рабочем листе в виде формул и функций.
Вот закончу с exel'ю займусь выкладыванием MathCad'овских функций :)))
Цитата:
Сообщение от Алексей
У меня почему-то смещение на +1. Т.е. для МС нужно поставить не +10, а +11.
Использую эту функцию для своих расчетов. :)
Цитата:
Сообщение от Алексей
Да, еще вопрос. Каким образом функция Plc может расчитывать куспиды домов, если не задаются географические координаты? А если расчитывает, то на какое место?
Это моя вина, возможно ошибка из-за того, что я забыл сказать, как указывать широту и долготу в этой функции.
Вместо типа зодиака в CType нужно прописать географическую широту.
А вместо XPos нужно указать долготу
(результат выдается в тропическом зодиаке).
Plc(Юлианская дата; 99990 + номер дома; Широта; Долгота)
Впрочем, работа с домами в этой функции действительно получилась корявая :)))
Сегодня я напишу ддругую, более подходящую для этих целей и более понятную функцию )))
P.S. Забыл про минуты.
Широту и долготу в этой функции нужно вводить одним десятичным числом.
т.е. если широта 47 градусов 12 минут
мы делаем так:
1/60*минуты+градусы
в данном случае широта в десятичном формате: 1/60*12+47=47,2
Впрочем, это будет не нужно, когда будет готова отдельная функция для домов ))