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 ¢er_point_xyz, 22 Point ¢er_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