-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNiceScale.java
More file actions
102 lines (85 loc) · 2.38 KB
/
Copy pathNiceScale.java
File metadata and controls
102 lines (85 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package Charts;
public class NiceScale {
private double min;
private double max;
private int maxTicks = 10;
private double tickSpacing;
private double range;
private double niceMin;
private double niceMax;
public NiceScale(final double MIN, final double MAX) {
min = MIN;
max = MAX;
calculate();
}
private void calculate() {
range = niceNum(max - min, false);
tickSpacing = niceNum(range / (maxTicks - 1), true);
niceMin = Math.floor(min / tickSpacing) * tickSpacing;
niceMax = Math.ceil(max / tickSpacing) * tickSpacing;
}
private double niceNum(final double RANGE, final boolean ROUND) {
double exponent; // exponent of RANGE
double fraction; // fractional part of RANGE
double niceFraction; // nice, rounded fraction
exponent = Math.floor(Math.log10(RANGE));
fraction = RANGE / Math.pow(10, exponent);
if (ROUND) {
if (fraction < 1.5) {
niceFraction = 1;
} else if (fraction < 3) {
niceFraction = 2;
} else if (fraction < 7) {
niceFraction = 5;
} else {
niceFraction = 10;
}
} else {
if (fraction <= 1) {
niceFraction = 1;
} else if (fraction <= 2) {
niceFraction = 2;
} else if (fraction <= 5) {
niceFraction = 5;
} else {
niceFraction = 10;
}
}
return niceFraction * Math.pow(10, exponent);
}
public void setMinMax(final double MIN, final double MAX) {
min = MIN;
max = MAX;
calculate();
}
public void setMaxTicks(final int MAX_TICKS) {
maxTicks = MAX_TICKS;
calculate();
}
public double getTickSpacing() {
return tickSpacing;
}
public double getNiceMin() {
return niceMin;
}
public double getNiceMax() {
return niceMax;
}
public int getMaxTicks() {
return maxTicks;
}
public double getMin() {
return min;
}
public void setMin(double min) {
this.min = min;
calculate();
}
public double getMax() {
return max;
}
public void setMax(double max) {
this.max = max;
calculate();
}
}