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));
139 QVector<bool> &isPotentialExportAmbiguity)
const
141 for (
int i = 0; i < x.size(); i++) {
142 isPotentialExportAmbiguity.append (
false);
152 QVector<QString> &y)
const
156 for (
int i = 0; i < positionsGraph.size(); i++) {
158 double xI = positionsGraph [i].x();
159 double yI = positionsGraph [i].y();
161 QString xFormatted, yFormatted;
170 x.push_back (xFormatted);
171 y.push_back (yFormatted);
179 int N = points.size ();
185 for (
int i = 0; i < N - 1; i++) {
186 sum += points [i].x() * points [i + 1].y() - points [i + 1].x() * points [i].y();
189 sum += points [N - 1].x() * points [0].y() - points [0].x() * points [N - 1].y ();
192 return qAbs (sum) / 2.0;
Model for DlgSettingsCoords and CmdSettingsCoords.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
double polygonAreaForSimplyConnected(const QVector< QPointF > &points) const
Area in polygon using Shoelace formula, which only works if polygon is simply connected.
virtual void loadPotentialExportVector(QVector< QString > &x, QVector< QString > &y, const Transformation &transformation, QVector< bool > &isPotentialExportAmbiguity) const
Load isPotentialExportAmbiguity vector. Default in base class is to load false values since there are...
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.
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.
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
double functionArea(const QVector< QPointF > &positionsGraph) const
Use trapezoidal approximation to compute area under the function. Does not apply to relation.
GeometryStrategyAbstractBase()
Single constructor.
virtual ~GeometryStrategyAbstractBase()
Model for DlgSettingsMainWindow.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
QPointF posScreen() const
Accessor for screen position.
Single X/Y pair for cubic spline interpolation initialization and calculations.
double y() const
Get method for y.
double x() const
Get method for x.
Cubic interpolation given independent and dependent value vectors.
SplinePair interpolateCoeff(double t) const
Return interpolated y for specified x.