Added set(AffineTransform). More return type refinement.

This commit is contained in:
Michael Bayne
2014-12-30 15:58:00 -08:00
parent 524ce3c82c
commit 7879c12749
2 changed files with 56 additions and 42 deletions
+28 -21
View File
@@ -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) {
+28 -21
View File
@@ -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) {