int rise_set_cal (struct ln_lnlat_posn *obs, time_t * start_time, int ndays) { double JD = ln_get_julian_from_timet (start_time); int i; struct ln_rst_time rst; printf ("Calculating for longtitude %+3.2f, latitude %2.2f\n", obs->lng, obs->lat); for (i = 0; i < ndays * 2; i++, JD += 0.5) { printf ("\nJD: "); print_jd (JD, obs); ln_get_solar_rst (JD, obs, &rst); printf ("\nset/rise: "); print_rst (&rst, obs); ln_get_solar_rst_horizon (JD, obs, LN_SOLAR_CIVIL_HORIZON, &rst); printf ("\ncivil %02f: ", LN_SOLAR_CIVIL_HORIZON); print_rst (&rst, obs); ln_get_solar_rst_horizon (JD, obs, LN_SOLAR_NAUTIC_HORIZON, &rst); printf ("\nnautic %02f: ", LN_SOLAR_NAUTIC_HORIZON); print_rst (&rst, obs); ln_get_solar_rst_horizon (JD, obs, LN_SOLAR_ASTRONOMICAL_HORIZON, &rst); printf ("\nastronomical %02f: ", LN_SOLAR_ASTRONOMICAL_HORIZON); print_rst (&rst, obs); } return 0; }
void MainWindow::setSunRiseAndSetVectors(const QDateTime &dateTime) { struct ln_equ_posn equ; struct ln_rst_time rst; struct ln_zonedate rise, set, transit; struct ln_lnlat_posn observer; struct ln_hrz_posn hpos; double JD; observer.lat = ui->latEdit->text().toFloat(); observer.lng = ui->lngEdit->text().toFloat(); ln_date date; date.years = dateTime.date().year(); date.months = dateTime.date().month(); date.days = dateTime.date().day(); date.hours = dateTime.time().hour(); date.minutes = dateTime.time().minute(); date.seconds = dateTime.time().second(); JD = ln_get_julian_day(&date); /* ra, dec */ ln_get_solar_equ_coords (JD, &equ); ln_get_hrz_from_equ(&equ, &observer, JD, &hpos); double a = ln_range_degrees(hpos.az - 180); QString s; s.sprintf("Azimut: %0.3f", a); ui->listWidget->addItem(s); s.sprintf("Evaluation: %0.3f", hpos.alt); ui->listWidget->addItem(s); /* rise, set and transit */ if (ln_get_solar_rst (JD, &observer, &rst) == 1) { ui->listWidget->addItem(QString("Zirkumpolar")); } else { ln_get_local_date (rst.rise, &rise); ln_get_local_date (rst.transit, &transit); ln_get_local_date (rst.set, &set); s.sprintf("Aufgang: %02d:%02d:%02d", rise.hours, rise.minutes, (int)rise.seconds); ui->listWidget->addItem(s); s.sprintf("Transit: %02d:%02d:%02d", transit.hours, transit.minutes, (int)transit.seconds); ui->listWidget->addItem(s); s.sprintf("Untergang: %02d:%02d:%02d", set.hours, set.minutes, (int)set.seconds); ui->listWidget->addItem(s); } //sunHeading->setVisible(false); setSunVectors(&rise, &observer, sunRise); setSunVectors(&set, &observer, sunSet); mc->setView(QPointF(observer.lng, observer.lat)); //overlay->addGeometry(); }