1 /*
2 SPDX-FileCopyrightText: 2016 Akarsh Simha <akarsh.simha@kdemail.net>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 /* Project Includes */
8 #include "test_poleaxis.h"
9 #include "ksnumbers.h"
10 #include "time/kstarsdatetime.h"
11 #include "auxiliary/dms.h"
12 #include "Options.h"
13 #include <libnova/libnova.h>
14
TestPoleAxis()15 TestPoleAxis::TestPoleAxis() : QObject()
16 {
17 }
18
~TestPoleAxis()19 TestPoleAxis::~TestPoleAxis()
20 {
21 }
22
compare(Rotations::V3 v,double x,double y,double z)23 void TestPoleAxis::compare(Rotations::V3 v, double x, double y, double z)
24 {
25 QVERIFY2(std::fabs(v.x() - x) < 0.00001,
26 qPrintable(QString("dc.x %1, x %2 error %3").arg(v.x()).arg(x).arg(((v.x() - x) * 3600.0), 6, 'f', 1)));
27 QVERIFY2(std::fabs(v.y() - y) < 0.00001,
28 qPrintable(QString("dc.y %1, y %2 error %3").arg(v.y()).arg(y).arg(((v.y() - y) * 3600.0), 6, 'f', 1)));
29 QVERIFY2(std::fabs(v.z() - z) < 0.00001,
30 qPrintable(QString("dc.z %1, z %2 error %3").arg(v.z()).arg(z).arg(((v.z() - z) * 3600.0), 6, 'f', 1)));
31 }
32
compare(double a,double e,QString msg)33 void TestPoleAxis::compare(double a, double e, QString msg)
34 {
35 QVERIFY2(std::fabs(a - e) < 0.0003,
36 qPrintable(QString("%1: actual %2, expected %3 error %4").arg(msg).arg(a).arg(e).arg(((a - e) * 3600.0), 6, 'f', 1)));
37 }
38
39
testDirCos_data()40 void TestPoleAxis::testDirCos_data()
41 {
42 QTest::addColumn<double>("Ha");
43 QTest::addColumn<double>("Dec");
44 QTest::addColumn<double>("X");
45 QTest::addColumn<double>("Y");
46 QTest::addColumn<double>("Z");
47
48 QTest::newRow("HaDec0") << 0.0 << 0.0 << 1.0 << 0.0 << 0.0;
49 QTest::newRow("Ha0Dec45") << 0.0 << 45.0 << 0.707107 << 0.0 << 0.707107;
50 QTest::newRow("Ha6Dec45") << 6.0 << 45.0 << 0.0 << 0.707107 << 0.707107;
51 QTest::newRow("Ha-6Dec45") << -6.0 << 45.0 << 0.0 << -0.707107 << 0.707107;
52 QTest::newRow("at Pole") << 0.0 << 90.0 << 0.0 << 0.0 << 1.0;
53 QTest::newRow("near S Pole") << -3.0 << -85.0 << 0.0616284 << -0.0616284 << -0.996195;
54 }
55
testDirCos()56 void TestPoleAxis::testDirCos()
57 {
58 dms h;
59 dms d;
60 QFETCH(double, Ha);
61 QFETCH(double, Dec);
62 h.setH(Ha);
63 d.setD(Dec);
64
65
66 Rotations::V3 dc;
67 dc = PoleAxis::dirCos(h, d);
68
69
70 QFETCH(double, X);
71 QFETCH(double, Y);
72 QFETCH(double, Z);
73
74 compare(dc, X, Y, Z);
75
76 SkyPoint sp(Ha, Dec);
77 dc = PoleAxis::dirCos(sp);
78 compare(dc.length(), 1.0, "length");
79 compare(dc, X, Y, Z);
80 }
81
testPriSec_data()82 void TestPoleAxis::testPriSec_data()
83 {
84 testDirCos_data();
85 }
86
testPriSec()87 void TestPoleAxis::testPriSec()
88 {
89 QFETCH(double, Ha);
90 QFETCH(double, Dec);
91 QFETCH(double, X);
92 QFETCH(double, Y);
93 QFETCH(double, Z);
94 Rotations::V3 dc(X, Y, Z);
95 dms p = PoleAxis::primary(dc);
96 compare(p.HoursHa(), Ha, "Ha");
97 compare(PoleAxis::secondary(dc).Degrees(), Dec, "Dec");
98 }
99
100
testPoleAxis_data()101 void TestPoleAxis::testPoleAxis_data()
102 {
103 QTest::addColumn<double>("Ha1");
104 QTest::addColumn<double>("Dec1");
105 QTest::addColumn<double>("Ha2");
106 QTest::addColumn<double>("Dec2");
107 QTest::addColumn<double>("Ha3");
108 QTest::addColumn<double>("Dec3");
109 QTest::addColumn<double>("X");
110 QTest::addColumn<double>("Y");
111 QTest::addColumn<double>("Z");
112
113 QTest::newRow("Ha-606Dec0") << -6.0 << 0.0 << 0.0 << 0.0 << 6.0 << 0.0 << 0.0 << 0.0 << 1.0;
114 QTest::newRow("Ha20-2Dec89") << 2.0 << 89.0 << 0.0 << 89.0 << -2.0 << 89.0 << 0.0 << 0.0 << -1.0;
115 QTest::newRow("Ha0-22Dec89v") << 0.0 << 89.0 << -2.0 << 89.1 << 2.0 << 88.9 << -0.0006 << -0.003386 << -0.99999;
116 QTest::newRow("Ha2-20Dec-89") << 2.0 << -89.0 << -2.0 << -89.0 << 0.0 << -89.0 << 0.0 << 0.0 << 1.0;
117 QTest::newRow("Ha20-2Dec89") << 2.0 << 89.0 << 0.0 << 89.0 << -2.0 << 88.0 << 0.05633683 << 0.0150954 << 0.998298;
118 // failure cases, 2 or more points the same should ruturn a null matrix
119 QTest::newRow("Ha000Dec0") << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0;
120 QTest::newRow("Ha100Dec0") << 1.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0;
121 QTest::newRow("Ha110Dec0") << 1.0 << 0.0 << 1.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0;
122 QTest::newRow("Ha011Dec0") << 0.0 << 0.0 << 1.0 << 0.0 << 1.0 << 0.0 << 0.0 << 0.0 << 0.0;
123 }
124
testPoleAxis()125 void TestPoleAxis::testPoleAxis()
126 {
127 QFETCH(double, Ha1);
128 QFETCH(double, Dec1);
129 QFETCH(double, Ha2);
130 QFETCH(double, Dec2);
131 QFETCH(double, Ha3);
132 QFETCH(double, Dec3);
133
134 QFETCH(double, X);
135 QFETCH(double, Y);
136 QFETCH(double, Z);
137
138 SkyPoint p1(Ha1, Dec1);
139 SkyPoint p2(Ha2, Dec2);
140 SkyPoint p3(Ha3, Dec3);
141
142
143 Rotations::V3 pa = PoleAxis::poleAxis(p1, p2, p3);
144
145 compare(pa.x(), X, "X");
146 compare(pa.y(), Y, "Y");
147 compare(pa.z(), Z, "Z");
148 }
149
150 QTEST_GUILESS_MAIN(TestPoleAxis)
151