Changeset 255


Ignore:
Timestamp:
11/21/08 17:43:42 (3 years ago)
Author:
seb
Message:

Average the y coordinate when drawing speed and elevation graph (much less noise)

Location:
bbtracker/trunk/src/org/bbtracker/mobile/gui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • bbtracker/trunk/src/org/bbtracker/mobile/gui/DataProvider.java

    r236 r255  
    2727                } 
    2828 
    29                 public double getMaxValue(Track track) { 
     29                public double getMaxValue(final Track track) { 
    3030                        return getValue(track.getPoint(track.getPointCount() - 1)); 
    3131                } 
    3232 
    33                 public double getMinValue(Track track) { 
     33                public double getMinValue(final Track track) { 
    3434                        return getValue(track.getPoint(0)); 
    3535                } 
    3636 
    37                 public double getValue(TrackPoint point) { 
     37                public double getValue(final TrackPoint point) { 
    3838                        return point.getTimestamp(); 
    3939                } 
     
    4343                        return 1000d; 
    4444                } 
     45 
     46                public boolean isHorizontalGraph() { 
     47                        return false; 
     48                } 
    4549        }; 
    4650 
     
    5054                } 
    5155 
    52                 public double getMaxValue(Track track) { 
     56                public double getMaxValue(final Track track) { 
    5357                        return track.getMaxSpeed(); 
    5458                } 
    5559 
    56                 public double getMinValue(Track track) { 
     60                public double getMinValue(final Track track) { 
    5761                        return 0d; 
    5862                } 
    5963 
    60                 public double getValue(TrackPoint point) { 
     64                public double getValue(final TrackPoint point) { 
    6165                        return point.getSpeed(); 
    6266                } 
     
    6771                } 
    6872 
     73                public boolean isHorizontalGraph() { 
     74                        return true; 
     75                } 
    6976        }; 
    7077 
     
    7481                } 
    7582 
    76                 public double getMaxValue(Track track) { 
     83                public double getMaxValue(final Track track) { 
    7784                        return 220d; 
    7885                } 
    7986 
    80                 public double getMinValue(Track track) { 
     87                public double getMinValue(final Track track) { 
    8188                        return 0d; 
    8289                } 
    8390 
    84                 public double getValue(TrackPoint point) { 
     91                public double getValue(final TrackPoint point) { 
    8592                        return point.getHeartRate(); 
    8693                } 
     
    9097                } 
    9198 
     99                public boolean isHorizontalGraph() { 
     100                        return true; 
     101                } 
    92102        }; 
    93103 
     
    97107                } 
    98108 
    99                 public double getMaxValue(Track track) { 
     109                public double getMaxValue(final Track track) { 
    100110                        return track.getMaxElevation(); 
    101111                } 
    102112 
    103                 public double getMinValue(Track track) { 
     113                public double getMinValue(final Track track) { 
    104114                        return track.getMinElevation(); 
    105115                } 
    106116 
    107                 public double getValue(TrackPoint point) { 
     117                public double getValue(final TrackPoint point) { 
    108118                        return point.getElevation(); 
    109119                } 
     
    114124                } 
    115125 
     126                public boolean isHorizontalGraph() { 
     127                        return true; 
     128                } 
    116129        }; 
    117130 
     
    121134                } 
    122135 
    123                 public double getMaxValue(Track track) { 
     136                public double getMaxValue(final Track track) { 
    124137                        return track.getMaxLongitude(); 
    125138                } 
    126139 
    127                 public double getMinValue(Track track) { 
     140                public double getMinValue(final Track track) { 
    128141                        return track.getMinLongitude(); 
    129142                } 
    130143 
    131                 public double getValue(TrackPoint point) { 
     144                public double getValue(final TrackPoint point) { 
    132145                        return point.getLongitude(); 
    133146                } 
     
    137150                        return (1 / 60) / 4; 
    138151                } 
     152 
     153                public boolean isHorizontalGraph() { 
     154                        return false; 
     155                } 
    139156        }; 
    140157 
     
    144161                } 
    145162 
    146                 public double getMaxValue(Track track) { 
     163                public double getMaxValue(final Track track) { 
    147164                        return track.getMaxLatitude(); 
    148165                } 
    149166 
    150                 public double getMinValue(Track track) { 
     167                public double getMinValue(final Track track) { 
    151168                        return track.getMinLatitude(); 
    152169                } 
    153170 
    154                 public double getValue(TrackPoint point) { 
     171                public double getValue(final TrackPoint point) { 
    155172                        return point.getLatitude(); 
    156173                } 
     
    159176                        // 0.25 seconds should be fine 
    160177                        return (1 / 60) / 4; 
     178                } 
     179 
     180                public boolean isHorizontalGraph() { 
     181                        return false; 
    161182                } 
    162183        }; 
     
    188209         */ 
    189210        public abstract double getSmallDelta(); 
     211 
     212        /** 
     213         * An horizontal graph will be smoothed by averaging the values. 
     214         *  
     215         * @return true for horizontal graph 
     216         */ 
     217        public abstract boolean isHorizontalGraph(); 
    190218} 
  • bbtracker/trunk/src/org/bbtracker/mobile/gui/PlotterTile.java

    r244 r255  
    163163                        resetScale(); 
    164164                        updateScale(track); 
    165                         updateScale(manager.getExtraTrack()); 
    166165                        onScaleChanged(); 
    167166                } 
     
    174173 
    175174        public void stateChanged(final int newState) { 
    176                 // do nothing 
     175                updateScale(); 
    177176        } 
    178177 
  • bbtracker/trunk/src/org/bbtracker/mobile/gui/TrackPlotter.java

    r238 r255  
    6363                int prevY = -1; 
    6464                final Enumeration segments = track.getSegments(); 
     65                final boolean doAverage = yData.isHorizontalGraph(); 
    6566                while (segments.hasMoreElements()) { 
    6667                        final TrackSegment segment = (TrackSegment) segments.nextElement(); 
    6768                        final Enumeration points = segment.getPoints(); 
    6869                        boolean newSegment = true; 
     70                        int sumY = 0; 
     71                        int nPoints = 0; 
    6972                        while (points.hasMoreElements()) { 
    7073                                final TrackPoint point = (TrackPoint) points.nextElement(); 
     
    7376                                final int x = offsetX + xAxis.getPosition(xValue); 
    7477                                final int y = height - (offsetY + yAxis.getPosition(yValue)); 
     78                                int paintY = y; 
     79                                boolean skip = false; 
     80                                if (doAverage) { 
     81                                        if (x == prevX) { 
     82                                                sumY += y; 
     83                                                ++nPoints; 
     84                                                skip = true; 
     85                                        } else { 
     86                                                if (nPoints > 0) { 
     87                                                        paintY = sumY / nPoints; 
     88                                                } 
     89                                                nPoints = 0; 
     90                                                sumY = 0; 
     91                                        } 
     92                                } 
     93                                if (!skip) { 
     94                                        paintConnection(g, prevPoint, prevX, prevY, point, x, paintY, newSegment); 
     95                                        prevPoint = point; 
     96                                        prevX = x; 
     97                                        prevY = paintY; 
     98                                } 
    7599 
    76                                 paintConnection(g, prevPoint, prevX, prevY, point, x, y, newSegment); 
    77  
    78                                 prevPoint = point; 
    79                                 prevX = x; 
    80                                 prevY = y; 
    81100                                newSegment = false; 
    82101                        } 
     
    88107         * Draws a connection between two points. The first time this method is 
    89108         * called for any given redraw operation <code>point1</code> will be null 
    90          * (and <code>x1</code> and <code>y1</code> will be -1). The last time 
    91          * it is called the same is true for <code>point2</code>, <code>x2</code> 
    92          * and <code>y2</code>. 
     109         * (and <code>x1</code> and <code>y1</code> will be -1). The last time it is 
     110         * called the same is true for <code>point2</code>, <code>x2</code> and 
     111         * <code>y2</code>. 
    93112         *  
    94113         * This is so that every point will always occur once in position 1 and once 
Note: See TracChangeset for help on using the changeset viewer.