Ellipse2Dpublic 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. |
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.
|
Methods Summary |
---|
public boolean | contains(double x, double y)Tests if a specified point is inside the boundary of this
Ellipse2D .
// 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 boolean | contains(double x, double y, double w, double h)Tests if the interior of this Ellipse2D entirely
contains the specified rectangular area.
return (contains(x, y) &&
contains(x + w, y) &&
contains(x, y + h) &&
contains(x + w, y + h));
| public java.awt.geom.PathIterator | getPathIterator(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.
return new EllipseIterator(this, at);
| public boolean | intersects(double x, double y, double w, double h)Tests if the interior of this Ellipse2D intersects
the interior of a specified rectangular area.
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;
|
|