represents a line segment in {@code (x,y)}
coordinate space. This class, like all of the Java 2D API, uses a
default coordinate system called
in which the y-axis
values increase downward and x-axis values increase to the right. For
more information on the user space coordinate system, see the
section of the Java 2D Programmer's Guide.
This class is only the abstract superclass for all objects that
store a 2D line segment.
The actual storage representation of the coordinates is left to
the subclass.
| Method from java.awt.geom.Line2D Detail: |
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}
Creates a new object of the same class as this object. |
public boolean contains(Point2D p) {
return false;
}
Tests if a given Point2D is inside the boundary of
this Line2D.
This method is required to implement the Shape interface,
but in the case of Line2D objects it always returns
false since a line contains no area. |
public boolean contains(Rectangle2D r) {
return false;
}
Tests if the interior of this Line2D entirely contains
the specified Rectangle2D.
This method is required to implement the Shape interface,
but in the case of Line2D objects it always returns
false since a line contains no area. |
public boolean contains(double x,
double y) {
return false;
}
Tests if a specified coordinate is inside the boundary of this
Line2D. This method is required to implement the
Shape interface, but in the case of Line2D
objects it always returns false since a line contains
no area. |
public boolean contains(double x,
double y,
double w,
double h) {
return false;
}
Tests if the interior of this Line2D entirely contains
the specified set of rectangular coordinates.
This method is required to implement the Shape interface,
but in the case of Line2D objects it always returns
false since a line contains no area. |
public Rectangle getBounds() {
return getBounds2D().getBounds();
}
|
abstract public Point2D getP1()
Returns the start Point2D of this Line2D. |
abstract public Point2D getP2()
Returns the end Point2D of this Line2D. |
public PathIterator getPathIterator(AffineTransform at) {
return new LineIterator(this, at);
}
Returns an iteration object that defines the boundary of this
Line2D.
The iterator for this class is not multi-threaded safe,
which means that this Line2D class does not
guarantee that modifications to the geometry of this
Line2D object do not affect any iterations of that
geometry that are already in process. |
public PathIterator getPathIterator(AffineTransform at,
double flatness) {
return new LineIterator(this, at);
}
Returns an iteration object that defines the boundary of this
flattened Line2D.
The iterator for this class is not multi-threaded safe,
which means that this Line2D class does not
guarantee that modifications to the geometry of this
Line2D object do not affect any iterations of that
geometry that are already in process. |
abstract public double getX1()
Returns the X coordinate of the start point in double precision. |
abstract public double getX2()
Returns the X coordinate of the end point in double precision. |
abstract public double getY1()
Returns the Y coordinate of the start point in double precision. |
abstract public double getY2()
Returns the Y coordinate of the end point in double precision. |
public boolean intersects(Rectangle2D r) {
return r.intersectsLine(getX1(), getY1(), getX2(), getY2());
}
|
public boolean intersects(double x,
double y,
double w,
double h) {
return intersects(new Rectangle2D.Double(x, y, w, h));
}
|
public boolean intersectsLine(Line2D l) {
return linesIntersect(l.getX1(), l.getY1(), l.getX2(), l.getY2(),
getX1(), getY1(), getX2(), getY2());
}
Tests if the specified line segment intersects this line segment. |
public boolean intersectsLine(double x1,
double y1,
double x2,
double y2) {
return linesIntersect(x1, y1, x2, y2,
getX1(), getY1(), getX2(), getY2());
}
Tests if the line segment from {@code (x1,y1)} to
{@code (x2,y2)} intersects this line segment. |
public static boolean linesIntersect(double x1,
double y1,
double x2,
double y2,
double x3,
double y3,
double x4,
double y4) {
return ((relativeCCW(x1, y1, x2, y2, x3, y3) *
relativeCCW(x1, y1, x2, y2, x4, y4) < = 0)
&& (relativeCCW(x3, y3, x4, y4, x1, y1) *
relativeCCW(x3, y3, x4, y4, x2, y2) < = 0));
}
Tests if the line segment from {@code (x1,y1)} to
{@code (x2,y2)} intersects the line segment from {@code (x3,y3)}
to {@code (x4,y4)}. |
public double ptLineDist(Point2D pt) {
return ptLineDist(getX1(), getY1(), getX2(), getY2(),
pt.getX(), pt.getY());
}
Returns the distance from a Point2D to this line.
The distance measured is the distance between the specified
point and the closest point on the infinitely-extended line
defined by this Line2D. If the specified point
intersects the line, this method returns 0.0. |
public double ptLineDist(double px,
double py) {
return ptLineDist(getX1(), getY1(), getX2(), getY2(), px, py);
}
Returns the distance from a point to this line.
The distance measured is the distance between the specified
point and the closest point on the infinitely-extended line
defined by this Line2D. If the specified point
intersects the line, this method returns 0.0. |
public static double ptLineDist(double x1,
double y1,
double x2,
double y2,
double px,
double py) {
return Math.sqrt(ptLineDistSq(x1, y1, x2, y2, px, py));
}
Returns the distance from a point to a line.
The distance measured is the distance between the specified
point and the closest point on the infinitely-extended line
defined by the specified coordinates. If the specified point
intersects the line, this method returns 0.0. |
public double ptLineDistSq(Point2D pt) {
return ptLineDistSq(getX1(), getY1(), getX2(), getY2(),
pt.getX(), pt.getY());
}
Returns the square of the distance from a specified
Point2D to this line.
The distance measured is the distance between the specified
point and the closest point on the infinitely-extended line
defined by this Line2D. If the specified point
intersects the line, this method returns 0.0. |
public double ptLineDistSq(double px,
double py) {
return ptLineDistSq(getX1(), getY1(), getX2(), getY2(), px, py);
}
Returns the square of the distance from a point to this line.
The distance measured is the distance between the specified
point and the closest point on the infinitely-extended line
defined by this Line2D. If the specified point
intersects the line, this method returns 0.0. |
public static double ptLineDistSq(double x1,
double y1,
double x2,
double y2,
double px,
double py) {
// Adjust vectors relative to x1,y1
// x2,y2 becomes relative vector from x1,y1 to end of segment
x2 -= x1;
y2 -= y1;
// px,py becomes relative vector from x1,y1 to test point
px -= x1;
py -= y1;
double dotprod = px * x2 + py * y2;
// dotprod is the length of the px,py vector
// projected on the x1,y1= >x2,y2 vector times the
// length of the x1,y1= >x2,y2 vector
double projlenSq = dotprod * dotprod / (x2 * x2 + y2 * y2);
// Distance to line is now the length of the relative point
// vector minus the length of its projection onto the line
double lenSq = px * px + py * py - projlenSq;
if (lenSq < 0) {
lenSq = 0;
}
return lenSq;
}
Returns the square of the distance from a point to a line.
The distance measured is the distance between the specified
point and the closest point on the infinitely-extended line
defined by the specified coordinates. If the specified point
intersects the line, this method returns 0.0. |
public double ptSegDist(Point2D pt) {
return ptSegDist(getX1(), getY1(), getX2(), getY2(),
pt.getX(), pt.getY());
}
Returns the distance from a Point2D to this line
segment.
The distance measured is the distance between the specified
point and the closest point between the current line's end points.
If the specified point intersects the line segment in between the
end points, this method returns 0.0. |
public double ptSegDist(double px,
double py) {
return ptSegDist(getX1(), getY1(), getX2(), getY2(), px, py);
}
Returns the distance from a point to this line segment.
The distance measured is the distance between the specified
point and the closest point between the current line's end points.
If the specified point intersects the line segment in between the
end points, this method returns 0.0. |
public static double ptSegDist(double x1,
double y1,
double x2,
double y2,
double px,
double py) {
return Math.sqrt(ptSegDistSq(x1, y1, x2, y2, px, py));
}
Returns the distance from a point to a line segment.
The distance measured is the distance between the specified
point and the closest point between the specified end points.
If the specified point intersects the line segment in between the
end points, this method returns 0.0. |
public double ptSegDistSq(Point2D pt) {
return ptSegDistSq(getX1(), getY1(), getX2(), getY2(),
pt.getX(), pt.getY());
}
Returns the square of the distance from a Point2D to
this line segment.
The distance measured is the distance between the specified
point and the closest point between the current line's end points.
If the specified point intersects the line segment in between the
end points, this method returns 0.0. |
public double ptSegDistSq(double px,
double py) {
return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), px, py);
}
Returns the square of the distance from a point to this line segment.
The distance measured is the distance between the specified
point and the closest point between the current line's end points.
If the specified point intersects the line segment in between the
end points, this method returns 0.0. |
public static double ptSegDistSq(double x1,
double y1,
double x2,
double y2,
double px,
double py) {
// Adjust vectors relative to x1,y1
// x2,y2 becomes relative vector from x1,y1 to end of segment
x2 -= x1;
y2 -= y1;
// px,py becomes relative vector from x1,y1 to test point
px -= x1;
py -= y1;
double dotprod = px * x2 + py * y2;
double projlenSq;
if (dotprod < = 0.0) {
// px,py is on the side of x1,y1 away from x2,y2
// distance to segment is length of px,py vector
// "length of its (clipped) projection" is now 0.0
projlenSq = 0.0;
} else {
// switch to backwards vectors relative to x2,y2
// x2,y2 are already the negative of x1,y1= >x2,y2
// to get px,py to be the negative of px,py= >x2,y2
// the dot product of two negated vectors is the same
// as the dot product of the two normal vectors
px = x2 - px;
py = y2 - py;
dotprod = px * x2 + py * y2;
if (dotprod < = 0.0) {
// px,py is on the side of x2,y2 away from x1,y1
// distance to segment is length of (backwards) px,py vector
// "length of its (clipped) projection" is now 0.0
projlenSq = 0.0;
} else {
// px,py is between x1,y1 and x2,y2
// dotprod is the length of the px,py vector
// projected on the x2,y2= >x1,y1 vector times the
// length of the x2,y2= >x1,y1 vector
projlenSq = dotprod * dotprod / (x2 * x2 + y2 * y2);
}
}
// Distance to line is now the length of the relative point
// vector minus the length of its projection onto the line
// (which is zero if the projection falls outside the range
// of the line segment).
double lenSq = px * px + py * py - projlenSq;
if (lenSq < 0) {
lenSq = 0;
}
return lenSq;
}
Returns the square of the distance from a point to a line segment.
The distance measured is the distance between the specified
point and the closest point between the specified end points.
If the specified point intersects the line segment in between the
end points, this method returns 0.0. |
public int relativeCCW(Point2D p) {
return relativeCCW(getX1(), getY1(), getX2(), getY2(),
p.getX(), p.getY());
}
|
public int relativeCCW(double px,
double py) {
return relativeCCW(getX1(), getY1(), getX2(), getY2(), px, py);
}
|
public static int relativeCCW(double x1,
double y1,
double x2,
double y2,
double px,
double py) {
x2 -= x1;
y2 -= y1;
px -= x1;
py -= y1;
double ccw = px * y2 - py * x2;
if (ccw == 0.0) {
// The point is colinear, classify based on which side of
// the segment the point falls on. We can calculate a
// relative value using the projection of px,py onto the
// segment - a negative value indicates the point projects
// outside of the segment in the direction of the particular
// endpoint used as the origin for the projection.
ccw = px * x2 + py * y2;
if (ccw > 0.0) {
// Reverse the projection to be relative to the original x2,y2
// x2 and y2 are simply negated.
// px and py need to have (x2 - x1) or (y2 - y1) subtracted
// from them (based on the original values)
// Since we really want to get a positive answer when the
// point is "beyond (x2,y2)", then we want to calculate
// the inverse anyway - thus we leave x2 & y2 negated.
px -= x2;
py -= y2;
ccw = px * x2 + py * y2;
if (ccw < 0.0) {
ccw = 0.0;
}
}
}
return (ccw < 0.0) ? -1 : ((ccw > 0.0) ? 1 : 0);
}
Returns an indicator of where the specified point
{@code (px,py)} lies with respect to the line segment from
{@code (x1,y1)} to {@code (x2,y2)}.
The return value can be either 1, -1, or 0 and indicates
in which direction the specified line must pivot around its
first end point, {@code (x1,y1)}, in order to point at the
specified point {@code (px,py)}.
A return value of 1 indicates that the line segment must
turn in the direction that takes the positive X axis towards
the negative Y axis. In the default coordinate system used by
Java 2D, this direction is counterclockwise.
A return value of -1 indicates that the line segment must
turn in the direction that takes the positive X axis towards
the positive Y axis. In the default coordinate system, this
direction is clockwise.
A return value of 0 indicates that the point lies
exactly on the line segment. Note that an indicator value
of 0 is rare and not useful for determining colinearity
because of floating point rounding issues.
If the point is colinear with the line segment, but
not between the end points, then the value will be -1 if the point
lies "beyond {@code (x1,y1)}" or 1 if the point lies
"beyond {@code (x2,y2)}". |
public void setLine(Line2D l) {
setLine(l.getX1(), l.getY1(), l.getX2(), l.getY2());
}
Sets the location of the end points of this Line2D to
the same as those end points of the specified Line2D. |
public void setLine(Point2D p1,
Point2D p2) {
setLine(p1.getX(), p1.getY(), p2.getX(), p2.getY());
}
Sets the location of the end points of this Line2D to
the specified Point2D coordinates. |
abstract public void setLine(double x1,
double y1,
double x2,
double y2)
Sets the location of the end points of this Line2D to
the specified double coordinates. |