public class AffineTransform3d extends AffineTransform3dBase
[ A p ]
M = [ ]
[ 0 1 ]
where A is a 3 x 3 matrix and p is a 3-vector. In homogeneous coordinates,
this implements an affine transform of the form In this class, the fields A and p are exposed, and users can manipulate them as desired. This allows us to minimize the number of methds in the AffineTransform3d class itself.
Matrix.Partition, Matrix.WriteFormat| Modifier and Type | Field and Description |
|---|---|
Matrix3d |
A
Matrix component.
|
static AffineTransform3d |
IDENTITY
Global identity transform.
|
static int |
MATRIX_3X4_STRING
Specifies a string representation of this transformation as a 3 x 4 matrix
(i.e., with the 4th row ommitted).
|
static int |
MATRIX_4X4_STRING
Specifies a string representation of this transformation as a 4 x 4
matrix.
|
Vector3d |
p
Vector component.
|
INDEFINITE, POSITIVE_DEFINITE, SPD, SYMMETRIC| Constructor and Description |
|---|
AffineTransform3d()
Creates an AffineTransform3d and initializes it to the identity.
|
AffineTransform3d(AffineTransform3dBase X) |
AffineTransform3d(double[] m)
Constructs using an array representing the 3x4 matrix [A|p] given in row-major format
|
AffineTransform3d(double m00,
double m01,
double m02,
double px,
double m10,
double m11,
double m12,
double py,
double m20,
double m21,
double m22,
double pz) |
AffineTransform3d(Matrix3d A,
Vector3d p)
Creates an AffineTransform3d and initializes its components to the
specified values.
|
| Modifier and Type | Method and Description |
|---|---|
void |
applyScaling(double sx,
double sy,
double sz)
Scales the columns of A by the specified amounts.
|
AffineTransform3d |
copy()
Creates and returns a copy of this transformer.
|
static AffineTransform3d |
createScaling(double s)
Creates an AffineTransform3d which performs uniform scaling along all
axes.
|
static AffineTransform3d |
createScaling(double sx,
double sy,
double sz)
Creates an AffineTransform3d which performs scaling along the x, y, and z
axes.
|
void |
factorA(RotationMatrix3d R,
Vector3d scale,
Vector3d shear)
Factors the A matrix of this transformation into rotation, scale, and
shear components, so that
|
void |
fit(java.util.ArrayList<Point3d> p,
java.util.ArrayList<Point3d> q)
Sets this affine transform to one that provides the best fit of q to p in
the least-squares sense: p ~ X q
|
Vector3d |
fitOrthogonal(java.util.ArrayList<Point3d> p,
java.util.ArrayList<Point3d> q)
Sets this affine transform to one that provides the best fit of q to p in
the least-squares sense: p ~ X q, where X has orthogonal columns,
corresponding to a rigid transform with three scale factors (one for each
dimension)
|
Vector3d |
fitOrthogonal(java.util.ArrayList<Point3d> p,
java.util.ArrayList<Point3d> q,
double threshold)
Sets this affine transform to one that provides the best fit of q to p in
the least-squares sense: p ~ X q, where X has orthogonal columns,
corresponding to a rigid transform with three scale factors (one for each
dimension).
|
void |
fitRigid(java.util.ArrayList<Point3d> p,
java.util.ArrayList<Point3d> q,
boolean scale)
Sets this affine transform to one that provides the best fit of q to p in
the least-squares sense: p ~ X q, where X is a rigid transformation with a
single scale factor
|
boolean |
invert()
Inverts this transform in place.
|
boolean |
invert(AffineTransform3dBase X)
Inverts transform X and places the result in this transform.
|
void |
mul(AffineTransform3dBase X)
Multiplies this transformation transformation X and places the result in
this transformation.
|
void |
mul(AffineTransform3dBase X1,
AffineTransform3dBase X2)
Multiplies transformation X1 by transformation X2 and places the result in
this transformation.
|
boolean |
mulInverse(AffineTransform3dBase X)
Multiplies this transformation by the inverse of transformation X and
places the result in this transformation.
|
boolean |
mulInverseBoth(AffineTransform3dBase X1,
AffineTransform3dBase X2)
Multiplies the inverse of transformation X1 by the inverse of
transformation X2 and places the result in this transformation.
|
boolean |
mulInverseLeft(AffineTransform3dBase X1,
AffineTransform3dBase X2)
Multiplies the inverse of transformation X1 by transformation X2 and
places the result in this transformation.
|
boolean |
mulInverseRight(AffineTransform3dBase X1,
AffineTransform3dBase X2)
Multiplies transformation X1 by the inverse of transformation X2 and
places the result in this transformation.
|
void |
set(RigidTransform3d X)
Sets this affine transform to the rigid body transform described by X.
|
void |
setA(RotationMatrix3d R,
Vector3d scale,
Vector3d shear)
Sets the A matrix of this transformation from rotation, scale, and shear
components, so that
|
void |
setRandom()
Sets the elements of this matrix to uniformly distributed random values in
the range -0.5 (inclusive) to 0.5 (exclusive).
|
void |
setScaling(double sx,
double sy,
double sz)
Sets A to diagonal scaling matrix.
|
java.lang.String |
toString()
Returns a string representation of this transformation as a 4 x 4 matrix.
|
java.lang.String |
toString(NumberFormat numberFmt,
int outputCode)
Returns a specified string representation of this transformation, with
each number formatted according to the a supplied numeric format.
|
java.lang.String |
toString(java.lang.String numberFmtStr)
Returns a string representation of this transformation as a 4 x 4 matrix,
with each number formatted according to a supplied numeric format.
|
java.lang.String |
toString(java.lang.String numberFmtStr,
int outputCode)
Returns a specified string representation of this transformation, with
each number formatted according to the a supplied numeric format.
|
addTranslation, addTranslation, clone, colSize, epsilonEquals, equals, get, get, getColumn, getColumn, getMatrix, getMatrixComponents, getOffset, getRow, getRow, inverseTransformCovec, inverseTransformPnt, inverseTransformVec, isAffine, isIdentity, isRigid, mul, mul, mul, mulInverse, mulInverse, mulInverse, mulInverseLeft, mulInverseRight, rowSize, set, set, set, setColumn, setIdentity, setRotation, setRotation, setRotation, setRow, setTranslation, setTranslation, transformCovec, transformPnt, transformVecadd, checkConsistency, set, set, set, set, setCCSValues, setColumn, setCRSValues, setRow, setSubMatrixcontainsNaN, determinant, epsilonEquals, equals, frobeniusNorm, frobeniusNormSquared, get, getCCSIndices, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getCRSValues, getDefaultFormat, getRow, getSize, getSubMatrix, hasNaN, idString, infinityNorm, isFixedSize, isSymmetric, isWritable, maxNorm, mul, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, oneNorm, scan, scan, setCRSValues, setDefaultFormat, setSize, toString, trace, write, write, write, write, write, write, write, writeToFileequals, getClass, hashCode, notify, notifyAll, wait, wait, waitdeterminant, epsilonEquals, equals, frobeniusNorm, frobeniusNormSquared, getCCSIndices, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getCRSValues, getRow, getSize, getSubMatrix, infinityNorm, isFixedSize, isSymmetric, maxNorm, mul, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, oneNorm, scan, setSize, toString, trace, write, write, writepublic static final AffineTransform3d IDENTITY
public static final int MATRIX_3X4_STRING
public static final int MATRIX_4X4_STRING
public final Matrix3d A
public final Vector3d p
public AffineTransform3d()
public AffineTransform3d(Matrix3d A, Vector3d p)
A - value for the A matrixp - value for the p vectorpublic AffineTransform3d(AffineTransform3dBase X)
public AffineTransform3d(double m00,
double m01,
double m02,
double px,
double m10,
double m11,
double m12,
double py,
double m20,
double m21,
double m22,
double pz)
public AffineTransform3d(double[] m)
public void mul(AffineTransform3dBase X)
X - right-hand transformationpublic void mul(AffineTransform3dBase X1, AffineTransform3dBase X2)
X1 - left-hand transformationX2 - right-hand transformationpublic boolean mulInverse(AffineTransform3dBase X)
X - right-hand transformationpublic boolean mulInverseRight(AffineTransform3dBase X1, AffineTransform3dBase X2)
X1 - left-hand transformationX2 - right-hand transformationpublic boolean mulInverseLeft(AffineTransform3dBase X1, AffineTransform3dBase X2)
X1 - left-hand transformationX2 - right-hand transformationpublic boolean mulInverseBoth(AffineTransform3dBase X1, AffineTransform3dBase X2)
X1 - left-hand transformationX2 - right-hand transformationpublic boolean invert()
invert in class AffineTransform3dBasepublic boolean invert(AffineTransform3dBase X)
X - transform to invertpublic void set(RigidTransform3d X)
X - rigid body transform to copypublic void setScaling(double sx,
double sy,
double sz)
sx - x scale factorsy - y scale factorsz - z scale factorpublic void applyScaling(double sx,
double sy,
double sz)
sx - x scale factorsy - y scale factorsz - z scale factorpublic void factorA(RotationMatrix3d R, Vector3d scale, Vector3d shear)
A = R S Xwhere R is a right-handed rotation matrix, S is a diagonal scaling matrix, and X is a shear matrix of the form
[ 1 xy xz ]
X = [ 0 1 yz ]
[ 0 0 1 ]
R - if non-null, returns the rotation matrixscale - if non-null, returns the diagonal components of Sshear - if non-null, returns the components xy, xz, yz of Xpublic void setA(RotationMatrix3d R, Vector3d scale, Vector3d shear)
A = R S Xwhere R is a right-handed rotation matrix, S is a diagonal scaling matrix, and X is a shear matrix of the form
[ 1 xy xz ]
X = [ 0 1 yz ]
[ 0 0 1 ]
R - the rotation matrixscale - diagonal components of Sshear - components xy, xz, yz of Xpublic static AffineTransform3d createScaling(double sx, double sy, double sz)
sx - x scale factorsy - y scale factorsz - z scale factorpublic static AffineTransform3d createScaling(double s)
s - scale factorpublic void setRandom()
DenseMatrixBasesetRandom in class AffineTransform3dBasepublic AffineTransform3d copy()
VectorTransformer3dcopy in interface VectorTransformer3dcopy in class AffineTransform3dBasepublic void fit(java.util.ArrayList<Point3d> p, java.util.ArrayList<Point3d> q) throws ImproperSizeException
p - set of target 3d pointsq - set of input 3d pointsImproperSizeExceptionpublic void fitRigid(java.util.ArrayList<Point3d> p, java.util.ArrayList<Point3d> q, boolean scale) throws ImproperSizeException
p - set of target 3d pointsq - set of input 3d pointsscale - allow scalingImproperSizeExceptionpublic Vector3d fitOrthogonal(java.util.ArrayList<Point3d> p, java.util.ArrayList<Point3d> q, double threshold)
p - set of target 3d pointsq - set of input 3d pointsthreshold - algorithm stops when ||s_{i} - s_{i-1}||/||s_{i-1}|| < thresholdpublic Vector3d fitOrthogonal(java.util.ArrayList<Point3d> p, java.util.ArrayList<Point3d> q) throws ImproperSizeException
p - set of target 3d pointsq - set of input 3d pointsImproperSizeExceptionpublic java.lang.String toString()
toString in class MatrixBaseMatrixBase.toString(String)public java.lang.String toString(java.lang.String numberFmtStr)
toString in interface MatrixtoString in interface VectorTransformer3dtoString in class MatrixBasenumberFmtStr - numeric format string (see NumberFormat)NumberFormatpublic java.lang.String toString(java.lang.String numberFmtStr,
int outputCode)
numberFmtStr - numeric format string (see NumberFormat)outputCode - desired representation, which should be either
MATRIX_4X4_STRING, or
MATRIX_3X4_STRINGpublic java.lang.String toString(NumberFormat numberFmt, int outputCode)
numberFmt - numeric formatoutputCode - desired representation, which should be either
MATRIX_4X4_STRING, or
MATRIX_3X4_STRING