Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Some functions and struct for ElevationMap/LineOfSight (LOS)
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LtsUtilsCore/qpoint3d.h>
|
||||
|
||||
#include <math.h>
|
||||
#include <MathUtils/math_const.h>
|
||||
|
||||
|
||||
#include <QPointF>
|
||||
#include <QVector>
|
||||
|
||||
namespace SituationMap
|
||||
{
|
||||
|
||||
inline bool isInIntervall(double x, double x1, double x2)
|
||||
{
|
||||
return (((x > x1) && (x < x2)) || (((x > x2) && (x < x1))));
|
||||
} // inline bool isInIntervall(double x, double x1, double x2)
|
||||
|
||||
|
||||
inline double radiusWGS84(double lat)
|
||||
{
|
||||
double sinLAT = sin(lat);
|
||||
return (MathConst::WGS84_Major_a * sqrt(1.0 - MathConst::WGS84_SQR_EXC * sinLAT * sinLAT));
|
||||
} // inline double radiusWGS84(double lat)
|
||||
|
||||
|
||||
inline QPointF distance_in_meter_WGS84(const QPointF &start, const QPointF &end) // start, end in LonLat
|
||||
{
|
||||
// todo: prüfen ob Distanz zu groß, dann verbesserte Berechnung !!
|
||||
double lat = (end.y() + start.y()) / 2.0;
|
||||
double faktorLon = MathConst::WGS84_Major_a * cos(lat); // radiusWGS84(lat) * 2.0 * PI;
|
||||
double faktorLat = MathConst::WGS84_Minor_b;
|
||||
|
||||
return QPointF(faktorLon * (end.x() - start.x()), faktorLat * (end.y() - start.y()));
|
||||
|
||||
} // QPointF distance_in_meter_WGS84(const QPointF &start, const QPointF &end)
|
||||
|
||||
|
||||
inline double squareLength(const QPointF &v)
|
||||
{
|
||||
return v.x() * v.x() + v.y() * v.y();
|
||||
} // inline double squareLength(const QPoint & v)
|
||||
|
||||
|
||||
inline double length(const QPointF &v)
|
||||
{
|
||||
return sqrt(squareLength(v));
|
||||
} // inline double length(const QPoint & v)
|
||||
|
||||
|
||||
struct LOSentry // Defines 1 Entry for Line of Sight
|
||||
{
|
||||
LOSentry() = default;
|
||||
LOSentry(double dist, double height) : _dist(dist), _height(height) { ; }
|
||||
|
||||
double &dist() { return _dist; }
|
||||
double &height() { return _height; }
|
||||
|
||||
double dist() const { return _dist; }
|
||||
double height() const { return _height; }
|
||||
|
||||
bool isUndefined() const { return std::isnan(_height); }
|
||||
|
||||
private:
|
||||
|
||||
double _dist = 0; // Distance from Start
|
||||
double _height = -NAN;
|
||||
|
||||
}; /* LOSentry */
|
||||
|
||||
|
||||
using Point3D = LtsUtils::QPoint3D; ///< x = lon ; y = lat , z = elevation/altitude in meters
|
||||
using LOSVector = QVector<LOSentry>;
|
||||
using Vec2dVector = QVector<QPointF>;
|
||||
using Vec3dVector = QVector<Point3D>;
|
||||
|
||||
|
||||
} // SituationMap
|
||||
|
||||
Reference in new issue
Block a user