Engauge Digitizer 2
Loading...
Searching...
No Matches
TestProjectedPoint.cpp
Go to the documentation of this file.
1#include "Logger.h"
2#include "MainWindow.h"
3#include "mmsubs.h"
4#include <qmath.h>
5#include <QtTest/QtTest>
6#include "Spline.h"
7#include "SplinePair.h"
9
11
12using namespace std;
13
14const double PI = 3.1415926535;
15const double RADIANS_TO_DEGREES = 180.0 / PI;
16
21
22void TestProjectedPoint::cleanupTestCase ()
23{
24
25}
26
27void TestProjectedPoint::initTestCase ()
28{
29 const bool NO_DROP_REGRESSION = false;
32 const bool NO_GNUPLOT_LOG_FILES = false;
33 const bool NO_REGRESSION_IMPORT = false;
34 const bool NO_RESET = false;
35 const bool NO_EXPORT_ONLY = false;
36 const bool NO_EXTRACT_IMAGE_ONLY = false;
38 const bool DEBUG_FLAG = false;
41
42 initializeLogging ("engauge_test",
43 "engauge_test.log",
45
57 w.show ();
58}
59
60void TestProjectedPoint::testProjectedPoints ()
61{
62 double radiusCircle = 1.0, radiusProjection = 2.0 * radiusCircle;
64 double xToProjectUp = 0.0, yToProjectUp = 2.0 * radiusCircle;
67 double distanceToLine; // Ignored
68
69 // To prevent ambiguity at multiples of angleCriticalRight and angleCriticalUp, the angle step is NOT a factor of the
70 // critical angles
71 int angleStep = 13;
72
73 // Critical angle in degrees
76
77 for (int angle = 0; angle <= 360; angle += angleStep) {
78
79 double xStart = radiusCircle * cos (angle * PI / 180.0);
80 double yStart = radiusCircle * sin (angle * PI / 180.0);
81 double xStop = -1.0 * xStart;
82 double yStop = -1.0 * yStart;
83
84 double xMin = qMin (xStart, xStop);
85 double yMin = qMin (yStart, yStop);
86 double xMax = qMax (xStart, xStop);
87 double yMax = qMax (yStart, yStop);
88
89 // Project point on right
92 xStart,
93 yStart,
94 xStop,
95 yStop,
100
101 // If and only if angle is between angleCritical to 180 - angleCritical, and
102 // 180 + angleCritical to 360 - angleCritical will there be a projection inside the line
103 if ((angleCriticalRight <= angle && angle <= 180 - angleCriticalRight) ||
104 (180 + angleCriticalRight <= angle && angle <= 360 - angleCriticalRight)) {
105
107 } else {
109 }
114
115 // Project point that is up
118 xStart,
119 yStart,
120 xStop,
121 yStop,
126
127 // If and only if angle is between -angleCritical to angleCritical, and
128 // 180 - angleCritical to 180 + angleCritical will there be a projection inside the line
129 if ((angle <= angleCriticalUp) ||
130 (180 - angleCriticalUp <= angle && angle <= 180 + angleCriticalUp) ||
131 (360 - angleCriticalUp <= angle)) {
132
134 } else {
136 }
141 }
142}
const double PI
const int INNER_RADIUS_MIN
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
Definition Logger.cpp:21
const bool NO_EXPORT_ONLY
const QStringList NO_COMMAND_LINE
const QString NO_EXTRACT_IMAGE_EXTENSION
const QString NO_ERROR_REPORT_LOG_FILE
const bool NO_GNUPLOT_LOG_FILES
const QString NO_REGRESSION_OPEN_FILE
const QStringList NO_LOAD_STARTUP_FILES
const bool NO_REGRESSION_IMPORT
const bool NO_EXTRACT_IMAGE_ONLY
const bool NO_DROP_REGRESSION
const bool DEBUG_FLAG
const double RADIANS_TO_DEGREES
const double PI
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:92
Unit test of spline library.
TestProjectedPoint(QObject *parent=0)
Single constructor.
void projectPointOntoLine(double xToProject, double yToProject, double xStart, double yStart, double xStop, double yStop, double *xProjection, double *yProjection, double *projectedDistanceOutsideLine, double *distanceToLine)
Find the projection of a point onto a line segment such that the line through the point and its proje...
Definition mmsubs.cpp:211