Определение скорости куспидов домов с функцией swe_houses_ex2
Всем привет! Помогите, пожалуйста, неопытному пользователю ШЭ заставить работать функцию swe_houses_ex2 в Excel с целью получения скорости куспидов домов. Не пойму, в чем проблема...выдает #ЗНАЧ! и все тут! Спасибо большое!
Public Function Swe_houses_Speed_calc(Year, Month, Day, hour, min, sec, geolat, geolon, ihsy, house) As Double
Dim tjd_ut As Double
Dim iflag As Long
Dim dret(10) As Double
Dim serr As String
Dim hcusps(13) As Double 'Array of 13 doubles that holds house cusps as described in Swiss Ephemeris Programmer's Manual
Dim cusp_speed(13) As Double 'Array of 13 doubles that holds house cusps as described in Swiss Ephemeris Programmer's Manual
Dim ascmc(10) As Double
Dim ascmc_speed(10) As Double
house = house + 1
iflag = 0
swe_set_ephe_path ("E:\Ephemeris\Swiss Ephemeris\SWEPH\EPHE") ' Set the directory path of the ephemeris files
'swe_utc_to_jd выдает
'tjd_et = dret[0]; /* this is ET (TT) */
'tjd_ut = dret[1]; /* this is UT (UT1) */
Всем привет! Помогите, пожалуйста, неопытному пользователю ШЭ заставить работать функцию swe_houses_ex2 в Excel с целью получения скорости куспидов домов. Не пойму, в чем проблема...выдает #ЗНАЧ!
А попроще функции работают у вас? Какая-нибудь swe_degnorm(), преобразует число градусов более 360 в интервал 0..360.
Боюсь, что тоже не работают.
Насколько мне память не изменяет, когда передаёте массивы, надо передавать первый элемент массива, а не второй (а элементы нумеруются начиная с нуля), посмотрите в примере на первой странице этой темы:
Поскольку раз в год кто-то появляется с вопросом, "просто оставлю это здесь". Нашёл версию 1.2 автора темы от 2009 года, добавил свежие последние dll (32 и 64) в архив, добавил файлы BAS и XLT в которых заменил объявления функций на 64-битный вариант, предыдущие там на месте, как и остальные файлы.
Я протестировал работу в 64-битном Excel, cо swedll64.dll и исправленным кодом - у меня работает, но всё подряд не проверял.
Допускаю, что какие-то функции не работают, но я при возможности готов посмотреть и исправить проблему (только для x64 версии офиса и эфемерид).
Кто хочет пробовать впервые - читайте документацию в архиве. Самое главное - скопировать файлы swedll*.dll в доступное системе место, а также если пользуетесь файлами эфемерид - укажите к ним путь в строке
Код:
Call swe_set_ephe_path("c:\sweph\")
Для новых версий Excel поищите как включается в настройках ленты пункт "Разработчик".
Проще функции работают. И swe_degnorm(), и swe_utc_to_jd(), swe_calc(), swe_houses() - работают норм. Причем параметры для работающей swe_houses() и неработающей swe_houses_ex2() в основном совпадают. ОТличие только в том, что в swe_houses_ex2() передаются еще cusp_speed(0), ascmc_speed(0).
Массивы передала первым элементом - элемент 0. Все равно swe_houses_ex2() не работает(
Люди, есть у кого-нибудь работающая swe_houses_ex2()? Поделитесь, пожалуйста!
Цитата:
Сообщение от DoReMi
А попроще функции работают у вас? Какая-нибудь swe_degnorm(), преобразует число градусов более 360 в интервал 0..360.
Боюсь, что тоже не работают.
Насколько мне память не изменяет, когда передаёте массивы, надо передавать первый элемент массива, а не второй (а элементы нумеруются начиная с нуля), посмотрите в примере на первой странице этой темы:
Доброго астрологического времени всем!
Возник вопрос, а можно ли реализовать на основе щейцарских эфемерид системы отсчета типа юпитеро-центрической и сатурно-центрической?
Интересно посмотреть будет всем, кто интересуется мунданной астрологией...
Доброго астрологического времени всем!
Возник вопрос, а можно ли реализовать на основе щейцарских эфемерид системы отсчета типа юпитеро-центрической и сатурно-центрической?
Интересно посмотреть будет всем, кто интересуется мунданной астрологией...
Доброго астрологического времени всем!
Возник вопрос, а можно ли реализовать на основе щейцарских эфемерид системы отсчета типа юпитеро-центрической и сатурно-центрической?
Интересно посмотреть будет всем, кто интересуется мунданной астрологией...
функция для расчета в документации имеется
Цитата:
swe_calc_pctr() calculates planetocentric positions of planets, i. e. positions as observed from some different planet, e.g. Jupiter-centric ephemerides. The function can actually calculate any object as observed from any other object, e.g. also the position of some asteroid as observed from another asteroid or from a planetary moon. The function declaration is as follows:
int32 swe_calc_pctr(
double tjd, // input time in TT
int32 ipl, // target object
int32 iplctr, // center object
int32 iflag,
double *xxret,
char *serr);
Добавьте сами в объявления по аналогии с другими. Функций много, могут с обновлениями библиотеки добавляться новые, меняться старые.
А можно пример пожалуйста как сделать? Поскольку ни разу не программист, и все делаю методом научного тыка, пока не получилось...
Тут еще проблема будет проверить результаты расчетов, поскольку программ расчитывающих планетоцентические системы почти что и нет...за исключением Солнца и Земли конечно...
Последний раз редактировалось Les, 09.10.2023 в 08:31.
Private Declare PtrSafe Function swe_calc_pctr Lib "swedll64.dll" _
( _
ByVal tjd_ut As Double, _
ByVal ipl As Long, _
ByVal iplctr As Long, _
ByVal iflag As Long, _
ByRef x As Double, _
ByVal serr As String _
) As Long ' x must be first of six array elements
' serr must be able to hold 256 bytes
или для x32
Код:
Public Declare Function swe_calc_pctr Lib "swedll32.dll" _
Alias "_swe_calc_ut@28" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Int32, _
ByVal iplctr As Int32, _
ByVal iflag As Int32, _
ByRef x As Double, _
ByVal serr As String _
) As Int32 ' x must be first of six array elements
' serr must be able to hold 256 bytes
выражение "по аналогии с другими" как раз подразумевает, что вникать в каждую букву не требуется, достаточно посмотреть на соседние функции и сделать аналогично
мне не удалось запустить эту функцию...уж не знаю по какой причине, может потому что запускаю (в виртуалке) на winxp (Excel2000, VB 6.0), а сам расчет планетоцентрических эфемерид с использованием функции swe_calc_pctr() появился на 20 лет позднее в октябре 2020 года