00001
00002
00003
00004
00005
00006
00007 #include "ExportOrdinalsStraight.h"
00008 #include "Logger.h"
00009 #include <qdebug.h>
00010 #include <qmath.h>
00011 #include <QPointF>
00012 #include "Transformation.h"
00013
00014 using namespace std;
00015
00016 ExportOrdinalsStraight::ExportOrdinalsStraight ()
00017 {
00018 }
00019
00020 ExportValuesOrdinal ExportOrdinalsStraight::ordinalsAtIntervalsGraphWithoutTransformation (const Points &points,
00021 double pointsInterval) const
00022 {
00023 LOG4CPP_INFO_S ((*mainCat)) << "ExportOrdinalsStraight::ordinalsAtIntervalsGraph";
00024
00025
00026 ExportValuesOrdinal ordinals;
00027
00028
00029 double distanceAlongSegment = 0;
00030 QPointF posLast (points [0].posScreen().x(),
00031 points [0].posScreen().y());
00032 double ordinalLast = 0;
00033
00034
00035
00036
00037 for (int iP = 0; iP < points.count(); iP++) {
00038
00039 const Point &pointNew = points.at (iP);
00040 QPointF posNew = pointNew.posScreen();
00041
00042 QPointF posDelta = posNew - posLast;
00043 double segmentLength = qSqrt (posDelta.x() * posDelta.x() + posDelta.y() * posDelta.y());
00044
00045 while (distanceAlongSegment < segmentLength) {
00046
00047 double sLocal = distanceAlongSegment / segmentLength;
00048
00049 ordinals.push_back (ordinalLast + sLocal);
00050
00051 distanceAlongSegment += pointsInterval;
00052 }
00053
00054 distanceAlongSegment -= segmentLength;
00055 ordinalLast = pointNew.ordinal();
00056 posLast = posNew;
00057 }
00058
00059 return ordinals;
00060 }
00061
00062 ExportValuesOrdinal ExportOrdinalsStraight::ordinalsAtIntervalsGraphWithTransformation (const Points &points,
00063 const Transformation &transformation,
00064 double pointsInterval) const
00065 {
00066 LOG4CPP_INFO_S ((*mainCat)) << "ExportOrdinalsStraight::ordinalsAtIntervalsGraph";
00067
00068
00069 ExportValuesOrdinal ordinals;
00070
00071
00072 double distanceAlongSegment = 0;
00073 QPointF posLast;
00074 transformation.transformScreenToRawGraph (points [0].posScreen(),
00075 posLast);
00076 double ordinalLast = 0;
00077
00078
00079
00080
00081 for (int iP = 0; iP < points.count(); iP++) {
00082
00083 const Point &pointNew = points.at (iP);
00084 QPointF posNew;
00085 transformation.transformScreenToRawGraph (pointNew.posScreen(),
00086 posNew);
00087
00088 QPointF posDelta = posNew - posLast;
00089 double segmentLength = qSqrt (posDelta.x() * posDelta.x() + posDelta.y() * posDelta.y());
00090
00091 while (distanceAlongSegment < segmentLength) {
00092
00093 double sLocal = distanceAlongSegment / segmentLength;
00094
00095 ordinals.push_back (ordinalLast + sLocal);
00096
00097 distanceAlongSegment += pointsInterval;
00098 }
00099
00100 ordinalLast = pointNew.ordinal();
00101 posLast = posNew;
00102 }
00103
00104 return ordinals;
00105 }