7 #include "EngaugeAssert.h" 8 #include "FormatCoordsUnits.h" 9 #include "GeometryStrategyAbstractBase.h" 13 #include "SplinePair.h" 14 #include "Transformation.h" 23 GeometryStrategyAbstractBase::~GeometryStrategyAbstractBase()
29 QVector<QPointF> &positionsGraph)
const 31 positionsGraph.clear();
33 for (
int i = 0; i < points.size(); i++) {
34 const Point &pointScreen = points [i];
35 QPointF posScreen = pointScreen.
posScreen ();
41 positionsGraph.push_back (posGraph);
48 double sum = 0, xLast = 0, yLast = 0;
49 for (
int i = 1; i < positionsGraph.size (); i++) {
50 double x = positionsGraph [i].x();
51 double y = positionsGraph [i].y();
52 double area = 0.5 * (y + yLast) * (x - xLast);
62 const QVector<QPointF> &positionsGraph,
63 QVector<QPointF> &positionsGraphWithSubintervals,
64 QVector<QString> &distanceGraphForward,
65 QVector<QString> &distancePercentForward,
66 QVector<QString> &distanceGraphBackward,
67 QVector<QString> &distancePercentBackward)
const 69 if (positionsGraph.size () > 0) {
75 vector<SplinePair> xy;
76 for (
int i = 0; i < positionsGraph.size (); i++) {
77 t.push_back ((
double) i);
78 xy.push_back (
SplinePair (positionsGraph [i].x(),
79 positionsGraph [i].y()));
86 QVector<double> distanceGraphDouble;
87 double xLast = 0, yLast = 0, distance = 0;
88 for (i = 0; i < positionsGraph.size(); i++) {
91 for (
int subinterval = 0; subinterval < subintervalsPerInterval; subinterval++) {
94 double t = (double) (i - 1.0) + (double) (subinterval + 1) / (double) (subintervalsPerInterval);
98 double x = splinePair.
x ();
99 double y = splinePair.
y ();
102 if (i > 0 || subinterval == subintervalsPerInterval - 1) {
105 positionsGraphWithSubintervals.push_back (QPointF (x, y));
112 distance += qSqrt ((x - xLast) * (x - xLast) + (y - yLast) * (y - yLast));
121 distanceGraphDouble.push_back (distance);
125 double dTotal = qMax (1.0, distanceGraphDouble [distanceGraphDouble.size() - 1]);
126 for (i = 0; i < distanceGraphDouble.size (); i++) {
127 double d = distanceGraphDouble [i];
128 distanceGraphForward.push_back (QString::number (d));
129 distancePercentForward.push_back (QString::number (100.0 * d / dTotal));
130 distanceGraphBackward.push_back (QString::number (dTotal - d));
131 distancePercentBackward.push_back (QString::number (100.0 * (dTotal - d) / dTotal));
142 QVector<QString> &y)
const 146 for (
int i = 0; i < positionsGraph.size(); i++) {
148 double xI = positionsGraph [i].x();
149 double yI = positionsGraph [i].y();
151 QString xFormatted, yFormatted;
160 x.push_back (xFormatted);
161 y.push_back (yFormatted);
169 int N = points.size ();
175 for (
int i = 0; i < N - 1; i++) {
176 sum += points [i].x() * points [i + 1].y() - points [i + 1].x() * points [i].y();
179 sum += points [N - 1].x() * points [0].y() - points [0].x() * points [N - 1].y ();
182 return qAbs (sum) / 2.0;
Model for DlgSettingsGeneral and CmdSettingsGeneral.
double functionArea(const QVector< QPointF > &positionsGraph) const
Use trapezoidal approximation to compute area under the function. Does not apply to relation...
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
Cubic interpolation given independent and dependent value vectors.
SplinePair interpolateCoeff(double t) const
Return interpolated y for specified x.
double y() const
Get method for y.
void loadXY(const QVector< QPointF > &positionsGraph, const DocumentModelCoords &modelCoords, const DocumentModelGeneral &modelGeneral, const MainWindowModel &modelMainWindow, const Transformation &transformation, QVector< QString > &x, QVector< QString > &y) const
Load x and y coordinate vectors.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
QPointF posScreen() const
Accessor for screen position.
Model for DlgSettingsMainWindow.
Model for DlgSettingsCoords and CmdSettingsCoords.
double polygonAreaForSimplyConnected(const QVector< QPointF > &points) const
Area in polygon using Shoelace formula, which only works if polygon is simply connected.
GeometryStrategyAbstractBase()
Single constructor.
double x() const
Get method for x.
void insertSubintervalsAndLoadDistances(int subintervalsPerInterval, const QVector< QPointF > &positionsGraph, QVector< QPointF > &positionsGraphWithSubintervals, QVector< QString > &distanceGraphForward, QVector< QString > &distancePercentForward, QVector< QString > &distanceGraphBackward, QVector< QString > &distancePercentBackward) const
Insert the specified number of subintervals into each interval.
Single X/Y pair for cubic spline interpolation initialization and calculations.