Source for org.jfree.chart.renderer.Outlier

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * ------------
  28:  * Outlier.java
  29:  * ------------
  30:  * (C) Copyright 2003-2007, by David Browning and Contributors.
  31:  *
  32:  * Original Author:  David Browning (for Australian Institute of Marine 
  33:  *                   Science);
  34:  * Contributor(s):   David Gilbert (for Object Refinery Limited);
  35:  *
  36:  * $Id: Outlier.java,v 1.4.2.2 2007/02/02 15:52:24 mungady Exp $
  37:  *
  38:  * Changes
  39:  * -------
  40:  * 05-Aug-2003 : Version 1, contributed by David Browning (DG);
  41:  * 28-Aug-2003 : Minor tidy-up (DG);
  42:  * ------------- JFREECHART 1.0.x ---------------------------------------------
  43:  * 02-Feb-2007 : Removed author tags from all over JFreeChart sources (DG);
  44:  *
  45:  */
  46: 
  47: package org.jfree.chart.renderer;
  48: 
  49: import java.awt.geom.Point2D;
  50: 
  51: /**
  52:  * Represents one outlier in the box and whisker plot.
  53:  * <P>
  54:  * All the coordinates in this class are in Java2D space.
  55:  */
  56: public class Outlier implements Comparable {
  57: 
  58:     /** 
  59:      * The xy coordinates of the bounding box containing the outlier ellipse. 
  60:      */
  61:     private Point2D point;
  62: 
  63:     /** The radius of the ellipse */
  64:     private double radius;
  65: 
  66:     /**
  67:      * Constructs an outlier item consisting of a point and the radius of the 
  68:      * outlier ellipse
  69:      *
  70:      * @param xCoord  the x coordinate of the point.
  71:      * @param yCoord  the y coordinate of the point.
  72:      * @param radius  the radius of the ellipse.
  73:      */
  74:     public Outlier(double xCoord, double yCoord, double radius) {
  75:         this.point = new Point2D.Double(xCoord - radius, yCoord - radius);
  76:         this.radius = radius;
  77:     }
  78: 
  79:     /**
  80:      * Returns the xy coordinates of the bounding box containing the outlier 
  81:      * ellipse.
  82:      *
  83:      * @return The location of the outlier ellipse.
  84:      */
  85:     public Point2D getPoint() {
  86:         return this.point;
  87:     }
  88: 
  89:     /**
  90:      * Sets the xy coordinates of the bounding box containing the outlier 
  91:      * ellipse.
  92:      *
  93:      * @param point  the location.
  94:      */
  95:     public void setPoint(Point2D point) {
  96:         this.point = point;
  97:     }
  98: 
  99:     /**
 100:      * Returns the x coordinate of the bounding box containing the outlier 
 101:      * ellipse.
 102:      *
 103:      * @return The x coordinate.
 104:      */
 105:     public double getX() {
 106:         return getPoint().getX();
 107:     }
 108: 
 109:     /**
 110:      * Returns the y coordinate of the bounding box containing the outlier 
 111:      * ellipse.
 112:      *
 113:      * @return The y coordinate.
 114:      */
 115:     public double getY() {
 116:         return getPoint().getY();
 117:     }
 118: 
 119:     /**
 120:      * Returns the radius of the outlier ellipse.
 121:      *
 122:      * @return The radius.
 123:      */
 124:     public double getRadius() {
 125:         return this.radius;
 126:     }
 127: 
 128:     /**
 129:      * Sets the radius of the outlier ellipse.
 130:      *
 131:      * @param radius  the new radius.
 132:      */
 133:     public void setRadius(double radius) {
 134:         this.radius = radius;
 135:     }
 136: 
 137:     /**
 138:      * Compares this object with the specified object for order, based on
 139:      * the outlier's point.
 140:      *
 141:      * @param   o the Object to be compared.
 142:      * @return A negative integer, zero, or a positive integer as this object
 143:      *      is less than, equal to, or greater than the specified object.
 144:      *
 145:      */
 146:     public int compareTo(Object o) {
 147:         Outlier outlier = (Outlier) o;
 148:         Point2D p1 = getPoint();
 149:         Point2D p2 = outlier.getPoint();
 150:         if (p1.equals(p2)) {
 151:             return 0;
 152:         } 
 153:         else if ((p1.getX() < p2.getX()) || (p1.getY() < p2.getY())) {
 154:             return -1;
 155:         } 
 156:         else {
 157:             return 1;
 158:         } 
 159:     }
 160: 
 161:     /**
 162:      * Returns a true if outlier is overlapped and false if it is not.
 163:      * Overlapping is determined by the respective bounding boxes plus
 164:      * a small margin.
 165:      *
 166:      * @param other  the other outlier.
 167:      * 
 168:      * @return A <code>boolean</code> indicating whether or not an overlap has 
 169:      *         occurred.
 170:      */
 171:     public boolean overlaps(Outlier other) {
 172:         return ((other.getX() >= getX() - (this.radius * 1.1)) 
 173:                 && (other.getX() <= getX() + (this.radius * 1.1)) 
 174:                 && (other.getY() >= getY() - (this.radius * 1.1)) 
 175:                 && (other.getY() <= getY() + (this.radius * 1.1)));
 176:     }
 177: 
 178:     /**
 179:      * Returns a textual representation of the outlier.
 180:      *
 181:      * @return A <code>String</code> representing the outlier.
 182:      */
 183:     public String toString() {
 184:         return "{" + getX() + "," + getY() + "}";
 185:     }
 186: 
 187: }