89 lines
2.1 KiB
C++
Executable File
89 lines
2.1 KiB
C++
Executable File
/**
|
|
* @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
|
|
|