Added set(AffineTransform). More return type refinement.
This commit is contained in:
@@ -50,6 +50,12 @@ public class AffineTransform extends AbstractTransform
|
|||||||
this.tx = tx; this.ty = ty;
|
this.tx = tx; this.ty = ty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets this affine transform matrix to {@code other}.
|
||||||
|
* @return this instance, for chaining. */
|
||||||
|
public AffineTransform set (AffineTransform other) {
|
||||||
|
return setTransform(other.m00, other.m01, other.m10, other.m11, other.tx, other.ty);
|
||||||
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public double uniformScale () {
|
public double uniformScale () {
|
||||||
// the square root of the signed area of the parallelogram spanned by the axis vectors
|
// the square root of the signed area of the parallelogram spanned by the axis vectors
|
||||||
@@ -122,12 +128,12 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setUniformScale (double scale) {
|
public AffineTransform setUniformScale (double scale) {
|
||||||
return setScale(scale, scale);
|
return (AffineTransform)setScale(scale, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setScaleX (double scaleX) {
|
public AffineTransform setScaleX (double scaleX) {
|
||||||
// normalize the scale to 1, then re-apply
|
// normalize the scale to 1, then re-apply
|
||||||
double mult = scaleX / scaleX();
|
double mult = scaleX / scaleX();
|
||||||
m00 *= mult;
|
m00 *= mult;
|
||||||
@@ -136,7 +142,7 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setScaleY (double scaleY) {
|
public AffineTransform setScaleY (double scaleY) {
|
||||||
// normalize the scale to 1, then re-apply
|
// normalize the scale to 1, then re-apply
|
||||||
double mult = scaleY / scaleY();
|
double mult = scaleY / scaleY();
|
||||||
m10 *= mult;
|
m10 *= mult;
|
||||||
@@ -145,7 +151,7 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setRotation (double angle) {
|
public AffineTransform setRotation (double angle) {
|
||||||
// extract the scale, then reapply rotation and scale together
|
// extract the scale, then reapply rotation and scale together
|
||||||
double sx = scaleX(), sy = scaleY();
|
double sx = scaleX(), sy = scaleY();
|
||||||
double sina = Math.sin(angle), cosa = Math.cos(angle);
|
double sina = Math.sin(angle), cosa = Math.cos(angle);
|
||||||
@@ -155,26 +161,27 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTranslation (double tx, double ty) {
|
public AffineTransform setTranslation (double tx, double ty) {
|
||||||
this.tx = tx;
|
this.tx = tx;
|
||||||
this.ty = ty;
|
this.ty = ty;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTx (double tx) {
|
public AffineTransform setTx (double tx) {
|
||||||
this.tx = tx;
|
this.tx = tx;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTy (double ty) {
|
public AffineTransform setTy (double ty) {
|
||||||
this.ty = ty;
|
this.ty = ty;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTransform (double m00, double m01, double m10, double m11, double tx, double ty) {
|
public AffineTransform setTransform (double m00, double m01, double m10, double m11,
|
||||||
|
double tx, double ty) {
|
||||||
this.m00 = m00;
|
this.m00 = m00;
|
||||||
this.m01 = m01;
|
this.m01 = m01;
|
||||||
this.m10 = m10;
|
this.m10 = m10;
|
||||||
@@ -185,12 +192,12 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform uniformScale (double scale) {
|
public AffineTransform uniformScale (double scale) {
|
||||||
return scale(scale, scale);
|
return scale(scale, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform scale (double scaleX, double scaleY) {
|
public AffineTransform scale (double scaleX, double scaleY) {
|
||||||
m00 *= scaleX;
|
m00 *= scaleX;
|
||||||
m01 *= scaleX;
|
m01 *= scaleX;
|
||||||
m10 *= scaleY;
|
m10 *= scaleY;
|
||||||
@@ -199,55 +206,55 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform scaleX (double scaleX) {
|
public AffineTransform scaleX (double scaleX) {
|
||||||
return Transforms.multiply(this, scaleX, 0, 0, 1, 0, 0, this);
|
return Transforms.multiply(this, scaleX, 0, 0, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform scaleY (double scaleY) {
|
public AffineTransform scaleY (double scaleY) {
|
||||||
return Transforms.multiply(this, 1, 0, 0, scaleY, 0, 0, this);
|
return Transforms.multiply(this, 1, 0, 0, scaleY, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform rotate (double angle) {
|
public AffineTransform rotate (double angle) {
|
||||||
double sina = Math.sin(angle), cosa = Math.cos(angle);
|
double sina = Math.sin(angle), cosa = Math.cos(angle);
|
||||||
return Transforms.multiply(this, cosa, sina, -sina, cosa, 0, 0, this);
|
return Transforms.multiply(this, cosa, sina, -sina, cosa, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform translate (double tx, double ty) {
|
public AffineTransform translate (double tx, double ty) {
|
||||||
this.tx += m00*tx + m10*ty;
|
this.tx += m00*tx + m10*ty;
|
||||||
this.ty += m11*ty + m01*tx;
|
this.ty += m11*ty + m01*tx;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform translateX (double tx) {
|
public AffineTransform translateX (double tx) {
|
||||||
return Transforms.multiply(this, 1, 0, 0, 1, tx, 0, this);
|
return Transforms.multiply(this, 1, 0, 0, 1, tx, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform translateY (double ty) {
|
public AffineTransform translateY (double ty) {
|
||||||
return Transforms.multiply(this, 1, 0, 0, 1, 0, ty, this);
|
return Transforms.multiply(this, 1, 0, 0, 1, 0, ty, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform shear (double sx, double sy) {
|
public AffineTransform shear (double sx, double sy) {
|
||||||
return Transforms.multiply(this, 1, sy, sx, 1, 0, 0, this);
|
return Transforms.multiply(this, 1, sy, sx, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform shearX (double sx) {
|
public AffineTransform shearX (double sx) {
|
||||||
return Transforms.multiply(this, 1, 0, sx, 1, 0, 0, this);
|
return Transforms.multiply(this, 1, 0, sx, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform shearY (double sy) {
|
public AffineTransform shearY (double sy) {
|
||||||
return Transforms.multiply(this, 1, sy, 0, 1, 0, 0, this);
|
return Transforms.multiply(this, 1, sy, 0, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform invert () {
|
public AffineTransform invert () {
|
||||||
// compute the determinant, storing the subdeterminants for later use
|
// compute the determinant, storing the subdeterminants for later use
|
||||||
double det = m00*m11 - m10*m01;
|
double det = m00*m11 - m10*m01;
|
||||||
if (Math.abs(det) == 0f) {
|
if (Math.abs(det) == 0f) {
|
||||||
|
|||||||
@@ -50,6 +50,12 @@ public class AffineTransform extends AbstractTransform
|
|||||||
this.tx = tx; this.ty = ty;
|
this.tx = tx; this.ty = ty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets this affine transform matrix to {@code other}.
|
||||||
|
* @return this instance, for chaining. */
|
||||||
|
public AffineTransform set (AffineTransform other) {
|
||||||
|
return setTransform(other.m00, other.m01, other.m10, other.m11, other.tx, other.ty);
|
||||||
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public float uniformScale () {
|
public float uniformScale () {
|
||||||
// the square root of the signed area of the parallelogram spanned by the axis vectors
|
// the square root of the signed area of the parallelogram spanned by the axis vectors
|
||||||
@@ -122,12 +128,12 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setUniformScale (float scale) {
|
public AffineTransform setUniformScale (float scale) {
|
||||||
return setScale(scale, scale);
|
return (AffineTransform)setScale(scale, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setScaleX (float scaleX) {
|
public AffineTransform setScaleX (float scaleX) {
|
||||||
// normalize the scale to 1, then re-apply
|
// normalize the scale to 1, then re-apply
|
||||||
float mult = scaleX / scaleX();
|
float mult = scaleX / scaleX();
|
||||||
m00 *= mult;
|
m00 *= mult;
|
||||||
@@ -136,7 +142,7 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setScaleY (float scaleY) {
|
public AffineTransform setScaleY (float scaleY) {
|
||||||
// normalize the scale to 1, then re-apply
|
// normalize the scale to 1, then re-apply
|
||||||
float mult = scaleY / scaleY();
|
float mult = scaleY / scaleY();
|
||||||
m10 *= mult;
|
m10 *= mult;
|
||||||
@@ -145,7 +151,7 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setRotation (float angle) {
|
public AffineTransform setRotation (float angle) {
|
||||||
// extract the scale, then reapply rotation and scale together
|
// extract the scale, then reapply rotation and scale together
|
||||||
float sx = scaleX(), sy = scaleY();
|
float sx = scaleX(), sy = scaleY();
|
||||||
float sina = FloatMath.sin(angle), cosa = FloatMath.cos(angle);
|
float sina = FloatMath.sin(angle), cosa = FloatMath.cos(angle);
|
||||||
@@ -155,26 +161,27 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTranslation (float tx, float ty) {
|
public AffineTransform setTranslation (float tx, float ty) {
|
||||||
this.tx = tx;
|
this.tx = tx;
|
||||||
this.ty = ty;
|
this.ty = ty;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTx (float tx) {
|
public AffineTransform setTx (float tx) {
|
||||||
this.tx = tx;
|
this.tx = tx;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTy (float ty) {
|
public AffineTransform setTy (float ty) {
|
||||||
this.ty = ty;
|
this.ty = ty;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform setTransform (float m00, float m01, float m10, float m11, float tx, float ty) {
|
public AffineTransform setTransform (float m00, float m01, float m10, float m11,
|
||||||
|
float tx, float ty) {
|
||||||
this.m00 = m00;
|
this.m00 = m00;
|
||||||
this.m01 = m01;
|
this.m01 = m01;
|
||||||
this.m10 = m10;
|
this.m10 = m10;
|
||||||
@@ -185,12 +192,12 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform uniformScale (float scale) {
|
public AffineTransform uniformScale (float scale) {
|
||||||
return scale(scale, scale);
|
return scale(scale, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform scale (float scaleX, float scaleY) {
|
public AffineTransform scale (float scaleX, float scaleY) {
|
||||||
m00 *= scaleX;
|
m00 *= scaleX;
|
||||||
m01 *= scaleX;
|
m01 *= scaleX;
|
||||||
m10 *= scaleY;
|
m10 *= scaleY;
|
||||||
@@ -199,55 +206,55 @@ public class AffineTransform extends AbstractTransform
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform scaleX (float scaleX) {
|
public AffineTransform scaleX (float scaleX) {
|
||||||
return Transforms.multiply(this, scaleX, 0, 0, 1, 0, 0, this);
|
return Transforms.multiply(this, scaleX, 0, 0, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform scaleY (float scaleY) {
|
public AffineTransform scaleY (float scaleY) {
|
||||||
return Transforms.multiply(this, 1, 0, 0, scaleY, 0, 0, this);
|
return Transforms.multiply(this, 1, 0, 0, scaleY, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform rotate (float angle) {
|
public AffineTransform rotate (float angle) {
|
||||||
float sina = FloatMath.sin(angle), cosa = FloatMath.cos(angle);
|
float sina = FloatMath.sin(angle), cosa = FloatMath.cos(angle);
|
||||||
return Transforms.multiply(this, cosa, sina, -sina, cosa, 0, 0, this);
|
return Transforms.multiply(this, cosa, sina, -sina, cosa, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform translate (float tx, float ty) {
|
public AffineTransform translate (float tx, float ty) {
|
||||||
this.tx += m00*tx + m10*ty;
|
this.tx += m00*tx + m10*ty;
|
||||||
this.ty += m11*ty + m01*tx;
|
this.ty += m11*ty + m01*tx;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform translateX (float tx) {
|
public AffineTransform translateX (float tx) {
|
||||||
return Transforms.multiply(this, 1, 0, 0, 1, tx, 0, this);
|
return Transforms.multiply(this, 1, 0, 0, 1, tx, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform translateY (float ty) {
|
public AffineTransform translateY (float ty) {
|
||||||
return Transforms.multiply(this, 1, 0, 0, 1, 0, ty, this);
|
return Transforms.multiply(this, 1, 0, 0, 1, 0, ty, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform shear (float sx, float sy) {
|
public AffineTransform shear (float sx, float sy) {
|
||||||
return Transforms.multiply(this, 1, sy, sx, 1, 0, 0, this);
|
return Transforms.multiply(this, 1, sy, sx, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform shearX (float sx) {
|
public AffineTransform shearX (float sx) {
|
||||||
return Transforms.multiply(this, 1, 0, sx, 1, 0, 0, this);
|
return Transforms.multiply(this, 1, 0, sx, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform shearY (float sy) {
|
public AffineTransform shearY (float sy) {
|
||||||
return Transforms.multiply(this, 1, sy, 0, 1, 0, 0, this);
|
return Transforms.multiply(this, 1, sy, 0, 1, 0, 0, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // from Transform
|
@Override // from Transform
|
||||||
public Transform invert () {
|
public AffineTransform invert () {
|
||||||
// compute the determinant, storing the subdeterminants for later use
|
// compute the determinant, storing the subdeterminants for later use
|
||||||
float det = m00*m11 - m10*m01;
|
float det = m00*m11 - m10*m01;
|
||||||
if (Math.abs(det) == 0f) {
|
if (Math.abs(det) == 0f) {
|
||||||
|
|||||||
Reference in New Issue
Block a user