001: /* ===========================================================
002: * JFreeChart : a free chart library for the Java(tm) platform
003: * ===========================================================
004: *
005: * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
006: *
007: * Project Info: http://www.jfree.org/jfreechart/index.html
008: *
009: * This library is free software; you can redistribute it and/or modify it
010: * under the terms of the GNU Lesser General Public License as published by
011: * the Free Software Foundation; either version 2.1 of the License, or
012: * (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but
015: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017: * License for more details.
018: *
019: * You should have received a copy of the GNU Lesser General Public
020: * License along with this library; if not, write to the Free Software
021: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022: * USA.
023: *
024: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025: * in the United States and other countries.]
026: *
027: * ------------
028: * Outlier.java
029: * ------------
030: * (C) Copyright 2003-2007, by David Browning and Contributors.
031: *
032: * Original Author: David Browning (for Australian Institute of Marine
033: * Science);
034: * Contributor(s): David Gilbert (for Object Refinery Limited);
035: *
036: * $Id: Outlier.java,v 1.4.2.2 2007/02/02 15:52:24 mungady Exp $
037: *
038: * Changes
039: * -------
040: * 05-Aug-2003 : Version 1, contributed by David Browning (DG);
041: * 28-Aug-2003 : Minor tidy-up (DG);
042: * ------------- JFREECHART 1.0.x ---------------------------------------------
043: * 02-Feb-2007 : Removed author tags from all over JFreeChart sources (DG);
044: *
045: */
046:
047: package org.jfree.chart.renderer;
048:
049: import java.awt.geom.Point2D;
050:
051: /**
052: * Represents one outlier in the box and whisker plot.
053: * <P>
054: * All the coordinates in this class are in Java2D space.
055: */
056: public class Outlier implements Comparable {
057:
058: /**
059: * The xy coordinates of the bounding box containing the outlier ellipse.
060: */
061: private Point2D point;
062:
063: /** The radius of the ellipse */
064: private double radius;
065:
066: /**
067: * Constructs an outlier item consisting of a point and the radius of the
068: * outlier ellipse
069: *
070: * @param xCoord the x coordinate of the point.
071: * @param yCoord the y coordinate of the point.
072: * @param radius the radius of the ellipse.
073: */
074: public Outlier(double xCoord, double yCoord, double radius) {
075: this .point = new Point2D.Double(xCoord - radius, yCoord
076: - radius);
077: this .radius = radius;
078: }
079:
080: /**
081: * Returns the xy coordinates of the bounding box containing the outlier
082: * ellipse.
083: *
084: * @return The location of the outlier ellipse.
085: */
086: public Point2D getPoint() {
087: return this .point;
088: }
089:
090: /**
091: * Sets the xy coordinates of the bounding box containing the outlier
092: * ellipse.
093: *
094: * @param point the location.
095: */
096: public void setPoint(Point2D point) {
097: this .point = point;
098: }
099:
100: /**
101: * Returns the x coordinate of the bounding box containing the outlier
102: * ellipse.
103: *
104: * @return The x coordinate.
105: */
106: public double getX() {
107: return getPoint().getX();
108: }
109:
110: /**
111: * Returns the y coordinate of the bounding box containing the outlier
112: * ellipse.
113: *
114: * @return The y coordinate.
115: */
116: public double getY() {
117: return getPoint().getY();
118: }
119:
120: /**
121: * Returns the radius of the outlier ellipse.
122: *
123: * @return The radius.
124: */
125: public double getRadius() {
126: return this .radius;
127: }
128:
129: /**
130: * Sets the radius of the outlier ellipse.
131: *
132: * @param radius the new radius.
133: */
134: public void setRadius(double radius) {
135: this .radius = radius;
136: }
137:
138: /**
139: * Compares this object with the specified object for order, based on
140: * the outlier's point.
141: *
142: * @param o the Object to be compared.
143: * @return A negative integer, zero, or a positive integer as this object
144: * is less than, equal to, or greater than the specified object.
145: *
146: */
147: public int compareTo(Object o) {
148: Outlier outlier = (Outlier) o;
149: Point2D p1 = getPoint();
150: Point2D p2 = outlier.getPoint();
151: if (p1.equals(p2)) {
152: return 0;
153: } else if ((p1.getX() < p2.getX()) || (p1.getY() < p2.getY())) {
154: return -1;
155: } else {
156: return 1;
157: }
158: }
159:
160: /**
161: * Returns a true if outlier is overlapped and false if it is not.
162: * Overlapping is determined by the respective bounding boxes plus
163: * a small margin.
164: *
165: * @param other the other outlier.
166: *
167: * @return A <code>boolean</code> indicating whether or not an overlap has
168: * occurred.
169: */
170: public boolean overlaps(Outlier other) {
171: return ((other.getX() >= getX() - (this .radius * 1.1))
172: && (other.getX() <= getX() + (this .radius * 1.1))
173: && (other.getY() >= getY() - (this .radius * 1.1)) && (other
174: .getY() <= getY() + (this .radius * 1.1)));
175: }
176:
177: /**
178: * Returns a textual representation of the outlier.
179: *
180: * @return A <code>String</code> representing the outlier.
181: */
182: public String toString() {
183: return "{" + getX() + "," + getY() + "}";
184: }
185:
186: }
|