001 package ui.recognizer;
002
003
004 /** A class which can represent a data coordinate : an object containing an absissa (x) and ordinate (y) value
005 * and which can be printed and ordered appropriately.
006 * The units are in double precision because the data can represent any real number when calibrated.
007 * When sorted, data coordinates are ordered by their x coordinate.
008 * This class is compatible with <code>java.awt.Point2D</code>.
009 *
010 * @author John Talbot
011 */
012 public class DataCoordinate extends java.awt.geom.Point2D.Double implements Comparable {
013
014 public DataCoordinate(DataCoordinate data) {
015 super(data.getX(), data.getY());
016 }
017
018 public DataCoordinate(double aX, double aY) {
019 super(aX, aY);
020 }
021
022 public void setLocation(double aX, double aY) {
023 setX(aX);
024 setY(aY);
025 }
026
027 public void setX(double aX) {
028 x = aX;
029 };
030
031 public void setY(double aY) {
032 y = aY;
033 };
034
035 /** Scale a coordinate using a calibration object. Note : this data coordinate is modified.
036 */
037 public DataCoordinate scale(Calibration aCalibration) {
038 setX(getX() * aCalibration.getUnitX());
039 setY(getY() * aCalibration.getUnitY());
040 return this;
041 }
042
043 /** This method from Object is overidden to provide a standard way to print [x,y] coordinates.
044 */
045 public String toString() {
046 return getX() + " " + getY();
047 }
048
049 /** Implementation of Comparable so that when sorted, data coordinates are ordered by their x coordinate.
050 */
051 public int compareTo(Object aDataCoordinate) {
052 if (aDataCoordinate != null && aDataCoordinate instanceof DataCoordinate) {
053 DataCoordinate data = (DataCoordinate) aDataCoordinate;
054 java.lang.Double x1 = new java.lang.Double(getX());
055 java.lang.Double x2 = new java.lang.Double(data.getX());
056 return x1.compareTo(x2);
057 } else {
058 return 1;
059 }
060 }
061 }