From 706bb24bed109f14f85e188adb23cb27eb2b8798 Mon Sep 17 00:00:00 2001 From: Zwarf Date: Wed, 16 Feb 2022 22:32:00 +0100 Subject: [PATCH] Calculate sun, moon and milky way rise, upper culmination and set --- README.md | 6 +- .../calculations_transformations.c | 27 ++++++++- .../calculations_transformations.h | 2 +- src/window/overview-page/overview-view.c | 59 +++++++++++++++++-- src/window/overview-page/overview-view.h | 8 +++ src/window/picplanner-window.c | 26 ++++++-- 6 files changed, 110 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index bd1f131..5ec3876 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@

A GTK application for photographers using GNU Linux or especially Linux phones. It can be used to calculate the position of the Sun, Moon and Milky Way in order to plan the position and time for a photograph.

## The Idea -People who love to photograph know the biggest problem is being at the right spot at the right time. -Therefore landscape pictures should be planned before visiting the place of choice. To plan the location it is important to know the positon of the sun, moon and sometimes also the milky way. +People who love to photograph know, the biggest problem is being at the right spot at the right time. +Therefore, landscape pictures should be planned before visiting the place of choice. To plan the location it is important to know the positon of the sun, moon and sometimes also the milky way. Where to find the sun at which time is most of the time easy to guess but when is the sunset? And for the milky way normally nobody knows where to find it in the night sky at which time at a specific location. This small program should answer all these questions. @@ -41,7 +41,7 @@ Some of these formulas are from the excellent book by Jean Meeus "Astronomical A ## Build -At the moment this application is NOT functional and I only test this application with Gnome Builder. +At the moment this application is NOT fully functional. ```diff git clone https://gitlab.com/Zwarf/picplanner.git diff --git a/src/calculations/calculations_transformations.c b/src/calculations/calculations_transformations.c index c538f4d..6c7cf52 100644 --- a/src/calculations/calculations_transformations.c +++ b/src/calculations/calculations_transformations.c @@ -204,21 +204,42 @@ double int -*picplanner_get_rise_upper_set_index (double *coordinates_array) +*picplanner_get_index_rise_upper_set (double *coordinates_array) { int rise = -1; - int upper = -1; + int upper = 0; int set = -1; int *rise_upper_set_array = malloc (sizeof (int) * 2); + double upper_max = coordinates_array[0+1]; + double last_elevation = coordinates_array[0+1]; + for (int i=0; i upper_max) + { + upper = i; + upper_max = elevation; + } + + if (last_elevation < 0 && elevation > 0) + { + rise = i; + } + + if (last_elevation > 0 && elevation < 0) + { + set = i; + } + + last_elevation = elevation; } rise_upper_set_array[0] = rise; rise_upper_set_array[1] = upper; - rise_upper_set_array[1] = set; + rise_upper_set_array[2] = set; return rise_upper_set_array; } diff --git a/src/calculations/calculations_transformations.h b/src/calculations/calculations_transformations.h index c8757d4..ed4f620 100644 --- a/src/calculations/calculations_transformations.h +++ b/src/calculations/calculations_transformations.h @@ -44,4 +44,4 @@ double double time_sidereal); int -*picplanner_get_rise_upper_set_index (double *coordinates_array); +*picplanner_get_index_rise_upper_set (double *coordinates_array); diff --git a/src/window/overview-page/overview-view.c b/src/window/overview-page/overview-view.c index 61074f4..4eff850 100644 --- a/src/window/overview-page/overview-view.c +++ b/src/window/overview-page/overview-view.c @@ -76,20 +76,69 @@ picplanner_overview_set_sun (GDateTime *date_time, GDateTime *date_time_set; (void) coordinates_array; - date_time_rise = g_date_time_add_minutes (date_time, -12+index_rise_upper_set[0]*24*60/NUM_DATA_POINTS); - date_time_upper = g_date_time_add_minutes (date_time, -12+index_rise_upper_set[1]*24*60/NUM_DATA_POINTS); - date_time_set = g_date_time_add_minutes (date_time, -12+index_rise_upper_set[2]*24*60/NUM_DATA_POINTS); + date_time_rise = g_date_time_add_minutes (date_time, index_rise_upper_set[0]*24*60/NUM_DATA_POINTS-12*60); + date_time_upper = g_date_time_add_minutes (date_time, index_rise_upper_set[1]*24*60/NUM_DATA_POINTS-12*60); + date_time_set = g_date_time_add_minutes (date_time, index_rise_upper_set[2]*24*60/NUM_DATA_POINTS-12*60); - g_print ("Rise: %d:%d\n", + g_print ("Sun Rise: %d:%d ", g_date_time_get_hour (date_time_rise), g_date_time_get_minute (date_time_rise)); - g_print ("Upper: %d:%d\n", + g_print ("Upper: %d:%d ", g_date_time_get_hour (date_time_upper), g_date_time_get_minute (date_time_upper)); g_print ("Set: %d:%d\n", g_date_time_get_hour (date_time_set), g_date_time_get_minute (date_time_set)); +} +void +picplanner_overview_set_moon (GDateTime *date_time, + double *coordinates_array, + int *index_rise_upper_set) +{ + GDateTime *date_time_rise; + GDateTime *date_time_upper; + GDateTime *date_time_set; + (void) coordinates_array; + + date_time_rise = g_date_time_add_minutes (date_time, index_rise_upper_set[0]*24*60/NUM_DATA_POINTS-12*60); + date_time_upper = g_date_time_add_minutes (date_time, index_rise_upper_set[1]*24*60/NUM_DATA_POINTS-12*60); + date_time_set = g_date_time_add_minutes (date_time, index_rise_upper_set[2]*24*60/NUM_DATA_POINTS-12*60); + + g_print ("Moon Rise: %d:%d ", + g_date_time_get_hour (date_time_rise), + g_date_time_get_minute (date_time_rise)); + g_print ("Upper: %d:%d ", + g_date_time_get_hour (date_time_upper), + g_date_time_get_minute (date_time_upper)); + g_print ("Set: %d:%d\n", + g_date_time_get_hour (date_time_set), + g_date_time_get_minute (date_time_set)); +} + +void +picplanner_overview_set_milky_way (GDateTime *date_time, + double *coordinates_array, + int *index_rise_upper_set) +{ + GDateTime *date_time_rise; + GDateTime *date_time_upper; + GDateTime *date_time_set; + (void) coordinates_array; + + date_time_rise = g_date_time_add_minutes (date_time, index_rise_upper_set[0]*24*60/NUM_DATA_POINTS-12*60); + date_time_upper = g_date_time_add_minutes (date_time, index_rise_upper_set[1]*24*60/NUM_DATA_POINTS-12*60); + date_time_set = g_date_time_add_minutes (date_time, index_rise_upper_set[2]*24*60/NUM_DATA_POINTS-12*60); + + g_print ("Milky Way: Rise: %d:%d ", + g_date_time_get_hour (date_time_rise), + g_date_time_get_minute (date_time_rise)); + g_print ("Upper: %d:%d ", + g_date_time_get_hour (date_time_upper), + g_date_time_get_minute (date_time_upper)); + g_print ("Set: %d:%d\n", + g_date_time_get_hour (date_time_set), + g_date_time_get_minute (date_time_set)); } diff --git a/src/window/overview-page/overview-view.h b/src/window/overview-page/overview-view.h index 8183533..6ecc2c8 100644 --- a/src/window/overview-page/overview-view.h +++ b/src/window/overview-page/overview-view.h @@ -24,5 +24,13 @@ void picplanner_overview_set_sun (GDateTime *date_time, double *coordinates_array, int *index_rise_upper_set); +void +picplanner_overview_set_moon (GDateTime *date_time, + double *coordinates_array, + int *index_rise_upper_set); +void +picplanner_overview_set_milky_way (GDateTime *date_time, + double *coordinates_array, + int *index_rise_upper_set); G_END_DECLS diff --git a/src/window/picplanner-window.c b/src/window/picplanner-window.c index 723be6b..98d60af 100644 --- a/src/window/picplanner-window.c +++ b/src/window/picplanner-window.c @@ -98,12 +98,13 @@ static void input_changed (GtkWidget *self, gpointer user_data) { - (void) user_data; - double *array_coordinates_sun; - double *array_coordinates_moon; - double *array_coordinates_milky_way; + (void) user_data; + int *rise_upper_set_index; + double *array_coordinates_sun; + double *array_coordinates_moon; + double *array_coordinates_milky_way; GDateTime *date_time; - double longitude, latitude; + double longitude, latitude; longitude = picplanner_overview_get_longitude (PICPLANNER_OVERVIEW (self)); latitude = picplanner_overview_get_latitude (PICPLANNER_OVERVIEW (self)); @@ -113,7 +114,20 @@ input_changed (GtkWidget *self, array_coordinates_moon = picplanner_get_array_coordinates_moon (date_time, longitude, latitude); array_coordinates_milky_way = picplanner_get_array_coordinates_milky_way (date_time, longitude, latitude); - picplanner_overview_set_sun (date_time, array_coordinates_sun, 1); + rise_upper_set_index = picplanner_get_index_rise_upper_set (array_coordinates_sun); + picplanner_overview_set_sun (date_time, + array_coordinates_sun, + rise_upper_set_index); + + rise_upper_set_index = picplanner_get_index_rise_upper_set (array_coordinates_moon); + picplanner_overview_set_moon (date_time, + array_coordinates_sun, + rise_upper_set_index); + + rise_upper_set_index = picplanner_get_index_rise_upper_set (array_coordinates_milky_way); + picplanner_overview_set_milky_way (date_time, + array_coordinates_sun, + rise_upper_set_index); }