1 #ifndef VERIFYGRID_H
2 #define VERIFYGRID_H
3 
4 struct Point
5 {
6   double x = 0.0, y = 0.0;
7 };
8 struct Point3D
9 {
10   double X, Y, Z;
11 };
12 
13 int get_actual_number_of_corners(int ncorner, const Varray<Point3D> &cell_corners_xyz_open_cell);
14 int get_no_duplicates(int actual_number_of_corners, const Varray<Point3D> &cell_corners_xyz_open_cell,
15                       std::vector<bool> &marked_duplicate_indices);
16 void copy_unique_corners(int actual_number_of_corners, const Varray<Point3D> &cell_corners_xyz_open_cell,
17                          const std::vector<bool> &marked_duplicate_indices, Varray<Point3D> &cell_corners_xyz_without_duplicates);
18 
19 void set_cell_corners_xyz(int ncorner, const double *cell_corners_lon, const double *cell_corners_lat,
20                           Varray<Point3D> &cell_corners_xyz);
21 void set_center_point_plane_projection(int coordinate_to_ignore, const Point3D &center_point_xyz,
22                                        Point &center_point_plane_projection);
23 void set_cell_corners_plane_projection(int coordinate_to_ignore, int ncorner, const Varray<Point3D> &cell_corners_xyz,
24                                        Varray<Point> &cell_corners_plane_projection);
25 int find_coordinate_to_ignore(const Varray<Point3D> &cell_corners_xyz);
26 double calculate_the_polygon_area(const Varray<Point> &cell_corners, int number_corners);
27 bool are_polygon_vertices_arranged_in_clockwise_order(double cell_area);
28 int winding_numbers_algorithm(const Varray<Point> &cell_corners, int number_corners, const Point &point);
29 
30 #endif /* VERIFYGRID_H */
31