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 }