World Builder  1.1.0-pre
A geodynamic initial conditions generator
bezier_curve.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2018-2024 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_OBJECTS_BEZIER_CURVE_H
21 #define WORLD_BUILDER_OBJECTS_BEZIER_CURVE_H
22 
24 #include "world_builder/point.h"
25 #include <array>
26 #include <vector>
27 
28 namespace WorldBuilder
29 {
30  namespace Objects
31  {
32 
38  {
39  public:
46  BezierCurve() = default;
47 
54  BezierCurve(const std::vector<Point<2> > &p, const std::vector<double> &angle_constraints = {});
55 
66  ClosestPointOnCurve closest_point_on_curve_segment(const Point<2> &p, const bool verbose = false) const;
67 
75  Point<2> operator()(const size_t i, const double x) const;
76 
77  private:
78  std::vector<Point<2> > points;
79  std::vector<std::array<Point<2>,2 > > control_points;
80  std::vector<double> lengths;
81  std::vector<double> angles;
82 
83  };
84  }
85 
86 }
87 
88 
89 #endif
Point< 2 > operator()(const size_t i, const double x) const
Class for circle line/spline, including interpolation on it.
Definition: bezier_curve.h:37
BezierCurve()=default
Construct a new Bezier Curve object.
std::vector< Point< 2 > > points
Definition: bezier_curve.h:78
std::vector< std::array< Point< 2 >, 2 > > control_points
Definition: bezier_curve.h:79
std::vector< double > angles
Definition: bezier_curve.h:81
ClosestPointOnCurve closest_point_on_curve_segment(const Point< 2 > &p, const bool verbose=false) const
Finds the closest point on the curve. If the the closest point doesn&#39;t fall on the segment...
std::vector< double > lengths
Definition: bezier_curve.h:80