package tim.prune.data; /** * Class to manage the scaling of points, used by the ThreeDModel */ public class PointScaler { /** Original data */ private Track _track = null; /** Secondary data for terrain grid */ private Track _terrainTrack = null; // Scaled values for data track private double[] _xValues = null; private double[] _yValues = null; private double[] _altValues = null; // Scaled values for terrain track, if any private double[] _terrainxValues = null; private double[] _terrainyValues = null; private double[] _terrainAltValues = null; // Altitude range private double _altitudeRange = 0.0; private double _minAltitudeMetres = 0.0; // Horizontal distance private double _horizDistanceMetres = 0.0; /** * Constructor * @param inTrack Track object */ public PointScaler(Track inTrack) { _track = inTrack; } /** * @param inTrack terrain track to add */ public void addTerrain(Track inTrack) { _terrainTrack = inTrack; } /** * Scale the points */ public void scale() { // Work out extents TrackExtents extents = new TrackExtents(_track); extents.applySquareBorder(); _horizDistanceMetres = Math.max(extents.getHorizontalDistanceMetres(), 1.0); final int numPoints = _track.getNumPoints(); // Find altitude range (including terrain) DoubleRange altRangeMetres = extents.getAltitudeRange(); if (_terrainTrack != null) { altRangeMetres.combine(new TrackExtents(_terrainTrack).getAltitudeRange()); } _altitudeRange = altRangeMetres.getRange() / _horizDistanceMetres; _minAltitudeMetres = altRangeMetres.getMinimum(); // create new arrays for scaled values if (_xValues == null || _xValues.length != numPoints) { _xValues = new double[numPoints]; _yValues = new double[numPoints]; _altValues = new double[numPoints]; if (_terrainTrack != null) { _terrainxValues = new double[_terrainTrack.getNumPoints()]; _terrainyValues = new double[_terrainTrack.getNumPoints()]; _terrainAltValues = new double[_terrainTrack.getNumPoints()]; } } final double midXvalue = extents.getXRange().getMidValue(); final double midYvalue = extents.getYRange().getMidValue(); final double xyRange = extents.getXRange().getRange(); // Calculate scaled values for (int p=0; p