1 package tim.prune.data;
4 * Class to manage the scaling of points, used by the ThreeDModel
6 public class PointScaler
9 private Track _track = null;
11 private double[] _xValues = null;
12 private double[] _yValues = null;
13 private double[] _altValues = null;
15 private double _altitudeRange = 0.0;
20 * @param inTrack Track object
22 public PointScaler(Track inTrack)
34 TrackExtents extents = new TrackExtents(_track);
35 extents.applySquareBorder();
36 final double horizDistance = Math.max(extents.getHorizontalDistanceMetres(), 1.0);
37 final int numPoints = _track.getNumPoints();
39 // Find altitude range
40 _altitudeRange = extents.getAltitudeRange().getRange() / horizDistance;
41 final double minAltitude = extents.getAltitudeRange().getMinimum();
43 // create new arrays for scaled values
44 if (_xValues == null || _xValues.length != numPoints)
46 _xValues = new double[numPoints];
47 _yValues = new double[numPoints];
48 _altValues = new double[numPoints];
51 final double midXvalue = extents.getXRange().getMidValue();
52 final double midYvalue = extents.getYRange().getMidValue();
53 final double xyRange = extents.getXRange().getRange();
55 // Calculate scaled values
56 for (int p=0; p<numPoints; p++)
58 DataPoint point = _track.getPoint(p);
61 _xValues[p] = (_track.getX(p) - midXvalue) / xyRange;
62 _yValues[p] = (midYvalue - _track.getY(p)) / xyRange; // y values have to be inverted
63 _altValues[p] = (point.getAltitude().getMetricValue() - minAltitude) / horizDistance;
71 * Get the horizontal value for the specified point
72 * @param inIndex index of point, starting at 0
73 * @return scaled horizontal value
75 public double getHorizValue(int inIndex)
77 return _xValues[inIndex];
81 * Get the vertical value for the specified point
82 * @param inIndex index of point, starting at 0
83 * @return scaled vertical value
85 public double getVertValue(int inIndex)
87 return _yValues[inIndex];
91 * Get the altitude value for the specified point
92 * @param inIndex index of point, starting at 0
93 * @return scaled altitude value
95 public double getAltValue(int inIndex)
97 return _altValues[inIndex];
101 * @return altitude range, in metres
103 public double getAltitudeRange()
105 return _altitudeRange;