| java.lang.Object sun.awt.geom.Curve
All known Subclasses: sun.awt.geom.Order3, sun.awt.geom.Order2, sun.awt.geom.Order1, sun.awt.geom.Order0,
Curve | abstract public class Curve (Code) | | |
Field Summary | |
final public static int | DECREASING | final public static int | INCREASING | final public static int | RECT_INTERSECTS The rectangle intersection test counts the number of times
that the path crosses through the shadow that the rectangle
projects to the right towards (x => +INFINITY).
During processing of the path it actually counts every time
the path crosses either or both of the top and bottom edges
of that shadow. | final public static double | TMIN | protected int | direction |
Constructor Summary | |
public | Curve(int direction) |
Method Summary | |
abstract public double | TforY(double y) | abstract public double | XforT(double t) | abstract public double | XforY(double y) | abstract public double | YforT(double t) | public boolean | accumulateCrossings(Crossings c) | public int | compareTo(Curve that, double yrange) | public String | controlPointString() | public int | crossingsFor(double x, double y) | abstract public double | dXforT(double t, int deriv) | abstract public double | dYforT(double t, int deriv) | public static long | diffbits(double y1, double y2) | abstract public void | enlarge(Rectangle2D r) | public boolean | fairlyClose(double v1, double v2) | public boolean | findIntersect(Curve that, double yrange, double ymin, int slevel, int tlevel, double s0, double xs0, double ys0, double s1, double xs1, double ys1, double t0, double xt0, double yt0, double t1, double xt1, double yt1) | final public int | getDirection() | abstract public int | getOrder() | abstract public Curve | getReversedCurve() | abstract public int | getSegment(double coords) | public Curve | getSubCurve(double ystart, double yend) | abstract public Curve | getSubCurve(double ystart, double yend, int dir) | final public Curve | getWithDirection(int direction) | abstract public double | getX0() | abstract public double | getX1() | abstract public double | getXBot() | abstract public double | getXMax() | abstract public double | getXMin() | abstract public double | getXTop() | abstract public double | getY0() | abstract public double | getY1() | abstract public double | getYBot() | abstract public double | getYTop() | public static void | insertCubic(Vector curves, double x0, double y0, double coords) | public static void | insertLine(Vector curves, double x0, double y0, double x1, double y1) | public static void | insertMove(Vector curves, double x, double y) | public static void | insertQuad(Vector curves, double x0, double y0, double coords) | public static double | next(double v) | abstract public double | nextVertical(double t0, double t1) | public static int | orderof(double x1, double x2) | public static int | pointCrossingsForCubic(double px, double py, double x0, double y0, double xc0, double yc0, double xc1, double yc1, double x1, double y1, int level) Calculates the number of times the cubic from (x0,y0) to (x1,y1)
crosses the ray extending to the right from (px,py). | public static int | pointCrossingsForLine(double px, double py, double x0, double y0, double x1, double y1) Calculates the number of times the line from (x0,y0) to (x1,y1)
crosses the ray extending to the right from (px,py). | public static int | pointCrossingsForPath(PathIterator pi, double px, double py) Calculates the number of times the given path
crosses the ray extending to the right from (px,py). | public static int | pointCrossingsForQuad(double px, double py, double x0, double y0, double xc, double yc, double x1, double y1, int level) Calculates the number of times the quad from (x0,y0) to (x1,y1)
crosses the ray extending to the right from (px,py). | public static double | prev(double v) | public static int | rectCrossingsForCubic(int crossings, double rxmin, double rymin, double rxmax, double rymax, double x0, double y0, double xc0, double yc0, double xc1, double yc1, double x1, double y1, int level) Accumulate the number of times the cubic crosses the shadow
extending to the right of the rectangle. | public static int | rectCrossingsForLine(int crossings, double rxmin, double rymin, double rxmax, double rymax, double x0, double y0, double x1, double y1) Accumulate the number of times the line crosses the shadow
extending to the right of the rectangle. | public static int | rectCrossingsForPath(PathIterator pi, double rxmin, double rymin, double rxmax, double rymax) Accumulate the number of times the path crosses the shadow
extending to the right of the rectangle. | public static int | rectCrossingsForQuad(int crossings, double rxmin, double rymin, double rxmax, double rymax, double x0, double y0, double xc, double yc, double x1, double y1, int level) Accumulate the number of times the quad crosses the shadow
extending to the right of the rectangle. | public double | refineTforY(double t0, double yt0, double y0) | public static double | round(double v) | public static long | signeddiffbits(double y1, double y2) | public String | toString() |
DECREASING | final public static int DECREASING(Code) | | |
INCREASING | final public static int INCREASING(Code) | | |
RECT_INTERSECTS | final public static int RECT_INTERSECTS(Code) | | The rectangle intersection test counts the number of times
that the path crosses through the shadow that the rectangle
projects to the right towards (x => +INFINITY).
During processing of the path it actually counts every time
the path crosses either or both of the top and bottom edges
of that shadow. If the path enters from the top, the count
is incremented. If it then exits back through the top, the
same way it came in, the count is decremented and there is
no impact on the winding count. If, instead, the path exits
out the bottom, then the count is incremented again and a
full pass through the shadow is indicated by the winding count
having been incremented by 2.
Thus, the winding count that it accumulates is actually double
the real winding count. Since the path is continuous, the
final answer should be a multiple of 2, otherwise there is a
logic error somewhere.
If the path ever has a direct hit on the rectangle, then a
special value is returned. This special value terminates
all ongoing accumulation on up through the call chain and
ends up getting returned to the calling function which can
then produce an answer directly. For intersection tests,
the answer is always "true" if the path intersects the
rectangle. For containment tests, the answer is always
"false" if the path intersects the rectangle. Thus, no
further processing is ever needed if an intersection occurs.
|
TMIN | final public static double TMIN(Code) | | |
direction | protected int direction(Code) | | |
Curve | public Curve(int direction)(Code) | | |
TforY | abstract public double TforY(double y)(Code) | | |
XforT | abstract public double XforT(double t)(Code) | | |
XforY | abstract public double XforY(double y)(Code) | | |
YforT | abstract public double YforT(double t)(Code) | | |
compareTo | public int compareTo(Curve that, double yrange)(Code) | | |
crossingsFor | public int crossingsFor(double x, double y)(Code) | | |
dXforT | abstract public double dXforT(double t, int deriv)(Code) | | |
dYforT | abstract public double dYforT(double t, int deriv)(Code) | | |
diffbits | public static long diffbits(double y1, double y2)(Code) | | |
fairlyClose | public boolean fairlyClose(double v1, double v2)(Code) | | |
findIntersect | public boolean findIntersect(Curve that, double yrange, double ymin, int slevel, int tlevel, double s0, double xs0, double ys0, double s1, double xs1, double ys1, double t0, double xt0, double yt0, double t1, double xt1, double yt1)(Code) | | |
getDirection | final public int getDirection()(Code) | | |
getOrder | abstract public int getOrder()(Code) | | |
getReversedCurve | abstract public Curve getReversedCurve()(Code) | | |
getSegment | abstract public int getSegment(double coords)(Code) | | |
getSubCurve | public Curve getSubCurve(double ystart, double yend)(Code) | | |
getSubCurve | abstract public Curve getSubCurve(double ystart, double yend, int dir)(Code) | | |
getWithDirection | final public Curve getWithDirection(int direction)(Code) | | |
getX0 | abstract public double getX0()(Code) | | |
getX1 | abstract public double getX1()(Code) | | |
getXBot | abstract public double getXBot()(Code) | | |
getXMax | abstract public double getXMax()(Code) | | |
getXMin | abstract public double getXMin()(Code) | | |
getXTop | abstract public double getXTop()(Code) | | |
getY0 | abstract public double getY0()(Code) | | |
getY1 | abstract public double getY1()(Code) | | |
getYBot | abstract public double getYBot()(Code) | | |
getYTop | abstract public double getYTop()(Code) | | |
insertCubic | public static void insertCubic(Vector curves, double x0, double y0, double coords)(Code) | | |
insertLine | public static void insertLine(Vector curves, double x0, double y0, double x1, double y1)(Code) | | |
insertMove | public static void insertMove(Vector curves, double x, double y)(Code) | | |
insertQuad | public static void insertQuad(Vector curves, double x0, double y0, double coords)(Code) | | |
next | public static double next(double v)(Code) | | |
nextVertical | abstract public double nextVertical(double t0, double t1)(Code) | | |
orderof | public static int orderof(double x1, double x2)(Code) | | |
pointCrossingsForCubic | public static int pointCrossingsForCubic(double px, double py, double x0, double y0, double xc0, double yc0, double xc1, double yc1, double x1, double y1, int level)(Code) | | Calculates the number of times the cubic from (x0,y0) to (x1,y1)
crosses the ray extending to the right from (px,py).
If the point lies on a part of the curve,
then no crossings are counted for that intersection.
the level parameter should be 0 at the top-level call and will count
up for each recursion level to prevent infinite recursion
+1 is added for each crossing where the Y coordinate is increasing
-1 is added for each crossing where the Y coordinate is decreasing
|
pointCrossingsForLine | public static int pointCrossingsForLine(double px, double py, double x0, double y0, double x1, double y1)(Code) | | Calculates the number of times the line from (x0,y0) to (x1,y1)
crosses the ray extending to the right from (px,py).
If the point lies on the line, then no crossings are recorded.
+1 is returned for a crossing where the Y coordinate is increasing
-1 is returned for a crossing where the Y coordinate is decreasing
|
pointCrossingsForPath | public static int pointCrossingsForPath(PathIterator pi, double px, double py)(Code) | | Calculates the number of times the given path
crosses the ray extending to the right from (px,py).
If the point lies on a part of the path,
then no crossings are counted for that intersection.
+1 is added for each crossing where the Y coordinate is increasing
-1 is added for each crossing where the Y coordinate is decreasing
The return value is the sum of all crossings for every segment in
the path.
The path must start with a SEG_MOVETO, otherwise an exception is
thrown.
The caller must check p[xy] for NaN values.
The caller may also reject infinite p[xy] values as well.
|
pointCrossingsForQuad | public static int pointCrossingsForQuad(double px, double py, double x0, double y0, double xc, double yc, double x1, double y1, int level)(Code) | | Calculates the number of times the quad from (x0,y0) to (x1,y1)
crosses the ray extending to the right from (px,py).
If the point lies on a part of the curve,
then no crossings are counted for that intersection.
the level parameter should be 0 at the top-level call and will count
up for each recursion level to prevent infinite recursion
+1 is added for each crossing where the Y coordinate is increasing
-1 is added for each crossing where the Y coordinate is decreasing
|
prev | public static double prev(double v)(Code) | | |
rectCrossingsForCubic | public static int rectCrossingsForCubic(int crossings, double rxmin, double rymin, double rxmax, double rymax, double x0, double y0, double xc0, double yc0, double xc1, double yc1, double x1, double y1, int level)(Code) | | Accumulate the number of times the cubic crosses the shadow
extending to the right of the rectangle. See the comment
for the RECT_INTERSECTS constant for more complete details.
|
rectCrossingsForLine | public static int rectCrossingsForLine(int crossings, double rxmin, double rymin, double rxmax, double rymax, double x0, double y0, double x1, double y1)(Code) | | Accumulate the number of times the line crosses the shadow
extending to the right of the rectangle. See the comment
for the RECT_INTERSECTS constant for more complete details.
|
rectCrossingsForPath | public static int rectCrossingsForPath(PathIterator pi, double rxmin, double rymin, double rxmax, double rymax)(Code) | | Accumulate the number of times the path crosses the shadow
extending to the right of the rectangle. See the comment
for the RECT_INTERSECTS constant for more complete details.
The return value is the sum of all crossings for both the
top and bottom of the shadow for every segment in the path,
or the special value RECT_INTERSECTS if the path ever enters
the interior of the rectangle.
The path must start with a SEG_MOVETO, otherwise an exception is
thrown.
The caller must check r[xy]{min,max} for NaN values.
|
rectCrossingsForQuad | public static int rectCrossingsForQuad(int crossings, double rxmin, double rymin, double rxmax, double rymax, double x0, double y0, double xc, double yc, double x1, double y1, int level)(Code) | | Accumulate the number of times the quad crosses the shadow
extending to the right of the rectangle. See the comment
for the RECT_INTERSECTS constant for more complete details.
|
refineTforY | public double refineTforY(double t0, double yt0, double y0)(Code) | | |
round | public static double round(double v)(Code) | | |
signeddiffbits | public static long signeddiffbits(double y1, double y2)(Code) | | |
|
|