Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+308
@@ -0,0 +1,308 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Unittest
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#include "polygons_unit_test.h"
|
||||
#include <Services/AreaEffectSimulation/Utils/polygons.h>
|
||||
|
||||
#include <nglapplication/nglcoreapplication.h>
|
||||
#include <LtsCoordTrans/lts_coord_trans.h>
|
||||
#include <QTransform>
|
||||
#include <QTextStream> //
|
||||
#include <QtTest/QTest>
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
#include <iostream>
|
||||
|
||||
using namespace AreaEffectSimulation;
|
||||
|
||||
double distanceMeter(const LtsCoordTrans::UtmCoordinate utmCoord1, const LtsCoordTrans::UtmCoordinate &utmCoord2)
|
||||
{
|
||||
double dist = LtsCoordTrans::distance(utmCoord1, utmCoord2);
|
||||
qCritical() << " dist" << dist;
|
||||
return dist;
|
||||
}
|
||||
|
||||
double distanceMeter(const QPointF &geoCoord1, const LtsCoordTrans::UtmCoordinate &utmCoord2)
|
||||
{
|
||||
const LtsCoordTrans::UtmCoordinate &utmCoord1 = LtsCoordTrans::UtmCoordinate::fromGeographic(geoCoord1);
|
||||
double dist = LtsCoordTrans::distance(utmCoord1, utmCoord2);
|
||||
qCritical() << " dist" << dist;
|
||||
return dist;
|
||||
}
|
||||
|
||||
|
||||
void UnitTestPolygons::test_QTrans()
|
||||
{
|
||||
QPolygonF poly;
|
||||
poly.reserve(3);
|
||||
poly.append(QPointF(0, 0));
|
||||
poly.append(QPointF(1, 0));
|
||||
poly.append(QPointF(2, 0));
|
||||
|
||||
//rotate
|
||||
{
|
||||
QTransform trans;
|
||||
trans.rotate(90);
|
||||
|
||||
QPolygonF poly2a = trans.map(poly);
|
||||
qCritical() << "poly2a = " << poly2a;
|
||||
|
||||
QVERIFY2(poly2a.first() == QPointF(0, 0), "QTransform failed");
|
||||
QVERIFY2(poly2a.last() == QPointF(0, 2), "QTransform failed; vec.last()");
|
||||
}
|
||||
|
||||
{
|
||||
QPolygonF poly2b = QTransform().rotate(90).map(poly); // squence in a single line
|
||||
|
||||
qCritical() << "poly2b = " << poly2b;
|
||||
|
||||
QVERIFY2(poly2b.first() == QPointF(0, 0), "QTransform failed");
|
||||
QVERIFY2(poly2b.last() == QPointF(0, 2), "QTransform failed; vec.last()");
|
||||
}
|
||||
}
|
||||
|
||||
void printAbl(const Polygons::AreaBottomLeft &obj)
|
||||
{
|
||||
qCritical() << " AreaBottomLeft = "
|
||||
<< ", cornerBL=" << obj.m_cornerBottomLeft
|
||||
<< ", m_width=" << obj.m_width
|
||||
<< ", m_height=" << obj.m_height
|
||||
<< ", m_height=" << obj.m_height;
|
||||
}
|
||||
|
||||
|
||||
void UnitTestPolygons::test_explosionClusterAddTla()
|
||||
{
|
||||
double width = 1000; // x
|
||||
double height = 100; // y
|
||||
double rotation_deg = 0;
|
||||
const Polygons::AreaBottomLeft boundaryOrg(QPointF(123, 123), width, height, rotation_deg);
|
||||
printAbl(boundaryOrg);
|
||||
|
||||
|
||||
{
|
||||
int zog = 0;
|
||||
const Polygons::AreaBottomLeft areaBlWithZog = Polygons::explosionClusterAddTla(boundaryOrg, zog);
|
||||
printAbl(areaBlWithZog);
|
||||
QVERIFY2(areaBlWithZog.m_cornerBottomLeft == boundaryOrg.m_cornerBottomLeft, "m_cornerBottomLeft failed");
|
||||
QVERIFY2(areaBlWithZog.m_width == boundaryOrg.m_width, "m_width failed");
|
||||
QVERIFY2(areaBlWithZog.m_height == boundaryOrg.m_height, "m_height failed");
|
||||
QVERIFY2(areaBlWithZog.m_rotation_deg == boundaryOrg.m_rotation_deg, "m_rotation_deg failed");
|
||||
}
|
||||
|
||||
{
|
||||
int zog = 10;
|
||||
const Polygons::AreaBottomLeft areaBlWithZog = Polygons::explosionClusterAddTla(boundaryOrg, zog);
|
||||
printAbl(areaBlWithZog);
|
||||
QVERIFY2(areaBlWithZog.m_cornerBottomLeft == QPointF(113, 113), "m_cornerBottomLeft failed");
|
||||
QVERIFY2(areaBlWithZog.m_width == boundaryOrg.m_width+(2*zog), "m_width failed");
|
||||
QVERIFY2(areaBlWithZog.m_height == boundaryOrg.m_height+(2*zog), "m_height failed");
|
||||
QVERIFY2(areaBlWithZog.m_rotation_deg == boundaryOrg.m_rotation_deg, "m_rotation_deg failed");
|
||||
}
|
||||
|
||||
{
|
||||
double rotation_deg = 30;
|
||||
const Polygons::AreaBottomLeft boundaryOrgRot(QPointF(123, 123), width, height, rotation_deg);
|
||||
int zog = 10;
|
||||
const Polygons::AreaBottomLeft areaBlWithZog = Polygons::explosionClusterAddTla(boundaryOrgRot, zog);
|
||||
printAbl(areaBlWithZog);
|
||||
|
||||
QVERIFY2((areaBlWithZog.m_cornerBottomLeft - QPointF(109.34, 119.34)).manhattanLength() < 1, "m_cornerBottomLeft failed");
|
||||
QVERIFY2(areaBlWithZog.m_width == boundaryOrgRot.m_width+(2*zog), "m_width failed");
|
||||
QVERIFY2(areaBlWithZog.m_height == boundaryOrgRot.m_height+(2*zog), "m_height failed");
|
||||
QVERIFY2(areaBlWithZog.m_rotation_deg == boundaryOrgRot.m_rotation_deg, "m_rotation_deg failed");
|
||||
}
|
||||
}
|
||||
|
||||
void UnitTestPolygons::test_explosionClusterAreaToMtpsRelativeToBottomLeft_noRotation()
|
||||
{
|
||||
double width = 1000; // x
|
||||
double height = 100; // y
|
||||
double rotation_deg = 0;
|
||||
const Polygons::AreaBottomLeft boundary(QPointF(123, 123), width, height, rotation_deg);
|
||||
|
||||
const int numberOfMTPs = 4;
|
||||
double singleWidthOut = 0;
|
||||
double singleHeightOut = 0;
|
||||
|
||||
QVector<QPointF> vec = Polygons::explosionClusterAreaToMtpsRelativeToBottomLeft(boundary, numberOfMTPs, &singleWidthOut, &singleHeightOut);
|
||||
|
||||
qCritical() << "vec = " << vec;
|
||||
qCritical() << "singleWidthOut = " << singleWidthOut;
|
||||
qCritical() << "singleHeightOut = " << singleHeightOut;
|
||||
|
||||
// independent on rotation
|
||||
QVERIFY2(vec.size() == numberOfMTPs, "noRotation failed; numberOfMTPs");
|
||||
QVERIFY2(singleWidthOut == width/4, "noRotation failed; singleWidthOut");
|
||||
QVERIFY2(singleHeightOut == height, "noRotation failed; singleHeightOut");
|
||||
|
||||
// depending on rotation
|
||||
QVERIFY2(vec.first() == QPointF(125.0, 50), "noRotation failed");
|
||||
QVERIFY2(vec[1] == QPointF(375.0, 50), "noRotation failed");
|
||||
QVERIFY2(vec[2] == QPointF(625.0, 50), "noRotation failed");
|
||||
QVERIFY2(vec.last() == QPointF(875.0, 50), "noRotation failed");
|
||||
}
|
||||
|
||||
void UnitTestPolygons::test_explosionClusterAreaToMtpsRelativeToBottomLeft_withRotation()
|
||||
{
|
||||
double width = 1000; // x
|
||||
double height = 100; // y
|
||||
double rotation_deg = -90;
|
||||
const Polygons::AreaBottomLeft boundary(QPointF(123, 123), width, height, rotation_deg);
|
||||
|
||||
const int numberOfMTPs = 4;
|
||||
double singleWidthOut = 0;
|
||||
double singleHeightOut = 0;
|
||||
|
||||
QVector<QPointF> vec = Polygons::explosionClusterAreaToMtpsRelativeToBottomLeft(boundary, numberOfMTPs, &singleWidthOut, &singleHeightOut);
|
||||
|
||||
qCritical() << "vec = " << vec;
|
||||
qCritical() << "singleWidthOut = " << singleWidthOut;
|
||||
qCritical() << "singleHeightOut = " << singleHeightOut;
|
||||
|
||||
// independent on rotation
|
||||
QVERIFY2(vec.size() == numberOfMTPs, "withRotation failed; numberOfMTPs");
|
||||
QVERIFY2(singleWidthOut == width/4, "withRotation failed; singleWidthOut");
|
||||
QVERIFY2(singleHeightOut == height, "withRotation failed; singleHeightOut");
|
||||
|
||||
// depending on rotation
|
||||
QVERIFY2(vec.first() == QPointF(-50, 125), "withRotation failed");
|
||||
QVERIFY2(vec[1] == QPointF(-50, 375), "withRotation failed");
|
||||
QVERIFY2(vec[2] == QPointF(-50, 625), "withRotation failed");
|
||||
QVERIFY2(vec.last() == QPointF(-50, 875), "withRotation failed");
|
||||
}
|
||||
|
||||
void UnitTestPolygons::test_explosionClusterSingleExplosionsGAUSS_Mtp()
|
||||
{
|
||||
Database::AesExplosionCluster explosionClusterDb;
|
||||
|
||||
double width = 1000; // x
|
||||
double height = 100; // y
|
||||
double rotation_deg = 0;
|
||||
|
||||
LtsCoordTrans::UtmCoordinate UTM = LtsCoordTrans::UtmCoordinate::fromMgrs(QLatin1String("32UMD100000100000")); // 32U MD 100000 100000
|
||||
|
||||
const Polygons::AreaBottomLeft boundary(UTM.geographic(), width, height, rotation_deg);
|
||||
|
||||
explosionClusterDb.id = 1;
|
||||
|
||||
explosionClusterDb.impactPosition = boundary.m_cornerBottomLeft;
|
||||
explosionClusterDb.impactLength = boundary.m_height;
|
||||
explosionClusterDb.impactWidth = boundary.m_width;
|
||||
explosionClusterDb.rotationAngle = boundary.m_rotation_deg;
|
||||
|
||||
explosionClusterDb.zog = 0;
|
||||
|
||||
explosionClusterDb.impactCount = 8;
|
||||
explosionClusterDb.mhpCountRequest = 4;
|
||||
|
||||
// rotation = 0
|
||||
{
|
||||
double mtpRotationNorthDegree = explosionClusterDb.rotationAngle;
|
||||
const QVector<QPointF> &singleExplosions = Polygons::explosionClusterSingleExplosionsGAUSS_Mtp(explosionClusterDb, mtpRotationNorthDegree);
|
||||
|
||||
qCritical() << "rotation_deg = " << rotation_deg
|
||||
<< ", mtpRotationNorthDegree = " << mtpRotationNorthDegree
|
||||
<< ", explosionClusterDb = " << singleExplosions;
|
||||
for (const auto &singleExplosion : qAsConst(singleExplosions))
|
||||
qDebug() << "singleExUtm: " << LtsCoordTrans::UtmCoordinate::fromGeographic(singleExplosion).mgrs();
|
||||
|
||||
size_t i = 0;
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10029 10048"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10298 10042"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10682 10046"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10908 10055"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10101 10076"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10386 10022"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10581 10032"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10828 10065"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
}
|
||||
|
||||
// rotation = -90
|
||||
rotation_deg = -90;
|
||||
const Polygons::AreaBottomLeft boundary2(UTM.geographic(), width, height, rotation_deg);
|
||||
|
||||
explosionClusterDb.id = 1;
|
||||
|
||||
explosionClusterDb.impactPosition = boundary2.m_cornerBottomLeft;
|
||||
explosionClusterDb.impactLength = boundary2.m_height;
|
||||
explosionClusterDb.impactWidth = boundary2.m_width;
|
||||
explosionClusterDb.rotationAngle = boundary2.m_rotation_deg;
|
||||
{
|
||||
double mtpRotationNorthDegree = explosionClusterDb.rotationAngle;
|
||||
const QVector<QPointF> &singleExplosions = Polygons::explosionClusterSingleExplosionsGAUSS_Mtp(explosionClusterDb, mtpRotationNorthDegree);
|
||||
|
||||
qCritical() << "rotation_deg = " << rotation_deg
|
||||
<< ", mtpRotationNorthDegree = " << mtpRotationNorthDegree
|
||||
<< " explosionClusterDb = " << singleExplosions;
|
||||
for (const auto &singleExplosion : qAsConst(singleExplosions))
|
||||
qCritical() << "singleExUtm: " << LtsCoordTrans::UtmCoordinate::fromGeographic(singleExplosion).mgrs();
|
||||
|
||||
size_t i = 0;
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09952 10029"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09958 10298"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09954 10682"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09945 10908"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09924 10101"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09978 10386"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09968 10581"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09935 10828"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
}
|
||||
|
||||
// rotation = -45
|
||||
rotation_deg = -45;
|
||||
int zog = 100;
|
||||
|
||||
const Polygons::AreaBottomLeft boundary3(UTM.geographic(), width, height, rotation_deg);
|
||||
|
||||
explosionClusterDb.id = 1;
|
||||
|
||||
explosionClusterDb.impactPosition = boundary3.m_cornerBottomLeft;
|
||||
explosionClusterDb.impactLength = boundary3.m_height;
|
||||
explosionClusterDb.impactWidth = boundary3.m_width;
|
||||
explosionClusterDb.rotationAngle = boundary3.m_rotation_deg;
|
||||
|
||||
explosionClusterDb.zog = zog;
|
||||
{
|
||||
double mtpRotationNorthDegree = explosionClusterDb.rotationAngle;
|
||||
const QVector<QPointF> &singleExplosions = Polygons::explosionClusterSingleExplosionsGAUSS_Mtp(explosionClusterDb, mtpRotationNorthDegree);
|
||||
|
||||
qCritical() << "rotation_deg = " << rotation_deg
|
||||
<< ", zog = " << zog
|
||||
<< ", mtpRotationNorthDegree = " << mtpRotationNorthDegree
|
||||
<< " explosionClusterDb = " << singleExplosions;
|
||||
for (const auto &singleExplosion : qAsConst(singleExplosions))
|
||||
qCritical() << "singleExUtm: " << LtsCoordTrans::UtmCoordinate::fromGeographic(singleExplosion).mgrs();
|
||||
|
||||
size_t i = 0;
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09923 09984"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10164 10200"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10480 10536"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10654 10746"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 09925 10104"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10281 10233"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10426 10419"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
QVERIFY2(distanceMeter(singleExplosions[i++], LtsCoordTrans::UtmCoordinate::fromMgrs(QStringLiteral("32U MD 10565 10699"))) < 1, "ERROR, distanceMeter failed!!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
NGLCoreApplication app(argc, argv);
|
||||
app.createLogger("UnitTest_TNE-ALOG", "log4cxxUnitTest.props");
|
||||
|
||||
UnitTestPolygons tc;
|
||||
return QTest::qExec(&tc, argc, argv);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user