File indexing completed on 2024-04-28 04:40:49
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <map/scene/scenegeometry_p.h> 0008 0009 #include <QFile> 0010 #include <QTest> 0011 0012 #include <cmath> 0013 0014 using namespace KOSMIndoorMap; 0015 0016 class SceneGeometryTest: public QObject 0017 { 0018 Q_OBJECT 0019 private Q_SLOTS: 0020 void testPolygonCenter() 0021 { 0022 QPolygonF p1{{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}}; 0023 QCOMPARE(SceneGeometry::polygonCentroid(p1), QPointF(0, 0)); 0024 0025 QPolygonF p2{{{0, 1}, {1, 1}, {1, 0}, {0, 0}}}; 0026 QCOMPARE(SceneGeometry::polygonCentroid(p2), QPointF(0.5, 0.5)); 0027 0028 QPolygonF p3{{{0, 1}, {1, 0}, {0, -1}, {-0.5, -0.5}, {-1, 0}}}; 0029 QCOMPARE(SceneGeometry::polygonCentroid(p3), QPointF(0, 0)); 0030 0031 QPolygonF p4{{{0.273, 0.146}, {0.423, 0.496}, {0.415, 0.499}, {0.266, 0.149}}}; 0032 // QCOMPARE((SceneGeometry::polygonCentroid(p4) * 1000000).toPoint(), QPoint(345669, 325821)); 0033 // make the test pass on 32bit platforms too 0034 QCOMPARE((SceneGeometry::polygonCentroid(p4) * 1000000).toPoint().x(), 345669); 0035 QVERIFY((SceneGeometry::polygonCentroid(p4) * 1000000).toPoint().y() >= 325821); 0036 QVERIFY((SceneGeometry::polygonCentroid(p4) * 1000000).toPoint().y() <= 325822); 0037 0038 QPolygonF p5{{{273, 146}, {423, 496}, {415, 499}, {266, 149}}}; 0039 // QCOMPARE((SceneGeometry::polygonCentroid(p5) * 1000).toPoint(), QPoint(345669, 325821)); 0040 // make the test pass on 32bit platforms too 0041 QCOMPARE((SceneGeometry::polygonCentroid(p5) * 1000).toPoint().x(), 345669); 0042 QVERIFY((SceneGeometry::polygonCentroid(p5) * 1000).toPoint().y() >= 325821); 0043 QVERIFY((SceneGeometry::polygonCentroid(p5) * 1000).toPoint().y() <= 325822); 0044 } 0045 0046 void testLineMidPoint() 0047 { 0048 QPolygonF p1{{{1,1}, {2,2}, {2,2}}}; 0049 QCOMPARE(SceneGeometry::polylineMidPoint(p1), QPointF(1.5, 1.5)); 0050 0051 QPolygonF p2{{{1,1}, {2,2}, {3,3}}}; 0052 QCOMPARE(SceneGeometry::polylineMidPoint(p2), QPointF(2, 2)); 0053 0054 QPolygonF p3{{{1,1}, {2,2}, {21,21}}}; 0055 QCOMPARE(SceneGeometry::polylineMidPoint(p3), QPointF(11, 11)); 0056 } 0057 0058 void testPathAngle() 0059 { 0060 QPolygonF p1{{{1,1}, {2,2}, {2,2}}}; 0061 QCOMPARE(SceneGeometry::polylineMidPointAngle(p1), 45.0); 0062 0063 QPolygonF p2{{{1,1}, {2,2}, {2,20}}}; 0064 QCOMPARE(SceneGeometry::polylineMidPointAngle(p2), 90.0); 0065 } 0066 0067 void testDistanceToLine() 0068 { 0069 QLineF line({1,1}, {3, 1}); 0070 QCOMPARE(SceneGeometry::distanceToLine(line, {0, 1}), 1.0); 0071 QCOMPARE(SceneGeometry::distanceToLine(line, {1, 1}), 0.0); 0072 QCOMPARE(SceneGeometry::distanceToLine(line, {2, 1}), 0.0); 0073 QCOMPARE(SceneGeometry::distanceToLine(line, {3, 1}), 0.0); 0074 QCOMPARE(SceneGeometry::distanceToLine(line, {4, 1}), 1.0); 0075 0076 QCOMPARE(SceneGeometry::distanceToLine(line, {0, 2}), std::sqrt(2.0)); 0077 QCOMPARE(SceneGeometry::distanceToLine(line, {1, 2}), 1.0); 0078 QCOMPARE(SceneGeometry::distanceToLine(line, {2, 2}), 1.0); 0079 QCOMPARE(SceneGeometry::distanceToLine(line, {3, 2}), 1.0); 0080 QCOMPARE(SceneGeometry::distanceToLine(line, {4, 2}), std::sqrt(2.0)); 0081 0082 QCOMPARE(SceneGeometry::distanceToLine(line, {0, 0}), std::sqrt(2.0)); 0083 QCOMPARE(SceneGeometry::distanceToLine(line, {1, 0}), 1.0); 0084 QCOMPARE(SceneGeometry::distanceToLine(line, {2, 0}), 1.0); 0085 QCOMPARE(SceneGeometry::distanceToLine(line, {3, 0}), 1.0); 0086 QCOMPARE(SceneGeometry::distanceToLine(line, {4, 0}), std::sqrt(2.0)); 0087 } 0088 }; 0089 0090 QTEST_GUILESS_MAIN(SceneGeometryTest) 0091 0092 #include "scenegeometrytest.moc"