FileDocCategorySizeDatePackage
Ellipse2D.javaAPI DocJava SE 5 API12563Fri Aug 26 14:56:52 BST 2005java.awt.geom

Ellipse2D

public abstract class Ellipse2D extends RectangularShape
The Ellipse2D class describes an ellipse that is defined by a bounding rectangle.

This class is only the abstract superclass for all objects which store a 2D ellipse. The actual storage representation of the coordinates is left to the subclass.

version
1.16, 12/19/03
author
Jim Graham

Fields Summary
Constructors Summary
protected Ellipse2D()
This is an abstract class that cannot be instantiated directly. Type-specific implementation subclasses are available for instantiation and provide a number of formats for storing the information necessary to satisfy the various accessor methods below.

see
java.awt.geom.Ellipse2D.Float
see
java.awt.geom.Ellipse2D.Double

    
Methods Summary
public booleancontains(double x, double y)
Tests if a specified point is inside the boundary of this Ellipse2D.

param
x, y the coordinates to test
return
true if the specified point is contained in this ellipse; false otherwise.

	// Normalize the coordinates compared to the ellipse
	// having a center at 0,0 and a radius of 0.5.
	double ellw = getWidth();
	if (ellw <= 0.0) {
	    return false;
	}
	double normx = (x - getX()) / ellw - 0.5;
	double ellh = getHeight();
	if (ellh <= 0.0) {
	    return false;
	}
	double normy = (y - getY()) / ellh - 0.5;
	return (normx * normx + normy * normy) < 0.25;
    
public booleancontains(double x, double y, double w, double h)
Tests if the interior of this Ellipse2D entirely contains the specified rectangular area.

param
x, y the coordinates of the upper left corner of the specified rectangular area
param
w the width of the specified rectangular area
param
h the height of the specified rectangular area
return
true if this Ellipse2D contains the specified rectangular area; false otherwise.

	return (contains(x, y) &&
		contains(x + w, y) &&
		contains(x, y + h) &&
		contains(x + w, y + h));
    
public java.awt.geom.PathIteratorgetPathIterator(java.awt.geom.AffineTransform at)
Returns an iteration object that defines the boundary of this Ellipse2D. The iterator for this class is multi-threaded safe, which means that this Ellipse2D class guarantees that modifications to the geometry of this Ellipse2D object do not affect any iterations of that geometry that are already in process.

param
at an optional AffineTransform to be applied to the coordinates as they are returned in the iteration, or null if untransformed coordinates are desired
return
the PathIterator object that returns the geometry of the outline of this Ellipse2D, one segment at a time.

	return new EllipseIterator(this, at);
    
public booleanintersects(double x, double y, double w, double h)
Tests if the interior of this Ellipse2D intersects the interior of a specified rectangular area.

param
x, y the coordinates of the upper left corner of the specified rectangular area
param
w the width of the specified rectangular area
param
h the height of the specified rectangluar area
return
true if this Ellipse2D contains the specified rectangular area; false otherwise.

	if (w <= 0.0 || h <= 0.0) {
	    return false;
	}
	// Normalize the rectangular coordinates compared to the ellipse
	// having a center at 0,0 and a radius of 0.5.
	double ellw = getWidth();
	if (ellw <= 0.0) {
	    return false;
	}
	double normx0 = (x - getX()) / ellw - 0.5;
	double normx1 = normx0 + w / ellw;
	double ellh = getHeight();
	if (ellh <= 0.0) {
	    return false;
	}
	double normy0 = (y - getY()) / ellh - 0.5;
	double normy1 = normy0 + h / ellh;
	// find nearest x (left edge, right edge, 0.0)
	// find nearest y (top edge, bottom edge, 0.0)
	// if nearest x,y is inside circle of radius 0.5, then intersects
	double nearx, neary;
	if (normx0 > 0.0) {
	    // center to left of X extents
	    nearx = normx0;
	} else if (normx1 < 0.0) {
	    // center to right of X extents
	    nearx = normx1;
	} else {
	    nearx = 0.0;
	}
	if (normy0 > 0.0) {
	    // center above Y extents
	    neary = normy0;
	} else if (normy1 < 0.0) {
	    // center below Y extents
	    neary = normy1;
	} else {
	    neary = 0.0;
	}
	return (nearx * nearx + neary * neary) < 0.25;