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 }