public class RigidTransform2d extends AffineTransform2dBase
A rigid body transformation is used to transform a point from one spatial coordinate frame into another. If x0 and x1 denote the point in the orginal frame 0 and target frame 1, respectively, then the transformation is computed according to
x1 = R x0 + pwhere R is a 2 x 2 rotation matrix and p is a translation vector. In homogenous coordinates, this operation can be represented as
[ x1 ] [ R p ] [ x0 ] [ ] = [ ] [ ] [ 1 ] [ 0 1 ] [ 1 ]The components p and R of the transformation represent the position and orientation of frame 0 with respect to frame 1. In particular, the translation vector p gives the origin position, while the columns of R give the directions of the axes.
If X01 is a transformation from frame 0 to frame 1, and X12 is a transformation from frame 1 to frame 2, then the transformation from frame 0 to frame 2 is given by the product
X02 = X12 X01In this way, a transformation can be created by multiplying a series of sub-transformations.
If X01 is a transformation from frame 0 to frame 1, then the inverse transformation X10 is a transformation from frame 1 to frame 0, and is given by
[ T T ] [ R -R p ] X10 = [ ] [ 0 1 ]
Matrix.Partition, Matrix.WriteFormat
Modifier and Type | Field and Description |
---|---|
static RigidTransform2d |
IDENTITY
Global identity transform.
|
Vector2d |
p
Translation vector associated with this transformation.
|
RotationMatrix2d |
R
Rotation matrix associated with this transformation.
|
INDEFINITE, POSITIVE_DEFINITE, SPD, SYMMETRIC
Constructor and Description |
---|
RigidTransform2d()
Creates a new transformation initialized to the identity.
|
RigidTransform2d(double x,
double y,
double ang)
Creates a new transformation with the specified translation values and
rotation angle
|
RigidTransform2d(RigidTransform2d X)
Creates a new transformation which is a copy of an existing one.
|
RigidTransform2d(Vector2d p,
double ang)
Creates a new transformation with the specified translation vector and
rotation angle
|
RigidTransform2d(Vector2d p,
RotationMatrix2d R)
Creates a new transformation with the specified translation vector and
rotation matrix.
|
Modifier and Type | Method and Description |
---|---|
RigidTransform2d |
copy() |
void |
fit(java.util.ArrayList<Point2d> p,
java.util.ArrayList<Point2d> q) |
void |
fit(java.util.ArrayList<Point2d> p,
java.util.ArrayList<Point2d> q,
boolean doScaling)
Sets this rigid transform to one that provides the best fit of q to p in
the least-squares sense: p ~ X q
|
boolean |
invert()
Inverts this transform in place.
|
boolean |
invert(RigidTransform2d X)
Inverts transform X and places the result in this transform.
|
void |
mul(RigidTransform2d X)
Post-multiplies this transformation by another and places the result in
this transformation.
|
void |
mul(RigidTransform2d X1,
RigidTransform2d X2)
Multiplies transformation X1 by X2 and places the result in this
transformation.
|
void |
mulInverse(RigidTransform2d X)
Post-multiplies this transformation by the inverse of transformation X and
places the result in this transformation.
|
boolean |
mulInverse(Vector3d vr,
Vector3d v1)
Multiplies the column vector v1 by the inverse of this transform and
places the result in vr.
|
void |
mulInverseBoth(RigidTransform2d X1,
RigidTransform2d X2)
Multiplies the inverse of transformation X1 by the inverse of
transformation X2 and places the result in this transformation.
|
void |
mulInverseLeft(RigidTransform2d X1,
RigidTransform2d X2)
Multiplies the inverse of transformation X1 by transformation X2 and
places the result in this transformation.
|
void |
mulInverseRight(RigidTransform2d X1,
RigidTransform2d X2)
Multiplies transformation X1 by the inverse of transformation X2 and
places the result in this transformation.
|
colSize, epsilonEquals, equals, get, get, getColumn, getColumn, getMatrix, getOffset, getRow, getRow, mul, mul, mulInverse, rowSize, set, set, set, setColumn, setIdentity, setRow
add, checkConsistency, set, set, set, set, setCCSValues, setColumn, setCRSValues, setRandom, setRow, setSubMatrix
containsNaN, 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, toString, toString, trace, write, write, write, write, write, write, write, writeToFile
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
determinant, 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, toString, trace, write, write, write
public static final RigidTransform2d IDENTITY
public final RotationMatrix2d R
public final Vector2d p
public RigidTransform2d()
public RigidTransform2d(Vector2d p, RotationMatrix2d R)
p
- translation vectorR
- rotation matrixpublic RigidTransform2d(Vector2d p, double ang)
p
- translation vectorang
- rotation angle (radians)public RigidTransform2d(double x, double y, double ang)
x
- translation x componenty
- translation y componentang
- rotation angle (radians)public RigidTransform2d(RigidTransform2d X)
X
- transform to copypublic void mul(RigidTransform2d X)
X
- transformation to multiply bypublic void mul(RigidTransform2d X1, RigidTransform2d X2)
X1
- first transformationX2
- second transformationpublic void mulInverse(RigidTransform2d X)
X
- right-hand transformationpublic void mulInverseRight(RigidTransform2d X1, RigidTransform2d X2)
X1
- left-hand transformationX2
- right-hand transformationpublic void mulInverseLeft(RigidTransform2d X1, RigidTransform2d X2)
X1
- left-hand transformationX2
- right-hand transformationpublic void mulInverseBoth(RigidTransform2d X1, RigidTransform2d X2)
X1
- left-hand transformationX2
- right-hand transformationpublic boolean mulInverse(Vector3d vr, Vector3d v1)
mulInverse
in class AffineTransform2dBase
vr
- result vectorv1
- vector to multiplypublic boolean invert()
invert
in class AffineTransform2dBase
public boolean invert(RigidTransform2d X)
X
- transform to invertpublic void fit(java.util.ArrayList<Point2d> p, java.util.ArrayList<Point2d> q, boolean doScaling) throws ImproperSizeException
p
- set of target 2d pointsq
- set of input 2d pointsdoScaling
- flag to apply uniform scaling in addition to rigid transformImproperSizeException
public void fit(java.util.ArrayList<Point2d> p, java.util.ArrayList<Point2d> q) throws ImproperSizeException
ImproperSizeException
public RigidTransform2d copy()
copy
in class AffineTransform2dBase