Adding plot library

old-version-gtk3
Zwerg12 2020-08-19 19:41:15 +02:00
rodzic 0d841056a3
commit 83940258ad
5 zmienionych plików z 75 dodań i 4 usunięć

Wyświetl plik

@ -1,4 +1,4 @@
#include <gtk/gtk.h>
#include <gtk/gtk.h> /* libgtk-3-dev */
#define HANDY_USE_UNSTABLE_API
#include <handy.h>

Wyświetl plik

@ -3,6 +3,7 @@ picplanner_sources = [
'calculations.c',
'webconnection.c',
'handler.c',
'plot.c',
]
picplanner_deps = [

Wyświetl plik

@ -341,6 +341,20 @@
<property name="icon_name">system-search-symbolic</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Overviwe</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
</object>
<packing>
<property name="name">overview</property>
<property name="title" translatable="yes">Overview</property>
<property name="icon_name">help-about-symbolic</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
@ -351,7 +365,7 @@
<property name="name">sun</property>
<property name="title" translatable="yes">Sun</property>
<property name="icon_name">weather-clear-symbolic</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@ -364,7 +378,7 @@
<property name="name">moon</property>
<property name="title" translatable="yes">Moon</property>
<property name="icon_name">night-light-symbolic</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
<child>
@ -378,7 +392,7 @@
<property name="name">milkyway</property>
<property name="title" translatable="yes">Milky Way</property>
<property name="icon_name">help-about-symbolic</property>
<property name="position">3</property>
<property name="position">4</property>
</packing>
</child>
</object>

43
src/plot.c 100644
Wyświetl plik

@ -0,0 +1,43 @@
#include <plot.h>
double plot_calc_coordinate_x (double a1, double a2, float alpha, float beta) {
/* coordinate transformation to transform 3D coordinates into 2D coordinates */
double x = (sin(beta)*a1-sin(alpha)*a2)/(cos(alpha)*sin(beta)-sin(alpha)*cos(beta));
return x;
}
double plot_calc_coordinate_y (double a1, double a2, double a3, float alpha, float beta) {
/* coordinate transformation to transform 3D coordinates into 2D coordinates */
double y = (-cos(beta)*a1+cos(alpha)*a2)/(cos(alpha)*sin(beta)-sin(alpha)*cos(beta)) + a3;
return y;
}
void plot_line_to (cairo_t *cr, double a1, double a2, double a3, float alpha, float beta){
/* plot a line with automatic transformation from 3D coordinates into 2D */
cairo_line_to (cr, plot_calc_coordinate_x (a1, a2, alpha, beta), plot_calc_coordinate_y (a1, a2, a3, alpha, beta));
}
void plot_move_to (cairo_t *cr, double a1, double a2, double a3, float alpha, float beta) {
/* move cairo starting point with automatic transformation from 3D coordinates into 2D */
cairo_move_to (cr, plot_calc_coordinate_x (a1, a2, alpha, beta), plot_calc_coordinate_y (a1, a2, a3, alpha, beta));
}
void plot_vector_to (cairo_t *cr, double a1, double a2, double a3, float alpha, float beta) {
/* plot a vector with automatic transformation from 3D coordinates into 2D */
double current_x = 0;
double current_y = 0;
double *x_1 = &current_x;
double *y_1 = &current_y;
double x_2 = plot_calc_coordinate_x (a1, a2, alpha, beta);
double y_2 = plot_calc_coordinate_y (a1, a2, a3, alpha, beta);
cairo_get_current_point (cr, x_1, y_1);
double direct_x = x_2-*x_1;
double direct_y = y_2-*y_1;
double norm = pow(pow(direct_x,2) + pow(direct_y,2), 0.5);
direct_x /= norm;
direct_y /= norm;
g_print("direct_x: %f, direct_y: %f\n", direct_x, direct_y);
float gamma = 0.5326;
cairo_line_to (cr, x_2, y_2);
cairo_line_to (cr, x_2+(-direct_x*cos(gamma)+direct_y*sin(gamma))*0.2, y_2+(-direct_y*cos(gamma)-direct_x*sin(gamma))*0.2);
cairo_move_to (cr, x_2, y_2);
cairo_line_to (cr, x_2+(-direct_x*cos(gamma)-direct_y*sin(gamma))*0.2, y_2+(-direct_y*cos(gamma)+direct_x*sin(gamma))*0.2);
}

13
src/plot.h 100644
Wyświetl plik

@ -0,0 +1,13 @@
#include <gtk/gtk.h>
#include <math.h>
#include <cairo.h>
double plot_calc_coordinate_x (double a1, double a2, float alpha, float beta);
double plot_calc_coordinate_y (double a1, double a2, double a3, float alpha, float beta);
void plot_line_to (cairo_t *cr, double a1, double a2, double a3, float alpha, float beta);
void plot_move_to (cairo_t *cr, double a1, double a2, double a3, float alpha, float beta);
void plot_vector_to (cairo_t *cr, double a1, double a2, double a3, float alpha, float beta);