-
Notifications
You must be signed in to change notification settings - Fork 982
/
ColorMappingVariation.java
64 lines (54 loc) · 1.82 KB
/
ColorMappingVariation.java
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
package org.osmdroid.views.overlay.advancedpolyline;
/**
* Abstract base class for color variation mappings.
*
* @author Matthias Dittmer
*/
public abstract class ColorMappingVariation extends ColorMappingForScalar {
/**
* All mapping variables.
*/
private float mStart;
private float mEnd;
private float mScalarStart;
private float mScalarEnd;
private float mSlope;
/**
* Init function will be called from sub classes.
*
* @param scalarStart start of scalar
* @param scalarEnd end of scalar
* @param start start of one HSL value
* @param end end of one HSL value
*/
public void init(final float scalarStart, final float scalarEnd,
final float start, final float end) {
mScalarStart = scalarStart;
mScalarEnd = scalarEnd;
mStart = start;
mEnd = end;
// calc slope once here for linear interpolation
mSlope = mScalarEnd == mScalarStart ? 1 : (mEnd - mStart) / (mScalarEnd - mScalarStart);
}
@Override
protected int computeColor(final float pScalar) {
return ColorHelper.HSLToColor(getHue(pScalar), getSaturation(pScalar), getLuminance(pScalar));
}
protected abstract float getHue(final float pScalar);
protected abstract float getSaturation(final float pScalar);
protected abstract float getLuminance(final float pScalar);
/**
* Map a scalar with clipping on lower and upper bound.
*/
protected float mapScalar(float scalar) {
if (scalar >= mScalarEnd) {
return mEnd;
} else if (scalar <= mScalarStart) {
return mStart;
} else {
// scalar is between start and end
// do a linear mapping
return (scalar - mScalarStart) * mSlope + mStart;
}
}
}