Перейти к содержанию
  • 0

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


freidjaz

Вопрос

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

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

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

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

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

  • 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 пользователей онлайн

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