ad_map_access
HeadingOperation.hpp
Go to the documentation of this file.
1 // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 //
3 // Copyright (C) 2018-2021 Intel Corporation
4 //
5 // SPDX-License-Identifier: MIT
6 //
7 // ----------------- END LICENSE BLOCK -----------------------------------
12 #pragma once
13 
20 #include "ad/physics/Angle.hpp"
21 #include "ad/physics/Distance.hpp"
22 
24 namespace ad {
26 namespace map {
28 namespace point {
29 
38 ECEFHeading createECEFHeading(ECEFPoint const &start, ECEFPoint const &end);
39 
48 ECEFHeading createECEFHeading(ENUHeading const &yaw, GeoPoint const &enuReferencePoint);
49 
59 ENUHeading createENUHeading(double yawAngleRadian);
60 
70 ENUHeading createENUHeading(physics::Angle const &angle);
71 
82 ENUHeading createENUHeading(ECEFHeading const &ecefHeading);
83 
95 ENUHeading createENUHeading(ECEFHeading const &ecefHeading, GeoPoint const &enuReferencePoint);
96 
108 ENUHeading createENUHeading(ECEFHeading const &ecefHeading, ECEFPoint const &enuReferencePoint);
109 
118 ENUHeading createENUHeading(ENUPoint const &start, ENUPoint const &end);
119 
124 ENUHeading normalizeENUHeading(ENUHeading const &heading);
125 
134 {
135  ENUPoint directionalVector;
136  directionalVector.x = ENUCoordinate(std::cos(static_cast<double>(heading)));
137  directionalVector.y = ENUCoordinate(std::sin(static_cast<double>(heading)));
138  directionalVector.z = ENUCoordinate(0.);
139  return directionalVector;
140 }
141 
150 {
151  ENUPoint orthogonalVector;
152  orthogonalVector.x = ENUCoordinate(-std::sin(static_cast<double>(heading)));
153  orthogonalVector.y = ENUCoordinate(std::cos(static_cast<double>(heading)));
154  orthogonalVector.z = ENUCoordinate(0.);
155  return orthogonalVector;
156 }
157 
169 inline void
170 getDirectionVectorsZPlane(ENUHeading const &heading, ENUPoint &directionalVector, ENUPoint &orthogonalVector)
171 {
172  directionalVector = getDirectionalVectorZPlane(heading);
173  orthogonalVector.x = -directionalVector.y;
174  orthogonalVector.y = directionalVector.x;
175  orthogonalVector.z = ENUCoordinate(0.);
176 }
177 
178 } // namespace point
179 } // namespace map
180 } // namespace ad
181 
190 inline ::ad::map::point::ECEFHeading operator+(::ad::map::point::ECEFHeading const &a,
191  ::ad::map::point::ECEFHeading const &b)
192 {
194 }
195 
204 inline ::ad::map::point::ECEFHeading operator-(::ad::map::point::ECEFHeading const &a,
205  ::ad::map::point::ECEFHeading const &b)
206 {
208 }
209 
219 {
221 }
222 
228 inline ::ad::map::point::ECEFHeading operator*(::ad::map::point::ECEFHeading const &a, ::ad::physics::Distance const &b)
229 {
231 }
232 
238 inline ::ad::map::point::ECEFHeading operator*(::ad::physics::Distance const &b, ::ad::map::point::ECEFHeading const &a)
239 {
241 }
242 
248 inline ::ad::map::point::ECEFHeading operator*(::ad::map::point::ECEFHeading const &a, double const &b)
249 {
251 }
252 
258 inline ::ad::map::point::ECEFHeading operator*(double const &b, ::ad::map::point::ECEFHeading const &a)
259 {
261 }
ad
namespace ad
Definition: GeometryStoreItem.hpp:28
GeoPoint.hpp
ENUHeading.hpp
operator*
double operator*(::ad::map::point::ECEFHeading const &a, ::ad::map::point::ECEFHeading const &b)
calculate the dot product of two ECEFHeading vectors
Definition: HeadingOperation.hpp:218
ECEFPoint.hpp
PointOperation.hpp
ad::map::point::createENUHeading
ENUHeading createENUHeading(double yawAngleRadian)
create a ENUHeading from yaw angle in radians
ad::map::point::getDirectionVectorsZPlane
void getDirectionVectorsZPlane(ENUHeading const &heading, ENUPoint &directionalVector, ENUPoint &orthogonalVector)
get a directional vector of the vectors heading and the orthogonal vector at once
Definition: HeadingOperation.hpp:170
ad::map::point::vectorDotProduct
double vectorDotProduct(PointType const &a, PointType const &b)
calculate the dot product of two vectors
Definition: PointOperation.hpp:54
ad::map::point::ECEFHeading
DataType ECEFHeading.
Definition: ECEFHeading.hpp:45
ad::map::point::vectorAdd
PointType vectorAdd(PointType const &a, PointType const &b)
add two vectors
Definition: PointOperation.hpp:126
ad::map::point::ENUPoint::y
::ad::map::point::ENUCoordinate y
Definition: ENUPoint.hpp:133
ad::map::point::getOrthogonalVectorZPlane
ENUPoint getOrthogonalVectorZPlane(ENUHeading const &heading)
get a vector that is orthogonal to the vectors heading
Definition: HeadingOperation.hpp:149
ad::map::point::vectorSub
PointType vectorSub(PointType const &a, PointType const &b)
subtract two vectors from each right
Definition: PointOperation.hpp:143
ad::map::point::ENUPoint
DataType ENUPoint.
Definition: ENUPoint.hpp:51
operator+
inline ::ad::map::point::ECEFHeading operator+(::ad::map::point::ECEFHeading const &a, ::ad::map::point::ECEFHeading const &b)
add two ECEFHeading vectors
Definition: HeadingOperation.hpp:190
ad::map::point::ENUPoint::z
::ad::map::point::ENUCoordinate z
Definition: ENUPoint.hpp:138
ad::map::point::ENUHeading
DataType ENUHeading.
Definition: ENUHeading.hpp:65
ad::map::point::normalizeENUHeading
ENUHeading normalizeENUHeading(ENUHeading const &heading)
ad::map::point::vectorMultiplyScalar
PointType vectorMultiplyScalar(PointType const &a, double const &b)
multiplies a vector with a scalar
Definition: PointOperation.hpp:65
operator-
inline ::ad::map::point::ECEFHeading operator-(::ad::map::point::ECEFHeading const &a, ::ad::map::point::ECEFHeading const &b)
subtract two ECEFHeading vectors from each right
Definition: HeadingOperation.hpp:204
ad::map::point::ENUPoint::x
::ad::map::point::ENUCoordinate x
Definition: ENUPoint.hpp:128
ad::map::point::getDirectionalVectorZPlane
ENUPoint getDirectionalVectorZPlane(ENUHeading const &heading)
get a directional vector of the heading
Definition: HeadingOperation.hpp:133
ad::map::point::createECEFHeading
ECEFHeading createECEFHeading(ECEFPoint const &start, ECEFPoint const &end)
create a heading in ECEF as a directional vector
ENUPoint.hpp
ECEFHeading.hpp
ad::map::point::ENUCoordinate
DataType ENUCoordinate.
Definition: ENUCoordinate.hpp:65