Orbiter 2022
Combinatorial Objects
globals.h
Go to the documentation of this file.
1// globals.h
2//
3// Anton Betten
4//
5// moved here from galois.h: July 27, 2018
6// started as orbiter: October 23, 2002
7// 2nd version started: December 7, 2003
8// galois started: August 12, 2005
9
10
11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_GLOBALS_GLOBALS_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_GLOBALS_GLOBALS_H_
13
14
15
16
17namespace orbiter {
18namespace layer1_foundations {
19
20
21// #############################################################################
22// function_command.cpp
23// #############################################################################
24
26
28public:
29
30 int type;
31 // 1 = push labeled constant
32 // 2 = push immediate constant
33 // 3 = push variable
34 // 4 = store variable
35 // 5 = mult
36 // 6 = add
37 // 7 = cos
38 // 8 = sin
39 // 9 = return
40 // 10 = sqrt
41
43 int arg;
44 double val; // for push immediate constant
45
48 void init_with_argument(int type, int arg);
50 void init_simple(int type);
51
52};
53
54// #############################################################################
55// function_polish_description.cpp
56// #############################################################################
57
59
60
62public:
64 std::vector<std::string> const_names;
65 std::vector<std::string> const_values;
67 std::vector<std::string> variable_names;
69 std::vector<std::string> code;
70
73 void null();
74 void freeself();
75 int read_arguments(int argc, std::string *argv,
76 int verbose_level);
77 void print();
78};
79
80
81// #############################################################################
82// function_polish.cpp
83// #############################################################################
84
86
88public:
89
91
92 std::vector<std::string > Variables;
93
94 std::vector<std::pair<std::string, double> > Constants;
95
96 std::vector<int> Entry;
97 std::vector<int> Len;
98
99 std::vector<function_command> Code;
100
101
104 void init(
106 int verbose_level);
108 int verbose_level);
109 void print_code(
110 int i0, int len,
111 int verbose_level);
112 void evaluate(
113 double *variable_values,
114 double *output_values,
115 int verbose_level);
116
117};
118
119
120
121// #############################################################################
122// numerics.cpp
123// #############################################################################
124
125
126
128
129class numerics {
130public:
131 numerics();
132 ~numerics();
133 void vec_print(double *a, int len);
134 void vec_linear_combination1(double c1, double *v1,
135 double *w, int len);
136 void vec_linear_combination(double c1, double *v1,
137 double c2, double *v2, double *v3, int len);
139 double c1, double *v1,
140 double c2, double *v2,
141 double c3, double *v3,
142 double *w, int len);
143 void vec_add(double *a, double *b, double *c, int len);
144 void vec_subtract(double *a, double *b, double *c, int len);
145 void vec_scalar_multiple(double *a, double lambda, int len);
146 int Gauss_elimination(double *A, int m, int n,
147 int *base_cols, int f_complete,
148 int verbose_level);
149 void print_system(double *A, int m, int n);
150 void get_kernel(double *M, int m, int n,
151 int *base_cols, int nb_base_cols,
152 int &kernel_m, int &kernel_n,
153 double *kernel);
154 // kernel must point to the appropriate amount of memory!
155 // (at least n * (n - nb_base_cols) doubles)
156 // m is not used!
157 int Null_space(double *M, int m, int n, double *K,
158 int verbose_level);
159 // K will be k x n
160 // where k is the return value.
161 void vec_normalize_from_back(double *v, int len);
162 void vec_normalize_to_minus_one_from_back(double *v, int len);
163 int triangular_prism(double *P1, double *P2, double *P3,
164 double *abc3, double *angles3, double *T3,
165 int verbose_level);
166 int general_prism(double *Pts, int nb_pts, double *Pts_xy,
167 double *abc3, double *angles3, double *T3,
168 int verbose_level);
169 void mult_matrix(double *v, double *R, double *vR);
171 double *A, double *B, double *C, int m, int n, int o);
172 // A is m x n, B is n x o, C is m x o
173 void print_matrix(double *R);
174 void make_Rz(double *R, double phi);
175 void make_Ry(double *R, double psi);
176 void make_Rx(double *R, double chi);
177 double atan_xy(double x, double y);
178 double dot_product(double *u, double *v, int len);
179 void cross_product(double *u, double *v, double *n);
180 double distance_euclidean(double *x, double *y, int len);
181 double distance_from_origin(double x1, double x2, double x3);
182 double distance_from_origin(double *x, int len);
183 void make_unit_vector(double *v, int len);
184 void center_of_mass(double *Pts, int len,
185 int *Pt_idx, int nb_pts, double *c);
186 void plane_through_three_points(double *p1, double *p2, double *p3,
187 double *n, double &d);
189 double *from,
190 double *A, double *Av, int verbose_level);
191 void output_double(double a, std::ostream &ost);
192 void mult_matrix_4x4(double *v, double *R, double *vR);
193 void transpose_matrix_4x4(double *A, double *At);
194 void transpose_matrix_nxn(double *A, double *At, int n);
195 void substitute_quadric_linear(double *coeff_in, double *coeff_out,
196 double *A4_inv, int verbose_level);
198 double *coeff_in, double *coeff_out,
199 double *A4_inv, int verbose_level);
201 double *coeff_in, double *coeff_out,
202 double *A4_inv, int verbose_level);
203 void make_transform_t_varphi_u_double(int n, double *varphi, double *u,
204 double *A, double *Av, int verbose_level);
205 // varphi are the dual coordinates of a plane.
206 // u is a vector such that varphi(u) \neq -1.
207 // A = I + varphi * u.
208 void matrix_double_inverse(double *A, double *Av, int n, int verbose_level);
209 int line_centered(double *pt1_in, double *pt2_in,
210 double *pt1_out, double *pt2_out, double r, int verbose_level);
211 int line_centered_tolerant(double *pt1_in, double *pt2_in,
212 double *pt1_out, double *pt2_out, double r, int verbose_level);
213 int sign_of(double a);
214 void eigenvalues(double *A, int n, double *lambda, int verbose_level);
215 void eigenvectors(double *A, double *Basis,
216 int n, double *lambda, int verbose_level);
217 double rad2deg(double phi);
218 void vec_copy(double *from, double *to, int len);
219 void vec_swap(double *from, double *to, int len);
220 void vec_print(std::ostream &ost, double *v, int len);
221 void vec_scan(const char *s, double *&v, int &len);
222 void vec_scan(std::string &s, double *&v, int &len);
223 void vec_scan_from_stream(std::istream & is, double *&v, int &len);
224
225
226 double cos_grad(double phi);
227 double sin_grad(double phi);
228 double tan_grad(double phi);
229 double atan_grad(double x);
230 void adjust_coordinates_double(double *Px, double *Py, int *Qx, int *Qy,
231 int N, double xmin, double ymin, double xmax, double ymax,
232 int verbose_level);
233 void Intersection_of_lines(double *X, double *Y,
234 double *a, double *b, double *c, int l1, int l2, int pt);
235 void intersection_of_lines(double a1, double b1, double c1,
236 double a2, double b2, double c2,
237 double &x, double &y);
238 void Line_through_points(double *X, double *Y,
239 double *a, double *b, double *c,
240 int pt1, int pt2, int line_idx);
241 void line_through_points(double pt1_x, double pt1_y,
242 double pt2_x, double pt2_y, double &a, double &b, double &c);
243 void intersect_circle_line_through(double rad, double x0, double y0,
244 double pt1_x, double pt1_y,
245 double pt2_x, double pt2_y,
246 double &x1, double &y1, double &x2, double &y2);
247 void intersect_circle_line(double rad, double x0, double y0,
248 double a, double b, double c,
249 double &x1, double &y1, double &x2, double &y2);
250 void affine_combination(double *X, double *Y,
251 int pt0, int pt1, int pt2, double alpha, int new_pt);
252 void on_circle_double(double *Px, double *Py, int idx,
253 double angle_in_degree, double rad);
254 void affine_pt1(int *Px, int *Py, int p0, int p1, int p2,
255 double f1, int p3);
256 void affine_pt2(int *Px, int *Py, int p0, int p1, int p1b,
257 double f1, int p2, int p2b, double f2, int p3);
258 double norm_of_vector_2D(int x1, int x2, int y1, int y2);
259 void transform_llur(int *in, int *out, int &x, int &y);
260 void transform_dist(int *in, int *out, int &x, int &y);
261 void transform_dist_x(int *in, int *out, int &x);
262 void transform_dist_y(int *in, int *out, int &y);
263 void transform_llur_double(double *in, double *out, double &x, double &y);
264 void on_circle_int(int *Px, int *Py, int idx, int angle_in_degree, int rad);
265 double power_of(double x, int n);
266 double bernoulli(double p, int n, int k);
267 void local_coordinates_wrt_triangle(double *pt,
268 double *triangle_points, double &x, double &y,
269 int verbose_level);
271 double *line1_pt1_coords, double *line1_pt2_coords,
272 double *line2_pt1_coords, double *line2_pt2_coords,
273 double &lambda,
274 double *pt_coords,
275 int verbose_level);
276 void clebsch_map_up(
277 double *line1_pt1_coords, double *line1_pt2_coords,
278 double *line2_pt1_coords, double *line2_pt2_coords,
279 double *pt_in, double *pt_out,
280 double *Cubic_coords_povray_ordering,
281 int line1_idx, int line2_idx,
282 int verbose_level);
283 void project_to_disc(int f_projection_on, int f_transition, int step, int nb_steps,
284 double rad, double height, double x, double y, double &xp, double &yp);
285
286};
287
288
289
290
291
292}}
293
294
295#endif /* ORBITER_SRC_LIB_FOUNDATIONS_GLOBALS_GLOBALS_H_ */
296
297
298
an individual command which is part of a function expressed in reverse polish notation
Definition: globals.h:27
description of a function in reverse polish notation from the command line
Definition: globals.h:61
int read_arguments(int argc, std::string *argv, int verbose_level)
a set of functions in reverse polish notation
Definition: globals.h:87
function_polish_description * Descr
Definition: globals.h:90
void print_code(int i0, int len, int verbose_level)
std::vector< std::pair< std::string, double > > Constants
Definition: globals.h:94
std::vector< std::string > Variables
Definition: globals.h:92
void init(function_polish_description *Descr, int verbose_level)
void evaluate(double *variable_values, double *output_values, int verbose_level)
std::vector< function_command > Code
Definition: globals.h:99
numerical functions, mostly concerned with double
Definition: globals.h:129
int triangular_prism(double *P1, double *P2, double *P3, double *abc3, double *angles3, double *T3, int verbose_level)
Definition: numerics.cpp:458
void vec_add(double *a, double *b, double *c, int len)
Definition: numerics.cpp:82
double atan_xy(double x, double y)
Definition: numerics.cpp:938
void vec_linear_combination3(double c1, double *v1, double c2, double *v2, double c3, double *v3, double *w, int len)
Definition: numerics.cpp:69
void orthogonal_transformation_from_point_to_basis_vector(double *from, double *A, double *Av, int verbose_level)
Definition: numerics.cpp:1099
int intersect_line_and_line(double *line1_pt1_coords, double *line1_pt2_coords, double *line2_pt1_coords, double *line2_pt2_coords, double &lambda, double *pt_coords, int verbose_level)
Definition: numerics.cpp:2811
double distance_euclidean(double *x, double *y, int len)
Definition: numerics.cpp:984
void make_Rx(double *R, double chi)
Definition: numerics.cpp:920
void make_Rz(double *R, double phi)
Definition: numerics.cpp:885
void make_Ry(double *R, double psi)
Definition: numerics.cpp:902
void vec_scalar_multiple(double *a, double lambda, int len)
Definition: numerics.cpp:100
void plane_through_three_points(double *p1, double *p2, double *p3, double *n, double &d)
Definition: numerics.cpp:1051
void vec_linear_combination1(double c1, double *v1, double *w, int len)
Definition: numerics.cpp:49
int Gauss_elimination(double *A, int m, int n, int *base_cols, int f_complete, int verbose_level)
Definition: numerics.cpp:109
void substitute_quadric_linear(double *coeff_in, double *coeff_out, double *A4_inv, int verbose_level)
Definition: numerics.cpp:1224
void eigenvectors(double *A, double *Basis, int n, double *lambda, int verbose_level)
Definition: numerics.cpp:2087
void get_kernel(double *M, int m, int n, int *base_cols, int nb_base_cols, int &kernel_m, int &kernel_n, double *kernel)
Definition: numerics.cpp:282
void print_system(double *A, int m, int n)
Definition: numerics.cpp:270
void intersect_circle_line(double rad, double x0, double y0, double a, double b, double c, double &x1, double &y1, double &x2, double &y2)
Definition: numerics.cpp:2509
void vec_linear_combination(double c1, double *v1, double c2, double *v2, double *v3, int len)
Definition: numerics.cpp:59
double distance_from_origin(double x1, double x2, double x3)
Definition: numerics.cpp:998
void affine_combination(double *X, double *Y, int pt0, int pt1, int pt2, double alpha, int new_pt)
Definition: numerics.cpp:2538
void vec_scan_from_stream(std::istream &is, double *&v, int &len)
Definition: numerics.cpp:2232
void vec_print(double *a, int len)
Definition: numerics.cpp:35
void mult_matrix(double *v, double *R, double *vR)
Definition: numerics.cpp:841
int general_prism(double *Pts, int nb_pts, double *Pts_xy, double *abc3, double *angles3, double *T3, int verbose_level)
Definition: numerics.cpp:631
void eigenvalues(double *A, int n, double *lambda, int verbose_level)
Definition: numerics.cpp:2004
void transpose_matrix_nxn(double *A, double *At, int n)
Definition: numerics.cpp:1213
void local_coordinates_wrt_triangle(double *pt, double *triangle_points, double &x, double &y, int verbose_level)
Definition: numerics.cpp:2727
void vec_scan(const char *s, double *&v, int &len)
Definition: numerics.cpp:2218
void transform_llur_double(double *in, double *out, double &x, double &y)
Definition: numerics.cpp:2660
void project_to_disc(int f_projection_on, int f_transition, int step, int nb_steps, double rad, double height, double x, double y, double &xp, double &yp)
Definition: numerics.cpp:3231
void on_circle_int(int *Px, int *Py, int idx, int angle_in_degree, int rad)
Definition: numerics.cpp:2683
double bernoulli(double p, int n, int k)
Definition: numerics.cpp:2712
void make_unit_vector(double *v, int len)
Definition: numerics.cpp:1019
void mult_matrix_4x4(double *v, double *R, double *vR)
Definition: numerics.cpp:1187
int Null_space(double *M, int m, int n, double *K, int verbose_level)
Definition: numerics.cpp:371
void cross_product(double *u, double *v, double *n)
Definition: numerics.cpp:977
void adjust_coordinates_double(double *Px, double *Py, int *Qx, int *Qy, int N, double xmin, double ymin, double xmax, double ymax, int verbose_level)
Definition: numerics.cpp:2376
int line_centered(double *pt1_in, double *pt2_in, double *pt1_out, double *pt2_out, double r, int verbose_level)
Definition: numerics.cpp:1804
void output_double(double a, std::ostream &ost)
Definition: numerics.cpp:1177
void affine_pt1(int *Px, int *Py, int p0, int p1, int p2, double f1, int p3)
Definition: numerics.cpp:2556
void make_transform_t_varphi_u_double(int n, double *varphi, double *u, double *A, double *Av, int verbose_level)
Definition: numerics.cpp:1722
double power_of(double x, int n)
Definition: numerics.cpp:2691
void intersection_of_lines(double a1, double b1, double c1, double a2, double b2, double c2, double &x, double &y)
Definition: numerics.cpp:2447
void vec_subtract(double *a, double *b, double *c, int len)
Definition: numerics.cpp:91
void transform_llur(int *in, int *out, int &x, int &y)
Definition: numerics.cpp:2587
int line_centered_tolerant(double *pt1_in, double *pt2_in, double *pt1_out, double *pt2_out, double r, int verbose_level)
Definition: numerics.cpp:1896
void center_of_mass(double *Pts, int len, int *Pt_idx, int nb_pts, double *c)
Definition: numerics.cpp:1032
void transform_dist(int *in, int *out, int &x, int &y)
Definition: numerics.cpp:2627
void Line_through_points(double *X, double *Y, double *a, double *b, double *c, int pt1, int pt2, int line_idx)
Definition: numerics.cpp:2460
void affine_pt2(int *Px, int *Py, int p0, int p1, int p1b, double f1, int p2, int p2b, double f2, int p3)
Definition: numerics.cpp:2565
void clebsch_map_up(double *line1_pt1_coords, double *line1_pt2_coords, double *line2_pt1_coords, double *line2_pt2_coords, double *pt_in, double *pt_out, double *Cubic_coords_povray_ordering, int line1_idx, int line2_idx, int verbose_level)
Definition: numerics.cpp:2918
void substitute_quartic_linear_using_povray_ordering(double *coeff_in, double *coeff_out, double *A4_inv, int verbose_level)
Definition: numerics.cpp:1517
void Intersection_of_lines(double *X, double *Y, double *a, double *b, double *c, int l1, int l2, int pt)
Definition: numerics.cpp:2438
void transform_dist_x(int *in, int *out, int &x)
Definition: numerics.cpp:2640
void intersect_circle_line_through(double rad, double x0, double y0, double pt1_x, double pt1_y, double pt2_x, double pt2_y, double &x1, double &y1, double &x2, double &y2)
Definition: numerics.cpp:2490
void vec_print(std::ostream &ost, double *v, int len)
void transpose_matrix_4x4(double *A, double *At)
Definition: numerics.cpp:1202
void vec_swap(double *from, double *to, int len)
Definition: numerics.cpp:2192
void substitute_cubic_linear_using_povray_ordering(double *coeff_in, double *coeff_out, double *A4_inv, int verbose_level)
Definition: numerics.cpp:1345
void vec_normalize_from_back(double *v, int len)
Definition: numerics.cpp:415
void vec_normalize_to_minus_one_from_back(double *v, int len)
Definition: numerics.cpp:435
double norm_of_vector_2D(int x1, int x2, int y1, int y2)
Definition: numerics.cpp:2580
void line_through_points(double pt1_x, double pt1_y, double pt2_x, double pt2_y, double &a, double &b, double &c)
Definition: numerics.cpp:2468
void mult_matrix_matrix(double *A, double *B, double *C, int m, int n, int o)
Definition: numerics.cpp:855
double dot_product(double *u, double *v, int len)
Definition: numerics.cpp:965
void transform_dist_y(int *in, int *out, int &y)
Definition: numerics.cpp:2650
void vec_copy(double *from, double *to, int len)
Definition: numerics.cpp:2182
void on_circle_double(double *Px, double *Py, int idx, double angle_in_degree, double rad)
Definition: numerics.cpp:2548
void matrix_double_inverse(double *A, double *Av, int n, int verbose_level)
Definition: numerics.cpp:1752
the orbiter library for the classification of combinatorial objects