ygrenier / SwissEphNet

Swiss Ephemeris for .Net. A Swiss Ephemeris portage for .Net.
Other
77 stars 35 forks source link

Sidereal mode doesn't work #15

Closed sundraw closed 8 years ago

sundraw commented 8 years ago
//////////////////////////////////////////
// ORIGINAL SWISS EPHEMERIS //////////////
//////////////////////////////////////////

// TROPICAL

int day = 1, month = 1, year = 2001;
double time = 0;

double tjd = swe_julday(year, month, day, time, SE_GREG_CAL);
double te = tjd + swe_deltat(tjd);

int p;
int iflag, iflgret;
double x2[6];
char snam[40], serr[AS_MAXCH];
iflag = SEFLG_MOSEPH;

for (p = SE_SUN; p <= SE_MEAN_NODE; p++)
{
    if (p == SE_EARTH) continue;
    iflgret = swe_calc(te, p, iflag, x2, serr);
    if (iflgret < 0) {
        NSLog(@"Error: %s\n", serr);
    }
    else if (iflgret != iflag) {
        NSLog(@"warning: iflgret != iflag. %s\n", serr);
    }

    swe_get_planet_name(p, snam);

    NSLog(@"%s: %f", snam, x2[0]);
}

Sun: 280.633394 Moon: 348.705788 Mercury: 284.271499 Venus: 326.966739 Mars: 214.937800 Jupiter: 62.190038 Saturn: 54.591045 Uranus: 318.650060 Neptune: 305.327192 Pluto: 253.768075 mean Node: 105.685433

// SIDEREAL

int day = 1, month = 1, year = 2001;
double time = 0;

double tjd = swe_julday(year, month, day, time, SE_GREG_CAL);
double te = tjd + swe_deltat(tjd);

int p;
int iflag, iflgret;
double x2[6];
char snam[40], serr[AS_MAXCH];
iflag = SEFLG_MOSEPH | SEFLG_SIDEREAL | SEFLG_NONUT;
swe_set_sid_mode(SE_SIDM_LAHIRI, 0, 0);
double ayanamsa = swe_get_ayanamsa(te);
NSLog(@"Ayanamsa: %f", ayanamsa);

for (p = SE_SUN; p <= SE_MEAN_NODE; p++)
{
    if (p == SE_EARTH) continue;
    iflgret = swe_calc(te, p, iflag, x2, serr);
    if (iflgret < 0) {
        NSLog(@"Error: %s\n", serr);
    }
    else if (iflgret != iflag) {
        NSLog(@"warning: iflgret != iflag. %s\n", serr);
    }

    swe_get_planet_name(p, snam);

    NSLog(@"%s: %f", snam, x2[0]);
}

Ayanamsa: 23.871029 Sun: 256.766846 Moon: 324.839240 Mercury: 260.404950 Venus: 303.100191 Mars: 191.071251 Jupiter: 38.323489 Saturn: 30.724497 Uranus: 294.783511 Neptune: 281.460644 Pluto: 229.901526 mean Node: 81.818885

//////////////////////////////////////////
/////////////// SWISSEPHNET //////////////
//////////////////////////////////////////

// TROPICAL

using (var sweph = new SwissEph())
{
    int jday = 1, jmon = 1, jyear = 2001;
    double jut = 0;
    double[] x2 = new double[6];
    Int32 iflag, iflgret;
    iflag = SwissEph.SEFLG_MOSEPH;
    string snam = string.Empty, serr = String.Empty;

    var jd = sweph.swe_julday(jyear, jmon, jday, jut, SwissEph.SE_GREG_CAL);
    var te = jd + sweph.swe_deltat(jd);

    for (var p = SwissEph.SE_SUN; p <= SwissEph.SE_MEAN_NODE; p++)
    {
        if (p == SwissEph.SE_EARTH)
            continue;

        iflgret = sweph.swe_calc(te, p, iflag, x2, ref serr);
        if (iflgret < 0)
            Debug.WriteLine("Error: " + serr);
        else if (iflgret != iflag) 
            Debug.WriteLine("Warning: " + serr);

        snam = sweph.swe_get_planet_name(p);
        Debug.WriteLine(snam + ": " + x2[0]);
    }
}

Sun: 280.633396098731 Moon: 348.705789739616 Mercury: 284.271500618641 Venus: 326.96674081694 Mars: 214.937801767143 Jupiter: 62.1900397329627 Saturn: 54.5910474997899 Uranus: 318.650061672831 Neptune: 305.327194003093 Pluto: 253.76807736787 mean Node: 105.685433403061

// SIDEREAL

using (var sweph = new SwissEph())
{
    int jday = 1, jmon = 1, jyear = 2001;
    double jut = 0;
    double[] x2 = new double[6];
    Int32 iflag, iflgret;
    iflag = SwissEph.SEFLG_MOSEPH | SwissEph.SEFLG_SIDEREAL | SwissEph.SEFLG_NONUT;
    string snam = string.Empty, serr = String.Empty;

    var jd = sweph.swe_julday(jyear, jmon, jday, jut, SwissEph.SE_GREG_CAL);
    var te = jd + sweph.swe_deltat(jd);

    sweph.swe_set_sid_mode(SwissEph.SE_SIDM_LAHIRI, 0, 0);
    double ayanamsa = sweph.swe_get_ayanamsa(te);
    Debug.WriteLine("Ayanamsa: " + ayanamsa);

    for (var p = SwissEph.SE_SUN; p <= SwissEph.SE_MEAN_NODE; p++)
    {
        if (p == SwissEph.SE_EARTH)
            continue;

        iflgret = sweph.swe_calc(te, p, iflag, x2, ref serr);
        if (iflgret < 0)
            Debug.WriteLine("Error: " + serr);
        else if (iflgret != iflag) 
            Debug.WriteLine("Warning: " + serr);

        snam = sweph.swe_get_planet_name(p);
        Debug.WriteLine(snam + ": " + x2[0]);
    }
}

Ayanamsa: 23.8710324265381 Sun: 280.637877069543 Moon: 348.710270710429 Mercury: 284.275981589454 Venus: 326.971221787753 Mars: 214.942282737956 Jupiter: 62.1945207037755 Saturn: 54.5955284706027 Uranus: 318.654542643643 Neptune: 305.331674973906 Pluto: 253.772558338683 mean Node: 105.689914373873

ygrenier commented 8 years ago

OK I prepared a unit test to debug this problem : #16.

I'll work on it when a have some time.