001    package ui.recognizer;
002    
003    /** A class containing scaling information necessary for mapping
004     *  one set of data coordinates to another.
005     */
006    public class Scale {
007      protected DataCoordinate initialLowerLeft;
008      protected DataCoordinate finalLowerLeft;
009      protected DataCoordinate initialUpperRight;
010      protected DataCoordinate finalUpperRight;
011    
012      public Scale(DataCoordinate anInitialLowerLeft,
013                   DataCoordinate aFinalLowerLeft,
014                   DataCoordinate anInitialUpperRight,
015                   DataCoordinate aFinalUpperRight) {
016    
017          initialLowerLeft = anInitialLowerLeft;
018          finalLowerLeft = aFinalLowerLeft;
019          initialUpperRight = anInitialUpperRight;
020          finalUpperRight = aFinalUpperRight;
021      }
022    
023      public DataCoordinate map(DataCoordinate anInitialCoordinate) {
024    
025        double x = anInitialCoordinate.getX();
026        double y = anInitialCoordinate.getY();
027    
028        x -= initialLowerLeft.getX();
029        y -= initialLowerLeft.getY();
030    
031        x /= initialUpperRight.getX() - initialLowerLeft.getX();
032        y /= initialUpperRight.getY() - initialLowerLeft.getY();
033    
034        // x, y now mapped to unit square (0, 0) - (1, 1)
035    
036        x *= finalUpperRight.getX() - finalLowerLeft.getX();
037        y *= finalUpperRight.getY() - finalLowerLeft.getY();
038    
039        x += finalLowerLeft.getX();
040        y += finalLowerLeft.getY();
041    
042        return new DataCoordinate(x, y);
043      }
044    
045      public DataCoordinate getInitialLowerLeft() {
046        return initialLowerLeft;
047      }
048      public DataCoordinate getFinalLowerLeft() {
049        return finalLowerLeft;
050      }
051      public DataCoordinate getInitialUpperRight() {
052        return initialUpperRight;
053      }
054      public DataCoordinate getFinalUpperRight() {
055        return finalUpperRight;
056      }
057    }