Vulcan
Aerospace Engineering Utilities Built on Janus
Loading...
Searching...
No Matches
EarthProviders.hpp
Go to the documentation of this file.
1// Vulcan Earth-Local Providers
2// Providers for frames that are children of ECEF
3#pragma once
4
9
10namespace vulcan {
11
12template <typename Scalar>
13class NEDProvider final : public TransformProvider<Scalar> {
14 public:
15 NEDProvider(Scalar lon, Scalar lat)
16 : frame_(CoordinateFrame<Scalar>::ned(lon, lat)) {}
17
18 [[nodiscard]] Vec3<Scalar>
19 to_parent(const Vec3<Scalar> &v_ned) const override {
20 return frame_.to_ecef(v_ned);
21 }
22
23 [[nodiscard]] Vec3<Scalar>
24 from_parent(const Vec3<Scalar> &v_ecef) const override {
25 return frame_.from_ecef(v_ecef);
26 }
27
28 [[nodiscard]] Vec3<Scalar>
29 position_to_parent(const Vec3<Scalar> &pos_ned) const override {
30 return frame_.position_to_ecef(pos_ned);
31 }
32
33 [[nodiscard]] Vec3<Scalar>
34 position_from_parent(const Vec3<Scalar> &pos_ecef) const override {
35 return frame_.position_from_ecef(pos_ecef);
36 }
37
38 [[nodiscard]] const CoordinateFrame<Scalar> &frame() const {
39 return frame_;
40 }
41
42 private:
44};
45
46template <typename Scalar>
47class ENUProvider final : public TransformProvider<Scalar> {
48 public:
49 ENUProvider(Scalar lon, Scalar lat)
50 : frame_(CoordinateFrame<Scalar>::enu(lon, lat)) {}
51
52 [[nodiscard]] Vec3<Scalar>
53 to_parent(const Vec3<Scalar> &v_enu) const override {
54 return frame_.to_ecef(v_enu);
55 }
56
57 [[nodiscard]] Vec3<Scalar>
58 from_parent(const Vec3<Scalar> &v_ecef) const override {
59 return frame_.from_ecef(v_ecef);
60 }
61
62 [[nodiscard]] Vec3<Scalar>
63 position_to_parent(const Vec3<Scalar> &pos_enu) const override {
64 return frame_.position_to_ecef(pos_enu);
65 }
66
67 [[nodiscard]] Vec3<Scalar>
68 position_from_parent(const Vec3<Scalar> &pos_ecef) const override {
69 return frame_.position_from_ecef(pos_ecef);
70 }
71
72 [[nodiscard]] const CoordinateFrame<Scalar> &frame() const {
73 return frame_;
74 }
75
76 private:
78};
79
80template <typename Scalar>
81class GeocentricProvider final : public TransformProvider<Scalar> {
82 public:
83 GeocentricProvider(Scalar lon, Scalar lat_gc)
84 : frame_(local_geocentric(lon, lat_gc)) {}
85
86 [[nodiscard]] Vec3<Scalar>
87 to_parent(const Vec3<Scalar> &v_local) const override {
88 return frame_.to_ecef(v_local);
89 }
90
91 [[nodiscard]] Vec3<Scalar>
92 from_parent(const Vec3<Scalar> &v_ecef) const override {
93 return frame_.from_ecef(v_ecef);
94 }
95
96 [[nodiscard]] Vec3<Scalar>
97 position_to_parent(const Vec3<Scalar> &pos_local) const override {
98 return frame_.position_to_ecef(pos_local);
99 }
100
101 [[nodiscard]] Vec3<Scalar>
102 position_from_parent(const Vec3<Scalar> &pos_ecef) const override {
103 return frame_.position_from_ecef(pos_ecef);
104 }
105
106 [[nodiscard]] const CoordinateFrame<Scalar> &frame() const {
107 return frame_;
108 }
109
110 private:
112};
113
114template <typename Scalar>
115class RailProvider final : public TransformProvider<Scalar> {
116 public:
117 RailProvider(const LLA<Scalar> &origin, Scalar azimuth, Scalar elevation,
118 const EarthModel &m = EarthModel::WGS84())
119 : frame_(local_rail(origin, azimuth, elevation, m)) {}
120
121 [[nodiscard]] Vec3<Scalar>
122 to_parent(const Vec3<Scalar> &v_local) const override {
123 return frame_.to_ecef(v_local);
124 }
125
126 [[nodiscard]] Vec3<Scalar>
127 from_parent(const Vec3<Scalar> &v_ecef) const override {
128 return frame_.from_ecef(v_ecef);
129 }
130
131 [[nodiscard]] Vec3<Scalar>
132 position_to_parent(const Vec3<Scalar> &pos_local) const override {
133 return frame_.position_to_ecef(pos_local);
134 }
135
136 [[nodiscard]] Vec3<Scalar>
137 position_from_parent(const Vec3<Scalar> &pos_ecef) const override {
138 return frame_.position_from_ecef(pos_ecef);
139 }
140
141 [[nodiscard]] const CoordinateFrame<Scalar> &frame() const {
142 return frame_;
143 }
144
145 private:
147};
148
149template <typename Scalar>
150class CDAProvider final : public TransformProvider<Scalar> {
151 public:
152 CDAProvider(const LLA<Scalar> &origin, Scalar bearing,
153 const EarthModel &m = EarthModel::WGS84())
154 : frame_(local_cda(origin, bearing, m)) {}
155
156 [[nodiscard]] Vec3<Scalar>
157 to_parent(const Vec3<Scalar> &v_local) const override {
158 return frame_.to_ecef(v_local);
159 }
160
161 [[nodiscard]] Vec3<Scalar>
162 from_parent(const Vec3<Scalar> &v_ecef) const override {
163 return frame_.from_ecef(v_ecef);
164 }
165
166 [[nodiscard]] Vec3<Scalar>
167 position_to_parent(const Vec3<Scalar> &pos_local) const override {
168 return frame_.position_to_ecef(pos_local);
169 }
170
171 [[nodiscard]] Vec3<Scalar>
172 position_from_parent(const Vec3<Scalar> &pos_ecef) const override {
173 return frame_.position_from_ecef(pos_ecef);
174 }
175
176 [[nodiscard]] const CoordinateFrame<Scalar> &frame() const {
177 return frame_;
178 }
179
180 private:
182};
183
184} // namespace vulcan
Vec3< Scalar > to_parent(const Vec3< Scalar > &v_local) const override
Definition EarthProviders.hpp:157
const CoordinateFrame< Scalar > & frame() const
Definition EarthProviders.hpp:176
Vec3< Scalar > position_from_parent(const Vec3< Scalar > &pos_ecef) const override
Definition EarthProviders.hpp:172
Vec3< Scalar > from_parent(const Vec3< Scalar > &v_ecef) const override
Definition EarthProviders.hpp:162
Vec3< Scalar > position_to_parent(const Vec3< Scalar > &pos_local) const override
Definition EarthProviders.hpp:167
CDAProvider(const LLA< Scalar > &origin, Scalar bearing, const EarthModel &m=EarthModel::WGS84())
Definition EarthProviders.hpp:152
Vec3< Scalar > from_parent(const Vec3< Scalar > &v_ecef) const override
Definition EarthProviders.hpp:58
const CoordinateFrame< Scalar > & frame() const
Definition EarthProviders.hpp:72
Vec3< Scalar > position_from_parent(const Vec3< Scalar > &pos_ecef) const override
Definition EarthProviders.hpp:68
Vec3< Scalar > position_to_parent(const Vec3< Scalar > &pos_enu) const override
Definition EarthProviders.hpp:63
Vec3< Scalar > to_parent(const Vec3< Scalar > &v_enu) const override
Definition EarthProviders.hpp:53
ENUProvider(Scalar lon, Scalar lat)
Definition EarthProviders.hpp:49
const CoordinateFrame< Scalar > & frame() const
Definition EarthProviders.hpp:106
Vec3< Scalar > position_from_parent(const Vec3< Scalar > &pos_ecef) const override
Definition EarthProviders.hpp:102
GeocentricProvider(Scalar lon, Scalar lat_gc)
Definition EarthProviders.hpp:83
Vec3< Scalar > from_parent(const Vec3< Scalar > &v_ecef) const override
Definition EarthProviders.hpp:92
Vec3< Scalar > position_to_parent(const Vec3< Scalar > &pos_local) const override
Definition EarthProviders.hpp:97
Vec3< Scalar > to_parent(const Vec3< Scalar > &v_local) const override
Definition EarthProviders.hpp:87
const CoordinateFrame< Scalar > & frame() const
Definition EarthProviders.hpp:38
Vec3< Scalar > position_from_parent(const Vec3< Scalar > &pos_ecef) const override
Definition EarthProviders.hpp:34
Vec3< Scalar > position_to_parent(const Vec3< Scalar > &pos_ned) const override
Definition EarthProviders.hpp:29
Vec3< Scalar > to_parent(const Vec3< Scalar > &v_ned) const override
Definition EarthProviders.hpp:19
NEDProvider(Scalar lon, Scalar lat)
Definition EarthProviders.hpp:15
Vec3< Scalar > from_parent(const Vec3< Scalar > &v_ecef) const override
Definition EarthProviders.hpp:24
Vec3< Scalar > to_parent(const Vec3< Scalar > &v_local) const override
Definition EarthProviders.hpp:122
RailProvider(const LLA< Scalar > &origin, Scalar azimuth, Scalar elevation, const EarthModel &m=EarthModel::WGS84())
Definition EarthProviders.hpp:117
Vec3< Scalar > position_to_parent(const Vec3< Scalar > &pos_local) const override
Definition EarthProviders.hpp:132
Vec3< Scalar > position_from_parent(const Vec3< Scalar > &pos_ecef) const override
Definition EarthProviders.hpp:137
Vec3< Scalar > from_parent(const Vec3< Scalar > &v_ecef) const override
Definition EarthProviders.hpp:127
const CoordinateFrame< Scalar > & frame() const
Definition EarthProviders.hpp:141
Definition Aerodynamics.hpp:11
CoordinateFrame< Scalar > local_geocentric(Scalar lon, Scalar lat_gc)
Definition FrameLocal.hpp:75
CoordinateFrame< Scalar > local_rail(const LLA< Scalar > &lla_origin, const Scalar &azimuth, const Scalar &elevation, const EarthModel &m=EarthModel::WGS84())
Definition FrameLocal.hpp:171
CoordinateFrame< Scalar > local_cda(const LLA< Scalar > &lla_origin, const Scalar &bearing, const EarthModel &m=EarthModel::WGS84())
Definition FrameLocal.hpp:258
Definition FramePrimitives.hpp:44
Definition EarthModel.hpp:27
static constexpr EarthModel WGS84()
WGS84 reference ellipsoid (most common for GPS/navigation).
Definition EarthModel.hpp:45
Definition Geodetic.hpp:27
Interface for a frame edge transform (child <-> parent).
Definition TransformProvider.hpp:16