diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/auto.pro | 4 | ||||
-rw-r--r-- | tests/auto/sphere/sphere.pro | 8 | ||||
-rw-r--r-- | tests/auto/sphere/tst_sphere.cpp | 1543 |
3 files changed, 0 insertions, 1555 deletions
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 6f265098..8f23e753 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -31,13 +31,9 @@ SUBDIRS += geotestplugin \ qplacesupplier \ qplacesearchresult \ declarative \ - sphere \ qmlinterface \ maptype contains(config_test_jsondb, yes) { SUBDIRS += qplacemanager_jsondb } - -!contains(QT_CONFIG,private_tests):SUBDIRS -= \ - sphere diff --git a/tests/auto/sphere/sphere.pro b/tests/auto/sphere/sphere.pro deleted file mode 100644 index 3e015e39..00000000 --- a/tests/auto/sphere/sphere.pro +++ /dev/null @@ -1,8 +0,0 @@ -CONFIG += testcase -TARGET = tst_sphere - -QT += location testlib qt3d - -INCLUDEPATH = ../../../src/location/mapsgl - -SOURCES += tst_sphere.cpp diff --git a/tests/auto/sphere/tst_sphere.cpp b/tests/auto/sphere/tst_sphere.cpp deleted file mode 100644 index dc9aa098..00000000 --- a/tests/auto/sphere/tst_sphere.cpp +++ /dev/null @@ -1,1543 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QObject> -#include <QtTest/QtTest> - -#include "../../../src/location/mapsgl/map3d/sphere_p.h" -#include "../../../src/location/mapsgl/map3d/viewportcamera_p.h" -#include "../../../src/location/mapsgl/frustum_p.h" -#include "../../../src/location/mapsgl/map3d/projection3d_p.h" - -#include <QMetaType> - -#include <cmath> - -Q_DECLARE_METATYPE(Sphere) - -class tst_Sphere : public QObject -{ - Q_OBJECT - -public: - tst_Sphere() { - - } - -public slots: - void initTestCase(); - -private slots: - void x_plane(); - void x_plane_data(); - - void xy_plane_straight(); - void xy_plane_straight_data(); - - void xy_plane_skew(); - void xy_plane_skew_data(); - - void xyz_plane(); - void xyz_plane_data(); - - void camera(); - -private: - Sphere emptySphere(double radius) const; - Sphere basicSphere(double radius) const; - - bool test(const QPlane3D &plane, const Sphere &sphereOut); - - QList<QPlane3D> planes() const; - Sphere planeTest(const QList<QPlane3D> &planes, const QList<int> &planeIndices) const; -}; - -void tst_Sphere::initTestCase() -{ -#if defined(Q_OS_LINUX) - QSKIP("Fails on Linux - see QTBUG-22634"); -#endif -} - -Sphere tst_Sphere::emptySphere(double radius) const -{ - return Sphere(radius, QList<SpherePatch>()); -} - -Sphere tst_Sphere::basicSphere(double radius) const -{ - QList<Arc> arcs1In; - - QVector3D origin; - - QVector3D pxv = QVector3D(radius, 0.0, 0.0); - QVector3D pyv = QVector3D(0.0, radius, 0.0); - QVector3D pzv = QVector3D(0.0, 0.0, radius); - - QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); - QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); - QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); - - arcs1In << Arc(pzp, radius, pxv, pyv); - arcs1In << Arc(pxp, radius, pyv, pzv); - arcs1In << Arc(pyp, radius, pzv, pxv); - - SpherePatch patch1In(radius, arcs1In); - - QList<SpherePatch> patchesIn; - - patchesIn << patch1In; - - Sphere sphereIn(radius, patchesIn); - - return sphereIn; -} - -bool tst_Sphere::test(const QPlane3D &plane, const Sphere &sphereOut) -{ - Sphere sphereIn = basicSphere(20000.0); - - sphereIn.intersect(plane); - - if (sphereIn == sphereOut) { - return true; - } else { - qWarning() << sphereIn; - qWarning() << sphereOut; - - return false; - } -} - -void tst_Sphere::x_plane() -{ - QFETCH(QPlane3D, plane); - QFETCH(Sphere, sphereOut); - - QVERIFY(test(plane, sphereOut)); -} - -void tst_Sphere::x_plane_data() -{ - QTest::addColumn<QPlane3D>("plane"); - QTest::addColumn<Sphere>("sphereOut"); - - double radius = 20000.0; - - QVector3D origin; - - QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); - QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); - QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); - - Sphere empty = emptySphere(radius); - Sphere basic = basicSphere(radius); - - double factor = radius * 0.0; - double factor2 = sqrt((radius * radius) - (factor * factor)); - - QTest::newRow("positive x forward 0.0") - << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("positive x backward 0.0") - << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << empty; - - QTest::newRow("negative x forward 0.0") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("negative x backward 0.0") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << empty; - - - factor = radius * 0.5; - factor2 = sqrt((radius * radius) - (factor * factor)); - - QPlane3D pxf050_plane = QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)); - - QList<Arc> pxf050_patch0_arcs; - pxf050_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(factor, factor2, 0)); - pxf050_patch0_arcs << Arc(pxf050_plane, radius, - QVector3D(factor, factor2, 0), - QVector3D(factor, 0, factor2)); - pxf050_patch0_arcs << Arc(pyp, radius, - QVector3D(factor, 0, factor2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxf050_patches; - pxf050_patches << SpherePatch(radius, pxf050_patch0_arcs); - - Sphere pxf050 = Sphere(radius, pxf050_patches); - - QTest::newRow("positive x forward 0.5") - << pxf050_plane - << pxf050; - - QPlane3D pxb050_plane = QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)); - - QList<Arc> pxb050_patch0_arcs; - pxb050_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - pxb050_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(factor, 0, factor2)); - pxb050_patch0_arcs << Arc(pxb050_plane, radius, - QVector3D(factor, 0, factor2), - QVector3D(factor, factor2, 0)); - pxb050_patch0_arcs << Arc(pzp, radius, - QVector3D(factor, factor2, 0), - QVector3D(0, radius, 0)); - - - QList<SpherePatch> pxb050_patches; - pxb050_patches << SpherePatch(radius, pxb050_patch0_arcs); - - Sphere pxb050 = Sphere(radius, pxb050_patches); - - QTest::newRow("positive x backward 0.5") - << pxb050_plane - << pxb050; - - QTest::newRow("negative x forward 0.5") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("negative x backward 0.5") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << empty; - - - factor = radius * 1.0; - - - QTest::newRow("positive x forward 1.0") - << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << empty; - - QTest::newRow("positive x backward 1.0") - << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("negative x forward 1.0") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("negative x backward 1.0") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << empty; - - - factor = radius * 1.25; - - QTest::newRow("positive x forward 1.25") - << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << empty; - - QTest::newRow("positive x backward 1.25") - << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("negative x forward 1.25") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0)) - << basic; - - QTest::newRow("negative x backward 1.25") - << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0)) - << empty; -} - -void tst_Sphere::xy_plane_straight() -{ - QFETCH(QPlane3D, plane); - QFETCH(Sphere, sphereOut); - - QVERIFY(test(plane, sphereOut)); -} - -void tst_Sphere::xy_plane_straight_data() -{ - QTest::addColumn<QPlane3D>("plane"); - QTest::addColumn<Sphere>("sphereOut"); - - double radius = 20000.0; - - QVector3D origin; - - QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); - QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); - QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); - - Sphere empty = emptySphere(radius); - Sphere basic = basicSphere(radius); - - double factor1 = radius * 0.0; - double factor2 = radius * 0.0; - - QPlane3D pxpyf_000_000_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("positive x positive y forward 0.0 0.0") - << pxpyf_000_000_plane - << basic; - - QPlane3D pxpyb_000_000_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("positive x positive y backward 0.0 0.0") - << pxpyb_000_000_plane - << empty; - - QPlane3D pxnyf_000_000_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - double f1 = radius / sqrt(2); - double f2 = radius / sqrt(2); - - QList<Arc> pxnyf_000_000_patch0_arcs; - pxnyf_000_000_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f1, f2, 0)); - pxnyf_000_000_patch0_arcs << Arc(pxnyf_000_000_plane, radius, - QVector3D(f1, f2, 0), - QVector3D(0, 0, radius)); - pxnyf_000_000_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - - - QList<SpherePatch> pxnyf_000_000_patches; - pxnyf_000_000_patches << SpherePatch(radius, pxnyf_000_000_patch0_arcs); - - Sphere pxnyf_000_000 = Sphere(radius, pxnyf_000_000_patches); - - QTest::newRow("positive x negative y forward 0.0 0.0") - << pxnyf_000_000_plane - << pxnyf_000_000; - - QPlane3D pxnyb_000_000_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QList<Arc> pxnyb_000_000_patch0_arcs; - pxnyb_000_000_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - pxnyb_000_000_patch0_arcs << Arc(pxnyb_000_000_plane, radius, - QVector3D(0, 0, radius), - QVector3D(f1, f2, 0)); - pxnyb_000_000_patch0_arcs << Arc(pzp, radius, - QVector3D(f1, f2, 0), - QVector3D(0, radius, 0)); - - - QList<SpherePatch> pxnyb_000_000_patches; - pxnyb_000_000_patches << SpherePatch(radius, pxnyb_000_000_patch0_arcs); - - Sphere pxnyb_000_000(radius, pxnyb_000_000_patches); - - QTest::newRow("positive x negative y backward 0.0 0.0") - << pxnyb_000_000_plane - << pxnyb_000_000; - - QPlane3D nxpyf_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QList<Arc> nxpyf_000_000_patch0_arcs; - nxpyf_000_000_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f1, f2, 0)); - nxpyf_000_000_patch0_arcs << Arc(nxpyf_000_000_plane, radius, - QVector3D(f1, f2, 0), - QVector3D(0, 0, radius)); - nxpyf_000_000_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> nxpyf_000_000_patches; - nxpyf_000_000_patches << SpherePatch(radius, nxpyf_000_000_patch0_arcs); - - Sphere nxpyf_000_000 = Sphere(radius, nxpyf_000_000_patches); - - QTest::newRow("negative x positive y forward 0.0 0.0") - << nxpyf_000_000_plane - << nxpyf_000_000; - - QPlane3D nxpyb_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QList<Arc> nxpyb_000_000_patch0_arcs; - nxpyb_000_000_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - nxpyb_000_000_patch0_arcs << Arc(nxpyb_000_000_plane, radius, - QVector3D(0, 0, radius), - QVector3D(f1, f2, 0)); - nxpyb_000_000_patch0_arcs << Arc(pzp, radius, - QVector3D(f1, f2, 0), - QVector3D(0, radius, 0)); - - QList<SpherePatch> nxpyb_000_000_patches; - nxpyb_000_000_patches << SpherePatch(radius, nxpyb_000_000_patch0_arcs); - - Sphere nxpyb_000_000(radius, nxpyb_000_000_patches); - - QTest::newRow("negative x positive y backward 0.0 0.0") - << nxpyb_000_000_plane - << nxpyb_000_000; - - QPlane3D nxnyf_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.0 0.0") - << nxnyf_000_000_plane - << basic; - - QPlane3D nxnyb_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.0 0.0") - << nxnyb_000_000_plane - << empty; - - factor1 = radius * 0.25; - factor2 = radius * 0.25; - - QPlane3D pxpyf_025_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - f1 = radius / 2.0; - f2 = radius * sqrt(3) / 2.0; - - QList<Arc> pxpyf_025_025_patch0_arcs; - pxpyf_025_025_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(0, radius, 0)); - pxpyf_025_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, f1, f2)); - pxpyf_025_025_patch0_arcs << Arc(pxpyf_025_025_plane, radius, - QVector3D(0, f1, f2), - QVector3D(f1, 0, f2)); - pxpyf_025_025_patch0_arcs << Arc(pyp, radius, - QVector3D(f1, 0, f2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxpyf_025_025_patches; - pxpyf_025_025_patches << SpherePatch(radius, pxpyf_025_025_patch0_arcs); - - Sphere pxpyf_025_025(radius, pxpyf_025_025_patches); - - QTest::newRow("positive x positive y forward 0.25 0.25") - << pxpyf_025_025_plane - << pxpyf_025_025; - - QPlane3D pxpyb_025_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QList<Arc> pxpyb_025_025_patch0_arcs; - pxpyb_025_025_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(f1, 0, f2)); - pxpyb_025_025_patch0_arcs << Arc(pxpyb_025_025_plane, radius, - QVector3D(f1, 0, f2), - QVector3D(0, f1, f2)); - pxpyb_025_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, f1, f2), - QVector3D(0, 0, radius)); - - QList<SpherePatch> pxpyb_025_025_patches; - pxpyb_025_025_patches << SpherePatch(radius, pxpyb_025_025_patch0_arcs); - - Sphere pxpyb_025_025(radius, pxpyb_025_025_patches); - - QTest::newRow("positive x positive y backward 0.25 0.25") - << pxpyb_025_025_plane - << pxpyb_025_025; - - QPlane3D pxnyf_025_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - /* - f3 = positive intersection of x = y + 0.5 * r and x^2 + y^2 = r^2 - f4 = f3 - 0.5 * r - */ - - double f3 = radius * (1.0 + sqrt(7)) / 4.0; - double f4 = f3 - radius / 2.0; - - QList<Arc> pxnyf_025_025_patch0_arcs; - pxnyf_025_025_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f3, f4, 0)); - pxnyf_025_025_patch0_arcs << Arc(pxnyf_025_025_plane, radius, - QVector3D(f3, f4, 0), - QVector3D(f1, 0, f2)); - pxnyf_025_025_patch0_arcs << Arc(pyp, radius, - QVector3D(f1, 0, f2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxnyf_025_025_patches; - pxnyf_025_025_patches << SpherePatch(radius, pxnyf_025_025_patch0_arcs); - - Sphere pxnyf_025_025(radius, pxnyf_025_025_patches); - - QTest::newRow("positive x negative y forward 0.25 0.25") - << pxnyf_025_025_plane - << pxnyf_025_025; - - QPlane3D pxnyb_025_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QList<Arc> pxnyb_025_025_patch0_arcs; - pxnyb_025_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - pxnyb_025_025_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(f1, 0, f2)); - pxnyb_025_025_patch0_arcs << Arc(pxnyb_025_025_plane, radius, - QVector3D(f1, 0, f2), - QVector3D(f3, f4, 0)); - pxnyb_025_025_patch0_arcs << Arc(pzp, radius, - QVector3D(f3, f4, 0), - QVector3D(0, radius, 0)); - - QList<SpherePatch> pxnyb_025_025_patches; - pxnyb_025_025_patches << SpherePatch(radius, pxnyb_025_025_patch0_arcs); - - Sphere pxnyb_025_025(radius, pxnyb_025_025_patches); - - QTest::newRow("positive x negative y backward 0.25 0.25") - << pxnyb_025_025_plane - << pxnyb_025_025; - - QPlane3D nxpyf_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QList<Arc> nxpyf_025_025_patch0_arcs; - nxpyf_025_025_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f4, f3, 0)); - nxpyf_025_025_patch0_arcs << Arc(nxpyf_025_025_plane, radius, - QVector3D(f4, f3, 0), - QVector3D(0, f1, f2)); - nxpyf_025_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, f1, f2), - QVector3D(0, 0, radius)); - nxpyf_025_025_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> nxpyf_025_025_patches; - nxpyf_025_025_patches << SpherePatch(radius, nxpyf_025_025_patch0_arcs); - - Sphere nxpyf_025_025(radius, nxpyf_025_025_patches); - - QTest::newRow("negative x positive y forward 0.25 0.25") - << nxpyf_025_025_plane - << nxpyf_025_025; - - QPlane3D nxpyb_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QList<Arc> nxpyb_025_025_patch0_arcs; - nxpyb_025_025_patch0_arcs << Arc(pzp, radius, - QVector3D(f4, f3, 0), - QVector3D(0, radius, 0)); - nxpyb_025_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, f1, f2)); - nxpyb_025_025_patch0_arcs << Arc(nxpyb_025_025_plane, radius, - QVector3D(0, f1, f2), - QVector3D(f4, f3, 0)); - - QList<SpherePatch> nxpyb_025_025_patches; - nxpyb_025_025_patches << SpherePatch(radius, nxpyb_025_025_patch0_arcs); - - Sphere nxpyb_025_025(radius, nxpyb_025_025_patches); - - QTest::newRow("negative x positive y backward 0.25 0.25") - << nxpyb_025_025_plane - << nxpyb_025_025; - - QPlane3D nxnyf_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.25 0.25") - << nxnyf_025_025_plane - << basic; - - QPlane3D nxnyb_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.25 0.25") - << nxnyb_025_025_plane - << empty; - - factor1 = radius * 0.5; - factor2 = radius * 0.5; - - f1 = radius * 0.5; - f2 = radius / sqrt(2); - - QPlane3D pxpyf_050_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QList<Arc> pxpyf_050_050_patch0_arcs; - pxpyf_050_050_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(0, radius, 0)); - pxpyf_050_050_patch0_arcs << Arc(pxpyf_050_050_plane, radius, - QVector3D(0, radius, 0), - QVector3D(f1, f1, f2)); - pxpyf_050_050_patch0_arcs << Arc(pxpyf_050_050_plane, radius, - QVector3D(f1, f1, f2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxpyf_050_050_patches; - pxpyf_050_050_patches << SpherePatch(radius, pxpyf_050_050_patch0_arcs); - - Sphere pxpyf_050_050(radius, pxpyf_050_050_patches); - - QTest::newRow("positive x positive y forward 0.5 0.5") - << pxpyf_050_050_plane - << pxpyf_050_050; - - QPlane3D pxpyb_050_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QList<Arc> pxpyb_050_050_patch0_arcs; - pxpyb_050_050_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - pxpyb_050_050_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - pxpyb_050_050_patch0_arcs << Arc(pxpyb_050_050_plane, radius, - QVector3D(radius, 0, 0), - QVector3D(f1, f1, f2)); - pxpyb_050_050_patch0_arcs << Arc(pxpyb_050_050_plane, radius, - QVector3D(f1, f1, f2), - QVector3D(0, radius, 0)); - - QList<SpherePatch> pxpyb_050_050_patches; - pxpyb_050_050_patches << SpherePatch(radius, pxpyb_050_050_patch0_arcs); - - Sphere pxpyb_050_050(radius, pxpyb_050_050_patches); - - QTest::newRow("positive x positive y backward 0.5 0.5") - << pxpyb_050_050_plane - << pxpyb_050_050; - - QPlane3D pxnyf_050_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QTest::newRow("positive x negative y forward 0.5 0.5") - << pxnyf_050_050_plane - << empty; - - QPlane3D pxnyb_050_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QTest::newRow("positive x negative y backward 0.5 0.5") - << pxnyb_050_050_plane - << basic; - - QPlane3D nxpyf_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x positive y forward 0.5 0.5") - << nxpyf_050_050_plane - << basic; - - QPlane3D nxpyb_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x positive y backward 0.5 0.5") - << nxpyb_050_050_plane - << empty; - - QPlane3D nxnyf_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.5 0.5") - << nxnyf_050_050_plane - << basic; - - QPlane3D nxnyb_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.5 0.5") - << nxnyb_050_050_plane - << empty; - - factor1 = radius * 0.6; - factor2 = radius * 0.6; - - f1 = radius * 0.6; - f2 = f1 * sqrt(7.0 / 9.0); - f3 = f1 + f2 / sqrt(2); - f4 = f1 - f2 / sqrt(2); - - QPlane3D pxpyf_060_060_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QList<Arc> pxpyf_060_060_patch0_arcs; - pxpyf_060_060_patch0_arcs << Arc(pzp, radius, - QVector3D(f3, f4, 0), - QVector3D(f4, f3, 0)); - pxpyf_060_060_patch0_arcs << Arc(pxpyf_060_060_plane, radius, - QVector3D(f4, f3, 0), - QVector3D(f1, f1, f2)); - pxpyf_060_060_patch0_arcs << Arc(pxpyf_060_060_plane, radius, - QVector3D(f1, f1, f2), - QVector3D(f3, f4, 0)); - - QList<SpherePatch> pxpyf_060_060_patches; - pxpyf_060_060_patches << SpherePatch(radius, pxpyf_060_060_patch0_arcs); - - Sphere pxpyf_060_060(radius, pxpyf_060_060_patches); - - QTest::newRow("positive x positive y forward 0.6 0.6") - << pxpyf_060_060_plane - << pxpyf_060_060; - - QPlane3D pxpyb_060_060_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QList<Arc> pxpyb_060_060_patch0_arcs; - pxpyb_060_060_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f3, f4, 0)); - pxpyb_060_060_patch0_arcs << Arc(pxpyb_060_060_plane, radius, - QVector3D(f3, f4, 0), - QVector3D(f1, f1, f2)); - pxpyb_060_060_patch0_arcs << Arc(pxpyb_060_060_plane, radius, - QVector3D(f1, f1, f2), - QVector3D(f4, f3, 0)); - pxpyb_060_060_patch0_arcs << Arc(pzp, radius, - QVector3D(f4, f3, 0), - QVector3D(0, radius, 0)); - pxpyb_060_060_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - pxpyb_060_060_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxpyb_060_060_patches; - pxpyb_060_060_patches << SpherePatch(radius, pxpyb_060_060_patch0_arcs); - - Sphere pxpyb_060_060(radius, pxpyb_060_060_patches); - - QTest::newRow("positive x positive y backward 0.6 0.6") - << pxpyb_060_060_plane - << pxpyb_060_060; - - QPlane3D pxnyf_060_060_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QTest::newRow("positive x negative y forward 0.6 0.6") - << pxnyf_060_060_plane - << empty; - - QPlane3D pxnyb_060_060_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QTest::newRow("positive x negative y backward 0.6 0.6") - << pxnyb_060_060_plane - << basic; - - QPlane3D nxpyf_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x positive y forward 0.6 0.6") - << nxpyf_060_060_plane - << basic; - - QPlane3D nxpyb_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x positive y backward 0.6 0.6") - << nxpyb_060_060_plane - << empty; - - QPlane3D nxnyf_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.6 0.6") - << nxnyf_060_060_plane - << basic; - - QPlane3D nxnyb_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.6 0.6") - << nxnyb_060_060_plane - << empty; - - factor1 = radius * 0.75; - factor2 = radius * 0.75; - - QPlane3D pxpyf_075_075_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("positive x positive y forward 0.75 0.75") - << pxpyf_075_075_plane - << empty; - - QPlane3D pxpyb_075_075_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("positive x positive y backward 0.75 0.75") - << pxpyb_075_075_plane - << basic; - - QPlane3D pxnyf_075_075_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QTest::newRow("positive x negative y forward 0.75 0.75") - << pxnyf_075_075_plane - << empty; - - QPlane3D pxnyb_075_075_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QTest::newRow("positive x negative y backward 0.75 0.75") - << pxnyb_075_075_plane - << basic; - - QPlane3D nxpyf_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x positive y forward 0.75 0.75") - << nxpyf_075_075_plane - << basic; - - QPlane3D nxpyb_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x positive y backward 0.75 0.75") - << nxpyb_075_075_plane - << empty; - - QPlane3D nxnyf_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.75 0.75") - << nxnyf_075_075_plane - << basic; - - QPlane3D nxnyb_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.75 0.75") - << nxnyb_075_075_plane - << empty; -} - -void tst_Sphere::xy_plane_skew() -{ - QFETCH(QPlane3D, plane); - QFETCH(Sphere, sphereOut); - - QVERIFY(test(plane, sphereOut)); -} - -void tst_Sphere::xy_plane_skew_data() -{ - QTest::addColumn<QPlane3D>("plane"); - QTest::addColumn<Sphere>("sphereOut"); - - double radius = 20000.0; - - QVector3D origin; - - QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); - QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); - QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); - - Sphere empty = emptySphere(radius); - Sphere basic = basicSphere(radius); - - double factor1 = radius * 0.25; - double factor2 = radius * 0.5; - - double f1 = radius * 0.5; - double f2 = radius * sqrt(3) / 2.0; - double f3 = radius * 0.8; - double f4 = radius * 0.6; - - QPlane3D pxpyf_025_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), - QVector3D(0.5, 0.25, 0.0).normalized()); - - QList<Arc> pxpyf_025_050_patch0_arcs; - pxpyf_025_050_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(0, radius, 0)); - pxpyf_025_050_patch0_arcs << Arc(pxpyf_025_050_plane, radius, - QVector3D(0, radius, 0), - QVector3D(f1, 0, f2)); - pxpyf_025_050_patch0_arcs << Arc(pyp, radius, - QVector3D(f1, 0, f2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxpyf_025_050_patches; - pxpyf_025_050_patches << SpherePatch(radius, pxpyf_025_050_patch0_arcs); - - Sphere pxpyf_025_050(radius, pxpyf_025_050_patches); - - QTest::newRow("positive x positive y forward 0.25 0.5") - << pxpyf_025_050_plane - << pxpyf_025_050; - - QPlane3D pxpyb_025_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), - QVector3D(-0.5, -0.25, 0.0).normalized()); - - QList<Arc> pxpyb_025_050_patch0_arcs; - pxpyb_025_050_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(f1, 0, f2)); - pxpyb_025_050_patch0_arcs << Arc(pxpyb_025_050_plane, radius, - QVector3D(f1, 0, f2), - QVector3D(0, radius, 0)); - pxpyb_025_050_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - - - QList<SpherePatch> pxpyb_025_050_patches; - pxpyb_025_050_patches << SpherePatch(radius, pxpyb_025_050_patch0_arcs); - - Sphere pxpyb_025_050(radius, pxpyb_025_050_patches); - - QTest::newRow("positive x positive y backward 0.25 0.5") - << pxpyb_025_050_plane - << pxpyb_025_050; - - QPlane3D pxnyf_025_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), - QVector3D(-0.5, 0.25, 0.0).normalized()); - - QList<Arc> pxnyf_025_050_patch0_arcs; - pxnyf_025_050_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, 0, radius)); - pxnyf_025_050_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(f1, 0, f2)); - pxnyf_025_050_patch0_arcs << Arc(pxnyf_025_050_plane, radius, - QVector3D(f1, 0, f2), - QVector3D(f3, f4, 0)); - pxnyf_025_050_patch0_arcs << Arc(pzp, radius, - QVector3D(f3, f4, 0), - QVector3D(0, radius, 0)); - - QList<SpherePatch> pxnyf_025_050_patches; - pxnyf_025_050_patches << SpherePatch(radius, pxnyf_025_050_patch0_arcs); - - Sphere pxnyf_025_050(radius, pxnyf_025_050_patches); - - QTest::newRow("positive x negative y forward 0.25 0.5") - << pxnyf_025_050_plane - << pxnyf_025_050; - - QPlane3D pxnyb_025_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), - QVector3D(0.5, -0.25, 0.0).normalized()); - - QList<Arc> pxnyb_025_050_patch0_arcs; - pxnyb_025_050_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f3, f4, 0)); - pxnyb_025_050_patch0_arcs << Arc(pxnyb_025_050_plane, radius, - QVector3D(f3, f4, 0), - QVector3D(f1, 0, f2)); - pxnyb_025_050_patch0_arcs << Arc(pyp, radius, - QVector3D(f1, 0, f2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxnyb_025_050_patches; - pxnyb_025_050_patches << SpherePatch(radius, pxnyb_025_050_patch0_arcs); - - Sphere pxnyb_025_050(radius, pxnyb_025_050_patches); - - QTest::newRow("positive x negative y backward 0.25 0.5") - << pxnyb_025_050_plane - << pxnyb_025_050; - - QPlane3D nxpyf_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), - QVector3D(0.5, -0.25, 0.0).normalized()); - - QTest::newRow("negative x positive y forward 0.25 0.5") - << nxpyf_025_050_plane - << basic; - - QPlane3D nxpyb_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), - QVector3D(-0.5, 0.25, 0.0).normalized()); - - QTest::newRow("negative x positive y backward 0.25 0.5") - << nxpyb_025_050_plane - << empty; - - QPlane3D nxnyf_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), - QVector3D(0.5, 0.25, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.25 0.5") - << nxnyf_025_050_plane - << basic; - - QPlane3D nxnyb_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), - QVector3D(-0.5, -0.25, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.25 0.5") - << nxnyb_025_050_plane - << empty; - - factor1 = radius * 0.5; - factor2 = radius * 0.25; - - QPlane3D pxpyf_050_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), - QVector3D(0.25, 0.5, 0.0).normalized()); - - QList<Arc> pxpyf_050_025_patch0_arcs; - pxpyf_050_025_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(0, radius, 0)); - pxpyf_050_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, f1, f2)); - pxpyf_050_025_patch0_arcs << Arc(pxpyf_050_025_plane, radius, - QVector3D(0, f1, f2), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> pxpyf_050_025_patches; - pxpyf_050_025_patches << SpherePatch(radius, pxpyf_050_025_patch0_arcs); - - Sphere pxpyf_050_025(radius, pxpyf_050_025_patches); - - QTest::newRow("positive x positive y forward 0.5 0.25") - << pxpyf_050_025_plane - << pxpyf_050_025; - - QPlane3D pxpyb_050_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), - QVector3D(-0.25, -0.5, 0.0).normalized()); - - QList<Arc> pxpyb_050_025_patch0_arcs; - pxpyb_050_025_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - pxpyb_050_025_patch0_arcs << Arc(pxpyb_050_025_plane, radius, - QVector3D(radius, 0, 0), - QVector3D(0, f1, f2)); - pxpyb_050_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, f1, f2), - QVector3D(0, 0, radius)); - - QList<SpherePatch> pxpyb_050_025_patches; - pxpyb_050_025_patches << SpherePatch(radius, pxpyb_050_025_patch0_arcs); - - Sphere pxpyb_050_025(radius, pxpyb_050_025_patches); - - QTest::newRow("positive x positive y backward 0.5 0.25") - << pxpyb_050_025_plane - << pxpyb_050_025; - - QPlane3D pxnyf_050_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), - QVector3D(-0.25, 0.5, 0.0).normalized()); - - QTest::newRow("positive x negative y forward 0.5 0.25") - << pxnyf_050_025_plane - << basic; - - QPlane3D pxnyb_050_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), - QVector3D(0.25, -0.5, 0.0).normalized()); - - QTest::newRow("positive x negative y backward 0.5 0.25") - << pxnyb_050_025_plane - << empty; - - QPlane3D nxpyf_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), - QVector3D(0.25, -0.5, 0.0).normalized()); - - QList<Arc> nxpyf_050_025_patch0_arcs; - nxpyf_050_025_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f4, f3, 0)); - nxpyf_050_025_patch0_arcs << Arc(nxpyf_050_025_plane, radius, - QVector3D(f4, f3, 0), - QVector3D(0, f1, f2)); - nxpyf_050_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, f1, f2), - QVector3D(0, 0, radius)); - nxpyf_050_025_patch0_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(radius, 0, 0)); - - QList<SpherePatch> nxpyf_050_025_patches; - nxpyf_050_025_patches << SpherePatch(radius, nxpyf_050_025_patch0_arcs); - - Sphere nxpyf_050_025(radius, nxpyf_050_025_patches); - - QTest::newRow("negative x positive y forward 0.5 0.25") - << nxpyf_050_025_plane - << nxpyf_050_025; - - QPlane3D nxpyb_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), - QVector3D(-0.25, 0.5, 0.0).normalized()); - - QList<Arc> nxpyb_050_025_patch0_arcs; - nxpyb_050_025_patch0_arcs << Arc(pzp, radius, - QVector3D(f4, f3, 0), - QVector3D(0, radius, 0)); - nxpyb_050_025_patch0_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, f1, f2)); - nxpyb_050_025_patch0_arcs << Arc(nxpyb_050_025_plane, radius, - QVector3D(0, f1, f2), - QVector3D(f4, f3, 0)); - - QList<SpherePatch> nxpyb_050_025_patches; - nxpyb_050_025_patches << SpherePatch(radius, nxpyb_050_025_patch0_arcs); - - Sphere nxpyb_050_025(radius, nxpyb_050_025_patches); - - QTest::newRow("negative x positive y backward 0.5 0.25") - << nxpyb_050_025_plane - << nxpyb_050_025; - - QPlane3D nxnyf_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), - QVector3D(0.25, 0.5, 0.0).normalized()); - - QTest::newRow("negative x negative y forward 0.5 0.25") - << nxnyf_050_025_plane - << basic; - - QPlane3D nxnyb_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), - QVector3D(-0.25, -0.5, 0.0).normalized()); - - QTest::newRow("negative x negative y backward 0.5 0.25") - << nxnyb_050_025_plane - << empty; -} - -void tst_Sphere::xyz_plane() -{ - QFETCH(QPlane3D, plane); - QFETCH(Sphere, sphereOut); - - QVERIFY(test(plane, sphereOut)); -} - -void tst_Sphere::xyz_plane_data() -{ - QTest::addColumn<QPlane3D>("plane"); - QTest::addColumn<Sphere>("sphereOut"); - - double radius = 20000.0; - - QVector3D origin; - - QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0)); - QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0)); - QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0)); - - Sphere empty = emptySphere(radius); - Sphere basic = basicSphere(radius); - - double factor1 = radius * 0.0; - double factor2 = radius * 0.0; - double factor3 = radius * 0.0; - - QPlane3D pxpypzf_000 = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - QTest::newRow("positive x positive y positive z forward 0.0") - << pxpypzf_000 - << basic; - - QPlane3D pxpypzb_000 = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - - QTest::newRow("positive x positive y positive z backward 0.0") - << pxpypzb_000 - << empty; - - factor1 = radius * 0.25; - factor2 = radius * 0.25; - factor3 = radius * 0.25; - - QPlane3D pxpypzf_025 = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - QTest::newRow("positive x positive y positive z forward 0.25") - << pxpypzf_025 - << basic; - - QPlane3D pxpypzb_025 = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - - QTest::newRow("positive x positive y positive z backward 0.25") - << pxpypzb_025 - << empty; - - factor1 = radius / 3.0; - factor2 = radius / 3.0; - factor3 = radius / 3.0; - - QPlane3D pxpypzf_033_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - QTest::newRow("positive x positive y positive z forward 0.33") - << pxpypzf_033_plane - << basic; - - QPlane3D pxpypzb_033_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - - QTest::newRow("positive x positive y positive z backward 0.33") - << pxpypzb_033_plane - << empty; - - factor1 = radius * 0.4; - factor2 = radius * 0.4; - factor3 = radius * 0.4; - - QPlane3D pxpypzf_040_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - double f1 = 19483.3; - double f2 = 4516.69; - - QList<Arc> pxpypzf_040_patch0_arcs; - pxpypzf_040_patch0_arcs << Arc(pzp, radius, - QVector3D(f1, f2, 0), - QVector3D(f2, f1, 0)); - pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius, - QVector3D(f2, f1, 0), - QVector3D(0, f1, f2)); - pxpypzf_040_patch0_arcs << Arc(pxp, radius, - QVector3D(0, f1, f2), - QVector3D(0, f2, f1)); - pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius, - QVector3D(0, f2, f1), - QVector3D(f2, 0, f1)); - pxpypzf_040_patch0_arcs << Arc(pyp, radius, - QVector3D(f2, 0, f1), - QVector3D(f1, 0, f2)); - pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius, - QVector3D(f1, 0, f2), - QVector3D(f1, f2, 0)); - - QList<SpherePatch> pxpypzf_040_patches; - pxpypzf_040_patches << SpherePatch(radius, pxpypzf_040_patch0_arcs); - - Sphere pxpypzf_040(radius, pxpypzf_040_patches); - - QTest::newRow("positive x positive y positive z forward 0.4") - << pxpypzf_040_plane - << pxpypzf_040; - - QPlane3D pxpypzb_040_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - - QList<Arc> pxpypzb_040_patch0_arcs; - pxpypzb_040_patch0_arcs << Arc(pzp, radius, - QVector3D(radius, 0, 0), - QVector3D(f1, f2, 0)); - pxpypzb_040_patch0_arcs << Arc(pxpypzb_040_plane, radius, - QVector3D(f1, f2, 0), - QVector3D(f1, 0, f2)); - pxpypzb_040_patch0_arcs << Arc(pyp, radius, - QVector3D(f1, 0, f2), - QVector3D(radius, 0, 0)); - - QList<Arc> pxpypzb_040_patch1_arcs; - pxpypzb_040_patch1_arcs << Arc(pxp, radius, - QVector3D(0, radius, 0), - QVector3D(0, f1, f2)); - pxpypzb_040_patch1_arcs << Arc(pxpypzb_040_plane, radius, - QVector3D(0, f1, f2), - QVector3D(f2, f1, 0)); - pxpypzb_040_patch1_arcs << Arc(pzp, radius, - QVector3D(f2, f1, 0), - QVector3D(0, radius, 0)); - - QList<Arc> pxpypzb_040_patch2_arcs; - pxpypzb_040_patch2_arcs << Arc(pyp, radius, - QVector3D(0, 0, radius), - QVector3D(f2, 0, f1)); - pxpypzb_040_patch2_arcs << Arc(pxpypzb_040_plane, radius, - QVector3D(f2, 0, f1), - QVector3D(0, f2, f1)); - pxpypzb_040_patch2_arcs << Arc(pxp, radius, - QVector3D(0, f2, f1), - QVector3D(0, 0, radius)); - - QList<SpherePatch> pxpypzb_040_patches; - - pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch0_arcs); - pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch1_arcs); - pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch2_arcs); - - Sphere pxpypzb_040(radius, pxpypzb_040_patches); - - QTest::newRow("positive x positive y positive z backward 0.4") - << pxpypzb_040_plane - << pxpypzb_040; - - factor1 = radius * 0.5; - factor2 = radius * 0.5; - factor3 = radius * 0.5; - - f1 = 18165.0; - f2 = 5917.52; - - QPlane3D pxpypzf_050_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - QList<Arc> pxpypzf_050_patch0_arcs; - pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius, - QVector3D(f1, f2, f2), - QVector3D(f2, f1, f2)); - pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius, - QVector3D(f2, f1, f2), - QVector3D(f2, f2, f1)); - pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius, - QVector3D(f2, f2, f1), - QVector3D(f1, f2, f2)); - - QList<SpherePatch> pxpypzf_050_patches; - pxpypzf_050_patches << SpherePatch(radius, pxpypzf_050_patch0_arcs); - - Sphere pxpypzf_050(radius, pxpypzf_050_patches); - - QTest::newRow("positive x positive y positive z forward 0.5") - << pxpypzf_050_plane - << pxpypzf_050; - - QPlane3D pxpypzb_050_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - -// QList<Arc> pxpypzb_050_patch0_arcs; -// pxpypzb_050_patch0_arcs << Arc(pzp, radius, -// QVector3D(radius, 0, 0), -// QVector3D(f1, f2, 0)); -// pxpypzb_050_patch0_arcs << Arc(pxpypzb_050_plane, radius, -// QVector3D(f1, f2, 0), -// QVector3D(f1, 0, f2)); -// pxpypzb_050_patch0_arcs << Arc(pyp, radius, -// QVector3D(f1, 0, f2), -// QVector3D(radius, 0, 0)); - -// QList<Arc> pxpypzb_050_patch1_arcs; -// pxpypzb_050_patch1_arcs << Arc(pxp, radius, -// QVector3D(0, radius, 0), -// QVector3D(0, f1, f2)); -// pxpypzb_050_patch1_arcs << Arc(pxpypzb_050_plane, radius, -// QVector3D(0, f1, f2), -// QVector3D(f2, f1, 0)); -// pxpypzb_050_patch1_arcs << Arc(pzp, radius, -// QVector3D(f2, f1, 0), -// QVector3D(0, radius, 0)); - -// QList<Arc> pxpypzb_050_patch2_arcs; -// pxpypzb_050_patch2_arcs << Arc(pyp, radius, -// QVector3D(0, 0, radius), -// QVector3D(f2, 0, f1)); -// pxpypzb_050_patch2_arcs << Arc(pxpypzb_050_plane, radius, -// QVector3D(f2, 0, 1), -// QVector3D(0, f2, f1)); -// pxpypzb_050_patch2_arcs << Arc(pxp, radius, -// QVector3D(0, f2, f1), -// QVector3D(0, 0, radius)); - - QList<SpherePatch> pxpypzb_050_patches; - -// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch0_arcs); -// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch1_arcs); -// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch2_arcs); - - Sphere pxpypzb_050(radius, pxpypzb_050_patches); - - QTest::newRow("positive x positive y positive z backward 0.5") - << pxpypzb_050_plane - << pxpypzb_050; - - - factor1 = radius / sqrt(3.0); - factor2 = radius / sqrt(3.0); - factor3 = radius / sqrt(3.0); - - QPlane3D pxpypzf_057_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - QTest::newRow("positive x positive y positive z forward 0.57") - << pxpypzf_057_plane - << empty; - - QPlane3D pxpypzb_057_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - - QTest::newRow("positive x positive y positive z backward 0.57") - << pxpypzb_057_plane - << basic; - - factor1 = radius * 0.6; - factor2 = radius * 0.6; - factor3 = radius * 0.6; - - QPlane3D pxpypzf_060_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(1.0, 1.0, 1.0).normalized()); - - QTest::newRow("positive x positive y positive z forward 0.6") - << pxpypzf_060_plane - << empty; - - QPlane3D pxpypzb_060_plane = QPlane3D(QVector3D(factor1, factor2, factor3), - QVector3D(-1.0, -1.0, -1.0).normalized()); - - QTest::newRow("positive x positive y positive z backward 0.6") - << pxpypzb_060_plane - << basic; -} - -QList<QPlane3D> tst_Sphere::planes() const -{ - CameraData cameraData; - - ViewportCamera cam; - cam.setProjection(new Projection3D(20000.0)); - cam.setCameraData(cameraData); - Frustum f = cam.toFrustum(); - - QList<QPlane3D> planes; - planes << f.plane(Frustum::Near); - planes << f.plane(Frustum::Far); - planes << f.plane(Frustum::Top); - planes << f.plane(Frustum::Bottom); - planes << f.plane(Frustum::Left); - planes << f.plane(Frustum::Right); - - return planes; -} - -Sphere tst_Sphere::planeTest(const QList<QPlane3D> &planes, const QList<int> &planeIndices) const -{ - Sphere sphere; - - for (int i = 0; i < planeIndices.size(); ++i) { - sphere.intersect(planes.at(planeIndices.at(i))); - } - - return sphere; -} - -void tst_Sphere::camera() -{ - QList<QPlane3D> p = planes(); - // 2-tuples -// for (int i = 0; i < 5; ++i) { -// for (int j = i + 1; j < 6; ++j) { -// QList<int> i1; -// i1 << i << j; - -// Sphere s1 = planeTest(p, i1); - -// QList<int> i2; -// i2 << j << i; - -// Sphere s2 = planeTest(p, i2); - -// if (!s1.isomorphic(s2)) { -// QList<SpherePatch> p1 = s1.patches(); -// QList<SpherePatch> p2 = s2.patches(); -// if (p1.size() != p2.size()) { -// qWarning() << i << j << "sizes different"; -// } else { -// int s = p1.size(); -// for (int k = 0; k < s; ++k) { -// if (!p1[k].isomorphic(p2[k])) { -// qWarning() << i << j << k; -//// QList<SpherePatch> l1a; -//// l1a << p1[k]; -//// Sphere sphere1a(20000.0, l1a); -//// qWarning() << sphere1a; - -//// QList<SpherePatch> l2a; -//// l2a << p2[k]; -//// Sphere sphere2a(20000.0, l2a); -//// qWarning() << sphere2a; -// } -// //qWarning() << k << (p1[k].isomorphic(p2[k])); -// } -// } -// } -// } -// } - - /* - intersect(...) - 1 2 0 - 1 3 0 - 1 4 0 - 1 5 0 - 3 4 7 - - intersect2(...) - 1 2 0 - 1 3 0 - 1 4 0 - 1 5 0 - +2 4 7 - 3 4 7 - +3 4 8 - */ - - int plane1 = 1; - int plane2 = 2; - int patch = 0; - - qWarning() << " ****** "; - - Sphere sphere1; - sphere1.intersect(p.at(plane1)); - SpherePatch patch1 = sphere1.patches().at(patch); - - qWarning() << " ****** "; - QList<SpherePatch> l1a; - l1a << patch1; - Sphere sphere1a(20000.0, l1a); - qWarning() << sphere1a; - qWarning() << " ****** "; - - l1a = patch1.intersect(p.at(plane2)); - - qWarning() << " ****** "; - Sphere sphere1b(20000.0, l1a); - qWarning() << sphere1b; - qWarning() << " ****** "; - - Sphere sphere2; - sphere2.intersect(p.at(plane2)); - SpherePatch patch2 = sphere2.patches().at(patch); - - qWarning() << " ****** "; - QList<SpherePatch> l2a; - l2a << patch2; - Sphere sphere2a(20000.0, l2a); - qWarning() << sphere2a; - qWarning() << " ****** "; - - l2a = patch2.intersect(p.at(plane1)); - - qWarning() << " ****** "; - Sphere sphere2b(20000.0, l2a); - qWarning() << sphere2b; - qWarning() << " ****** "; -} - -QTEST_MAIN(tst_Sphere) -#include "tst_sphere.moc" - |