Перейти к содержанию
  • 0
Авторизация  
freidjaz

Шветские эфемириды swedll

Вопрос

Доброго времени суток!

Ищу людей, которые могли бы подсказать касательно применения данной библиотеки и самих эфемирид. Хочу сделать программку для построения натальной карты для начала.

В дальнейшем конечно хотелось ее приспособить под исследования процентной сходимости астрологических методик ... возможно также для выявления новых закономерностей методами машинного обучения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 1

Здравствуйте,

Swiss ephemeries - это Швейцарские, а не Шведские эфемериды. В коде не вижу, поправку на Аянамшу, т.е. код считает градусы по Тропическому зодиаку. Возможно я не прав.

Есть интересный опенсорс джйотиш софт

http://www.saravali.de/download.html

код выложен на гитхабе, возможно он вам поможет почерпнуть идеи для вашего 2 вопроса.

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

Наверное их проект мне не особо пригодится, слишком долго разбираться, много времени и сил нужно, тут еще линукс тянется, другая среда разработки, другие методики и способы расчета. Я почему остановился на Швецарских эфемеридах - они используются во многих популярных джйотиш ПО. Джагананта хора, проект Лагна ру ипользует их. Главное документация есть.
Однако пока у меня не хватает внимания, чтобы выудить из этой документации ответы: как произвести настройку расчетов таким образом, чтобы погрешность была хотя бы в пределах одного градуса, по отношению к той же Джагананте Хоре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Для написания программы на данный момент использую Visual Studio 2015.

Предлагаю рабочий код:
//**************************   НАЧАЛО

#include <iostream>
#include <iomanip>
#include <tchar.h>
#include <conio.h>
#include <Windows.h>

int main() {

    setlocale(LC_ALL, "Russian");

    char snam[40], serr[256];
    int jday = 29, jmon = 7, jyear = 1987;
    double jut = 0.47;
    double tjd_ut, x2[6];
    long iflag, iflgret;
    double cusps,ascmc;
    iflag = 256;

    typedef void(PASCAL* swe_set_ephe_path)(char *path);  //_swe_set_ephe_path@4    
    typedef int(PASCAL* swe_houses_ex)(double tjd_ut, int gregflag, double geolat, double geolon, int hsys, double *cusps, double *ascmc); // _swe_houses_ex@40                                                                                                                                        
    typedef double(PASCAL* swe_julday)(int god, int mes, int day, double hour, int gregflag); // _swe_julday@24    
    typedef long(PASCAL* swe_calc_ut)(double tjd_ut, int p, long iflag, double x2[], char serr[]); // _swe_calc_ut@24    
    typedef void(PASCAL* swe_get_planet_name)(int p, char snam[]); // _swe_get_planet_name@8    
    typedef void(PASCAL* swe_close)(void);  //_swe_close@0

    HMODULE hMod = NULL;
    void InitLargeDLL();
    hMod = LoadLibrary(_T("swedll32.dll"));// загружаем DLL
    if (hMod) {    
        swe_set_ephe_path swe_set_path = (swe_set_ephe_path)GetProcAddress(hMod, "_swe_set_ephe_path@4");
        swe_houses_ex swe_housesex = (swe_houses_ex)GetProcAddress(hMod, "_swe_houses_ex@40");    
        swe_julday swejul = (swe_julday)GetProcAddress(hMod, "_swe_julday@24");        
        swe_calc_ut swe_calcut = (swe_calc_ut)GetProcAddress(hMod, "_swe_calc_ut@24");        
        swe_get_planet_name swe_get_pl_name = (swe_get_planet_name)GetProcAddress(hMod, "_swe_get_planet_name@8");        
        swe_close sweclose = (swe_close)GetProcAddress(hMod, "_swe_close@0");
//************************************ установка эфемирид *********************************************************************************** установка эфемирид
        // Установка каталога с файлами сторонних эфемирид. Помимо этого функциявыполняет дополнительные обязательные инициализации.
        // Если сторонних эфемирид нет, то вызывается с нулевым значением для инициализации дополнительных процессов.
        swe_set_path("C:\\sweph\\ephem");
//************************************ вычисление юлианского дня *************************************************************************** вычисление юлианского дня
        // Установка даты и времени рождения.        
        tjd_ut = swejul(1987, 7, 29, 0.0, 0); // 1 - это грегурианский календарь, если поставить 0 - будет юлианский.
//************************************ вывод шапки таблици значений широт, долго, скоростей и т.д. планет ************************************ вывод шапки таблици
        std::cout << "date at 0:00 Universal time: " << jday << "." << jmon << "." << jyear <<std::endl;
        std::cout << "#  " << std::setw(15) << std::left << "Планета"
            << std::setw(15) << "Долгота "//"tlongitude"
            << std::setw(15) << "Широта" //"tlatitude"  
            << std::setw(15) << "Растояние" //"tdistance"
            << std::setw(15) << "Скорость длинная" //"tspeed long"
            << std::endl;
        std::cout << "#  " << std::endl;
//************************************ настройка вычисления домов *************************************************************************** настройка вычисления домов
        swe_housesex(tjd_ut, 0, 55.5, 42.1, 1, &cusps, &ascmc);
// ********************************* вычисление положения планет в цикле ********************************************************************** вычисление положения планет в цикле
        for (int p = 0; p < 14; p++) {
            iflgret = swe_calcut(tjd_ut, p, iflag, x2, serr);
            if (iflgret < 0)
                std::cout << "Ошибка. Заданы неверные значения для расчета:" << serr << std::endl;
            swe_get_pl_name(p, snam);
            std::cout << "#  " << std::setw(15) << std::left << snam
                << std::setw(15) << x2[0]
                << std::setw(15) << x2[1]
                << std::setw(15) << x2[2]
                << std::setw(15) << x2[3]
                << std::endl;
        }    
        sweclose();        
    }
    else
        std::cout << "Не удалось загрузить swedll32.dll." << std::endl;

    FreeLibrary(hMod);

    _getch();
}

//****************************   КОНЕЦ

Этот пример делает расчеты градусов планет, скоростей для выбранной даты и времени, но ... со слишком большой погрешностью. В документации на библиотеку непрозрачно написано про установку всех параметров, которые нужно выставить, для получения корректных градусов.

С выше изложенным два вопроса:
1) Стоит ли перейти на среду Qt, чтобы вызывать функции из библиотеки на прямую? Поможет ли, или взять Райд студию, или вообще Бильдер ;-)
2) Какие функции и атрибуты использовать для верной настройки вычисления градусов планет для выбранных даты, времени и места.

Спасибо.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо, мудренно они сделали. Нужно разбираться. Однако они швейцарские эфемериды не использовали у себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...