13 void GridInitializer::axisScale (
double xMin,
21 const double range_epsilon = 0.00000000001;
22 double xAverage, xAverageRoundedUp, xRange;
29 const int nDigitsPrecision = 8;
47 xAverage = (xMin + xMax) / 2.0;
49 if (qAbs (xRange) <= 0) {
50 xRange = fabs (xAverage / 10.0);
53 xDelta = pow (10.0,
double (nDigitRange));
54 xAverageRoundedUp = xDelta * floor ((xAverage + xDelta / 2.0) / xDelta);
56 if (xRange > range_epsilon) {
58 while (fabs (xRange / xDelta) <= 2.000001) {
64 xStart = xAverageRoundedUp;
65 while (xStart > xMin) {
70 xStop = xAverageRoundedUp;
71 while (xStop < xMax) {
75 xCount = 1 + qFloor ((xStop - xStart) / xDelta + 0.5);
80 xStart = pow(10.0, xStart);
81 xStop = pow(10.0, xStop);
82 xDelta = pow(10.0, xDelta);
87 int power =
valuePower (xDelta) - nDigitsPrecision;
88 xStart = roundOffToPower(xStart, power);
89 xStop = roundOffToPower(xStop, power);
90 xDelta = roundOffToPower(xDelta, power);
103 if (qAbs (step) <= 0) {
106 count = qFloor (1.0 + (stop - start) / step);
109 if ((start <= 0) || (step <= 0.0)) {
112 count = qFloor (1.0 + log10 (stop / start) / log10 (step));
127 start = stop - step * (count - 1);
129 start = stop / pow (step,
double (count - 1));
144 step = (stop - start) / (count - 1);
153 step = pow (stop / start, 1.0 /
double (count - 1));
171 stop = start + step * (count - 1);
173 stop = start * pow (step,
double (count - 1));
180 const QPointF &boundingRectGraphMax,
188 double start, stop, step;
191 axisScale (boundingRectGraphMin.x(),
192 boundingRectGraphMax.x(),
200 modelGridDisplay.
setCountX (
unsigned (count));
206 axisScale (boundingRectGraphMin.y(),
207 boundingRectGraphMax.y(),
215 modelGridDisplay.
setCountY (
unsigned (count));
222 return modelGridDisplay;
226 const QPointF &boundingRectGraphMax,
229 const QSize &imageSize)
const
234 boundingRectGraphMax,
239 overridePolarCoordinateSettings (modelCoords,
245 return modelGridDisplay;
248 void GridInitializer::overridePolarCoordinateSettings (
const DocumentModelCoords &modelCoords,
251 const QSize &imageSize)
const
258 double stopX = 360.0;
260 int countX = qFloor (0.5 + (stopX - startX) / stepX);
264 modelGridDisplay.
setCountX (
unsigned (countX));
268 QPointF posTL, posBL, posTR, posBR;
274 double radiusTL = qSqrt (posTL.x () * posTL.x () + posTL.y () * posTL.y ());
275 double radiusBL = qSqrt (posBL.x () * posBL.x () + posBL.y () * posBL.y ());
276 double radiusTR = qSqrt (posTR.x () * posTR.x () + posTR.y () * posTR.y ());
277 double radiusBR = qSqrt (posBR.x () * posBR.x () + posBR.y () * posBR.y ());
279 double radius = qMax (qMax (qMax (radiusTL, radiusBL), radiusTR), radiusBR);
284 double stopY = radius;
285 double stepY = modelGridDisplay.
stepY ();
290 if (qAbs (denominator) > 0) {
292 qFloor (0.5 + (stopY - startY) / denominator) :
293 qFloor (0.5 + (qLn (stopY) - qLn (startY)) / denominator));
298 modelGridDisplay.
setCountY (
unsigned (countY));
301 double GridInitializer::roundOffToPower(
double arg,
304 double powerOf10 = pow (10.0, power);
305 return powerOf10 * floor (arg / powerOf10 + 0.5);
310 const int minPower = -30;
312 double avalue = fabs(value);
313 if (avalue < pow(10.0, minPower)) {
316 return qFloor (log10 (avalue));