comparison base/ScaleTickIntervals.h @ 1412:b7a9edee85e0 scale-ticks

Change loop to something that feels more correct, though it makes no difference to the tests here. More tests, one failing.
author Chris Cannam
date Thu, 04 May 2017 08:32:41 +0100
parents 1f0d071e7ce6
children c6fa111b4553
comparison
equal deleted inserted replaced
1411:1f0d071e7ce6 1412:b7a9edee85e0
18 18
19 #include <string> 19 #include <string>
20 #include <vector> 20 #include <vector>
21 #include <cmath> 21 #include <cmath>
22 22
23 //#define DEBUG_SCALE_TICK_INTERVALS 1 23 #define DEBUG_SCALE_TICK_INTERVALS 1
24 24
25 #ifdef DEBUG_SCALE_TICK_INTERVALS 25 #ifdef DEBUG_SCALE_TICK_INTERVALS
26 #include <iostream> 26 #include <iostream>
27 #endif 27 #endif
28 28
30 { 30 {
31 public: 31 public:
32 struct Range { 32 struct Range {
33 double min; // start of value range 33 double min; // start of value range
34 double max; // end of value range 34 double max; // end of value range
35 int n; // number of divisions (will be at most n+1 ticks) 35 int n; // number of divisions (approximate only)
36 }; 36 };
37 37
38 struct Tick { 38 struct Tick {
39 double value; // value this tick represents 39 double value; // value this tick represents
40 std::string label; // value as written 40 std::string label; // value as written
144 }; 144 };
145 double eps = 1e-7; 145 double eps = 1e-7;
146 if (t.spacing < eps * 10.0) { 146 if (t.spacing < eps * 10.0) {
147 eps = t.spacing / 10.0; 147 eps = t.spacing / 10.0;
148 } 148 }
149 for (double value = t.initial; value < r.max + eps; value += t.spacing) { 149 int n = 0;
150 while (true) {
151 double value = t.initial + n * t.spacing;
150 value = t.roundTo * round(value / t.roundTo); 152 value = t.roundTo * round(value / t.roundTo);
153 if (value >= r.max + eps) {
154 break;
155 }
151 t.ticks.push_back(makeTick(value)); 156 t.ticks.push_back(makeTick(value));
157 ++n;
152 } 158 }
153 } 159 }
154 }; 160 };
155 161
156 #endif 162 #endif