javax.media.jai
Class WarpQuadratic

java.lang.Object
  |
  +--javax.media.jai.Warp
        |
        +--javax.media.jai.WarpPolynomial
              |
              +--javax.media.jai.WarpQuadratic
All Implemented Interfaces:
Serializable

public final class WarpQuadratic
extends WarpPolynomial

A quadratic-based description of an image warp.

The source position (x', y') of a point (x, y) is given by the quadratic bivariate polynomials:

 x' = p(x, y) = c1 + c2*x + c3*y + c4*x^2 + c5*x*y + c6*y^2
 y' = q(x, y) = c7 + c8*x + c9*y + c10*x^2 + c11*x*y + c12*y^2
 

WarpQuadratic is marked final so that it may be more easily inlined.

See Also:
WarpPolynomial, Serialized Form

Fields inherited from class javax.media.jai.WarpPolynomial
degree, postScaleX, postScaleY, preScaleX, preScaleY, xCoeffs, yCoeffs
 
Constructor Summary
WarpQuadratic(float[] xCoeffs, float[] yCoeffs)
          Constructs a WarpQuadratic with pre- and post-scale factors of 1.
WarpQuadratic(float[] xCoeffs, float[] yCoeffs, float preScaleX, float preScaleY, float postScaleX, float postScaleY)
          Constructs a WarpQuadratic with a given transform mapping destination pixels into source space.
 
Method Summary
 Point2D mapDestPoint(Point2D destPt)
          Computes the source point corresponding to the supplied point.
 float[] warpSparseRect(int x, int y, int width, int height, int periodX, int periodY, float[] destRect)
          Computes the source subpixel positions for a given rectangular destination region, subsampled with an integral period.
 
Methods inherited from class javax.media.jai.WarpPolynomial
createWarp, getCoeffs, getDegree, getPostScaleX, getPostScaleY, getPreScaleX, getPreScaleY, getXCoeffs, getYCoeffs
 
Methods inherited from class javax.media.jai.Warp
mapDestRect, mapSourcePoint, mapSourceRect, warpPoint, warpPoint, warpRect, warpRect, warpSparseRect
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WarpQuadratic

public WarpQuadratic(float[] xCoeffs,
                     float[] yCoeffs,
                     float preScaleX,
                     float preScaleY,
                     float postScaleX,
                     float postScaleY)
Constructs a WarpQuadratic with a given transform mapping destination pixels into source space. Note that this is a backward mapping as opposed to the forward mapping used in AffineOpImage. The coeffs arrays must each contain 6 floats corresponding to the coefficients c1, c2, etc. as shown in the class comment.
Parameters:
xCoeffs - The six destination to source transform coefficients for the X coordinate.
yCoeffs - The six destination to source transform coefficients for the Y coordinate.
preScaleX - The scale factor to apply to input (dest) X positions.
preScaleY - The scale factor to apply to input (dest) Y positions.
postScaleX - The scale factor to apply to the result of the X polynomial evaluation
postScaleY - The scale factor to apply to the result of the Y polynomial evaluation
Throws:
IllegalArgumentException - if the xCoeff and yCoeff arrays do not each have size entries.

WarpQuadratic

public WarpQuadratic(float[] xCoeffs,
                     float[] yCoeffs)
Constructs a WarpQuadratic with pre- and post-scale factors of 1.
Parameters:
xCoeffs - The 6 destination to source transform coefficients for the X coordinate.
yCoeffs - The 6 destination to source transform coefficients for the Y coordinate.
Throws:
IllegalArgumentException - if the xCoeff and yCoeff arrays do not each have size entries.
Method Detail

warpSparseRect

public float[] warpSparseRect(int x,
                              int y,
                              int width,
                              int height,
                              int periodX,
                              int periodY,
                              float[] destRect)
Computes the source subpixel positions for a given rectangular destination region, subsampled with an integral period. The destination region is specified using normal integral (full pixel) coordinates. The source positions returned by the method are specified in floating point.
Overrides:
warpSparseRect in class Warp
Parameters:
x - The minimum X coordinate of the destination region.
y - The minimum Y coordinate of the destination region.
width - The width of the destination region.
height - The height of the destination region.
periodX - The horizontal sampling period.
periodY - The vertical sampling period.
destRect - A float array containing at least 2*((width+periodX-1)/periodX)* ((height+periodY-1)/periodY) elements, or null. If null, a new array will be constructed.
Returns:
A reference to the destRect parameter if it is non-null, or a new float array otherwise.
Throws:
ArrayBoundsException - if destRect is too small

mapDestPoint

public Point2D mapDestPoint(Point2D destPt)
Computes the source point corresponding to the supplied point.

This method returns the value of pt in the following code snippet:

 double x1 = (destPt.getX() + 0.5F)*preScaleX;
 double x2 = x1*x1;

 double y1 = (destPt.getY() + 0.5F)*preScaleY;
 double y2 = y1*y1;

 double x = c1 + c2*x1 + c3*y1 + c4*x2 + c5*x1*y1 + c6*y2;
 double y = c7 + c8*x1 + c9*y1 + c10*x2 + c11*x1*y1 + c12*y2;

 Point2D pt = (Point2D)destPt.clone();
 pt.setLocation(x*postScaleX - 0.5, y*postScaleY - 0.5);
 

Overrides:
mapDestPoint in class WarpPolynomial
Parameters:
destPt - the position in destination image coordinates to map to source image coordinates.
Returns:
a Point2D of the same class as destPt.
Throws:
IllegalArgumentException - if destPt is null.
Since:
JAI 1.1.2