World Builder  0.1.0-pre
A geodyanmic initial conditions generator
utilities.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2018 by the authors of the World Builder code.
3 
4  This file is part of the World Builder.
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published
8  by the Free Software Foundation, either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef _world_builder_utilities_h
21 #define _world_builder_utilities_h
22 
23 #include <vector>
24 
25 #include <boost/property_tree/json_parser.hpp>
26 
27 #include <world_builder/point.h>
30 
31 using boost::property_tree::ptree;
32 
33 namespace WorldBuilder
34 {
35 
36  namespace CoordinateSystems
37  {
38  class Interface;
39  }
40  namespace Utilities
41  {
42 
47  bool
48  polygon_contains_point(const std::vector<Point<2> > &point_list,
49  const Point<2> &point);
50 
56  double
57  signed_distance_to_polygon(const std::vector<Point<2> > &point_list_,
58  const Point<2> &point_);
59 
60 
61  /*
62  * A class that represents a point in a chosen coordinate system.
63  */
65  {
66  public:
70  NaturalCoordinate(const std::array<double,3> &position,
71  const ::WorldBuilder::CoordinateSystems::Interface &coordinate_system);
72 
76  NaturalCoordinate(const Point<3> &position,
77  const ::WorldBuilder::CoordinateSystems::Interface &coordinate_system);
78 
83  const std::array<double,3> &get_coordinates();
84 
89  const std::array<double,2> get_surface_coordinates() const;
90 
95  double get_depth_coordinate() const;
96 
97  private:
102  CoordinateSystem coordinate_system;
103 
107  std::array<double,3> coordinates;
108  };
109 
116  std::array<double,3>
118 
124  Point<3>
125  spherical_to_cartesian_coordinates(const std::array<double,3> &scoord);
126 
132  std::array<double,3>
134  const double semi_major_axis_a,
135  const double eccentricity);
136 
141  Point<3>
142  ellipsoidal_to_cartesian_coordinates(const std::array<double,3> &phi_theta_d,
143  const double semi_major_axis_a,
144  const double eccentricity);
145 
152  string_to_coordinate_system (const std::string &);
153 
154 
158  template<int dim>
159  const std::array<double,dim> convert_point_to_array(const Point<dim> &point);
160 
164  double
165  string_to_double(const std::string &string);
166 
170  double
171  string_to_int(const std::string &string);
172 
173 
177  double
178  string_to_unsigned_int(const std::string &string);
179 
185  boost::optional<std::string>
186  get_from_ptree(const ptree &tree,
187  const std::string &path,
188  const std::string &key,
189  const bool required = true,
190  const std::string &path_separator = ".");
191 
192 
198  boost::optional<std::string>
199  get_from_ptree_abs(const ptree &tree,
200  const std::string &path,
201  const std::string &key,
202  const bool required = true,
203  const std::string &path_separator = ".");
204 
205  //std::string
206  //escape_string(std::string &original);
207 
212  std::string indent(int level);
213 
218  std::stringstream print_tree (const ptree &pt, int level);
219  }
220 }
221 
222 
223 #endif
boost::optional< std::string > get_from_ptree(const ptree &tree, const std::string &path, const std::string &key, const bool required, const std::string &path_separator)
Definition: utilities.cc:410
std::array< double, 3 > cartesian_to_spherical_coordinates(const Point< 3 > &position)
Definition: utilities.cc:283
Point< 3 > ellipsoidal_to_cartesian_coordinates(const std::array< double, 3 > &phi_theta_d, const double semi_major_axis_a, const double eccentricity)
std::stringstream print_tree(const ptree &pt, int level)
Definition: utilities.cc:454
std::array< double, 3 > cartesian_to_ellipsoidal_coordinates(const Point< 3 > &position, const double semi_major_axis_a, const double eccentricity)
Point< 3 > spherical_to_cartesian_coordinates(const std::array< double, 3 > &scoord)
Definition: utilities.cc:301
double string_to_unsigned_int(const std::string &string)
Definition: utilities.cc:387
const std::array< double, dim > convert_point_to_array(const Point< dim > &point_)
Definition: utilities.cc:331
std::string indent(int level)
Definition: utilities.cc:447
boost::optional< std::string > get_from_ptree_abs(const ptree &tree, const std::string &path, const std::string &key, const bool required, const std::string &path_separator)
Definition: utilities.cc:423
double string_to_double(const std::string &string)
Definition: utilities.cc:340
bool polygon_contains_point(const std::vector< Point< 2 > > &point_list, const Point< 2 > &point)
Definition: utilities.cc:32
double string_to_int(const std::string &string)
Definition: utilities.cc:363
CoordinateSystem string_to_coordinate_system(const std::string &coordinate_system)
Definition: utilities.cc:316
double signed_distance_to_polygon(const std::vector< Point< 2 > > &point_list, const Point< 2 > &point)
Definition: utilities.cc:132