- 所有已实现的接口:
Serializable,Cloneable
AffineTransform 类表示二维仿射变换,它执行从二维坐标到其他二维坐标的线性映射,以保持线条的“直线度”和“平行度”。可以使用平移、缩放、翻转、旋转和剪切的序列来构建仿射变换。
这样的坐标变换可以用 3 行乘 3 列的矩阵表示,最后一行隐含为 [ 0 0 1 ]。该矩阵将源坐标 (x,y) 转换为目标坐标 (x',y'),方法是将它们视为列向量,并根据以下过程将坐标向量乘以矩阵:
[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ] [ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ] [ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
处理 90 度旋转
在 AffineTransform 类中的 rotate 方法的某些变体中,双精度参数以弧度指定旋转角度。这些方法对大约 90 度(包括 180、270 和 360 度等倍数)的旋转有特殊处理,因此可以更有效地处理常见的象限旋转情况。这种特殊处理会导致非常接近 90 度倍数的角度被视为 90 度的精确倍数。对于 90 度的小倍数,被视为象限旋转的角度范围约为 0.00000121 度宽。本节解释为什么需要这种特殊照顾以及如何实施。
由于 90 度以弧度表示为 PI/2,并且由于 PI 是超越数(因此是无理数),因此无法将 90 度的倍数精确表示为以弧度测量的精确双精度值。因此,理论上不可能使用这些值来描述象限旋转(90、180、270 或 360 度)。双精度浮点值可以非常接近 PI/2 的非零倍数,但永远不会接近到足以使正弦或余弦正好为 0.0、1.0 或 -1.0。 Math.sin() 和 Math.cos() 的实现相应地从不为 Math.sin(0.0) 以外的任何情况返回 0.0。但是,对于 90 度的每个倍数附近的某些数字范围,这些相同的实现确实会返回 1.0 和 -1.0,因为正确答案非常接近 1.0 或 -1.0,双精度有效数字无法尽可能准确地表示差异对于接近 0.0 的数字。
这些问题的最终结果是,如果 Math.sin() 和 Math.cos() 方法用于在这些基于弧度的旋转操作期间直接生成矩阵修改的值,那么即使对于像这样的简单情况,生成的变换也永远不会严格归类为象限旋转rotate(Math.PI/2.0) ,由于正弦和余弦获得的非 0.0 值导致矩阵发生微小变化。如果这些变换没有被归类为象限旋转,那么尝试根据变换类型优化进一步操作的后续代码将被归类为最通用的实现。
因为象限旋转相当普遍,所以此类应该相当快地处理这些情况,无论是将旋转应用到变换还是将生成的变换应用到坐标。为了促进这种最佳处理,采用以弧度为单位测量的旋转角度的方法试图检测旨在作为象限旋转的角度并将它们视为象限旋转。因此,如果 Math.sin(theta) 或 Math.cos(theta) 恰好返回 1.0 或 -1.0,则这些方法将角度 theta 视为象限旋转。根据经验,此属性适用于围绕 Math.PI/2.0 的小倍数的大约 0.0000000211 弧度(或 0.00000121 度)的范围。
- 自从:
- 1.2
- 参见:
-
字段摘要
字段修饰符和类型Field描述static final int此标志位指示此对象定义的变换执行围绕某个轴的镜像翻转,除了其他标志位指示的转换之外,还将通常的右手坐标系更改为左手坐标系。static final int此标志位指示此对象定义的变换除了由其他标志位指示的转换外,还执行任意角度的旋转。static final int此标志位指示除其他标志位指示的转换外,此对象定义的转换还执行一般缩放。static final int此常量表示此对象定义的变换对输入坐标执行任意转换。static final int此常量表示此对象定义的转换是恒等转换。static final int该常量是任何旋转标志位的位掩码。static final int该常量是任何标度标志位的位掩码。static final int此标志位指示除其他标志位指示的转换外,此对象定义的转换还执行象限旋转 90 度的某个倍数。static final int此标志位指示除其他标志位指示的转换外,此对象定义的转换还执行转换。static final int除其他标志位指示的转换外,此对象定义的转换还执行统一缩放。 -
构造方法总结
构造方法构造方法描述构造一个新的AffineTransform表示身份转换。AffineTransform(double[] flatmatrix) 从代表 3x3 变换矩阵的 4 个非翻译条目或 6 个可指定条目的双精度值数组构造一个新的AffineTransform。AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12) 从表示 3x3 变换矩阵的 6 个可指定条目的 6 个双精度值构造一个新的AffineTransform。AffineTransform(float[] flatmatrix) 从代表 3x3 变换矩阵的 4 个非翻译条目或 6 个可指定条目的浮点值数组构造一个新的AffineTransform。AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12) 从表示 3x3 变换矩阵的 6 个可指定条目的 6 个浮点值构造一个新的AffineTransform。构造一个新的AffineTransform,它是指定AffineTransform对象的副本。 -
方法总结
修饰符和类型方法描述clone()返回此AffineTransform对象的副本。void以最常用的方式将AffineTransform Tx连接到此AffineTransformCx,以提供由Tx映射到先前用户空间的新用户空间。返回表示逆变换的AffineTransform对象。createTransformedShape(Shape pSrc) 返回一个新的Shape对象,该对象由指定的Shape的几何形状定义,之后它已被此转换转换。voiddeltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此变换变换相对距离向量数组。deltaTransform(Point2D ptSrc, Point2D ptDst) 转换ptSrc指定的相对距离向量并将结果存储在ptDst中。boolean如果此AffineTransform表示与指定参数相同的仿射坐标变换,则返回true。double返回变换的矩阵表示的行列式。voidgetMatrix(double[] flatmatrix) 检索 3x3 仿射变换矩阵中的 6 个可指定值,并将它们放入双精度值数组中。static AffineTransformgetQuadrantRotateInstance(int numquadrants) 返回按指定数量的象限旋转坐标的变换。static AffineTransformgetQuadrantRotateInstance(int numquadrants, double anchorx, double anchory) 返回一个变换,该变换将坐标围绕指定锚点旋转指定数量的象限。static AffineTransformgetRotateInstance(double theta) 返回表示旋转变换的变换。static AffineTransformgetRotateInstance(double vecx, double vecy) 返回根据旋转向量旋转坐标的变换。static AffineTransformgetRotateInstance(double theta, double anchorx, double anchory) 返回围绕锚点旋转坐标的变换。static AffineTransformgetRotateInstance(double vecx, double vecy, double anchorx, double anchory) 返回根据旋转向量围绕锚点旋转坐标的变换。static AffineTransformgetScaleInstance(double sx, double sy) 返回表示缩放变换的变换。double返回 3x3 仿射变换矩阵的m00元素。double返回 3x3 仿射变换矩阵的m11元素。static AffineTransformgetShearInstance(double shx, double shy) 返回表示剪切变换的变换。double返回 3x3 仿射变换矩阵的 X 坐标剪切元素 (m01)。double返回 3x3 仿射变换矩阵的 Y 坐标剪切元素 (m10)。static AffineTransformgetTranslateInstance(double tx, double ty) 返回表示翻译转换的转换。double返回 3x3 仿射变换矩阵的平移元素 (m02) 的 X 坐标。double返回 3x3 仿射变换矩阵的平移元素 (m12) 的 Y 坐标。intgetType()检索描述此转换的转换属性的标志位。inthashCode()返回此转换的哈希码。voidinverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此变换对双精度坐标数组进行逆变换。inverseTransform(Point2D ptSrc, Point2D ptDst) 对指定的ptSrc进行逆变换并将结果存储在ptDst中。voidinvert()将此变换设置为其自身的逆。boolean如果此AffineTransform是身份转换,则返回true。void以不太常用的方式将AffineTransform Tx连接到此AffineTransformCx,以便Tx修改相对于绝对像素空间而不是相对于现有用户空间的坐标变换。voidquadrantRotate(int numquadrants) 将此变换与按指定数量的象限旋转坐标的变换连接。voidquadrantRotate(int numquadrants, double anchorx, double anchory) 将此变换与围绕指定锚点按指定数量的象限旋转坐标的变换连接起来。voidrotate(double theta) 将此变换与旋转变换连接起来。voidrotate(double vecx, double vecy) 将此变换与根据旋转向量旋转坐标的变换连接起来。voidrotate(double theta, double anchorx, double anchory) 将此变换与围绕锚点旋转坐标的变换连接起来。voidrotate(double vecx, double vecy, double anchorx, double anchory) 将此变换与根据旋转向量围绕锚点旋转坐标的变换连接起来。voidscale(double sx, double sy) 将此转换与缩放转换连接起来。void将此转换重置为恒等转换。voidsetToQuadrantRotation(int numquadrants) 将此变换设置为旋转变换,将坐标旋转指定数量的象限。voidsetToQuadrantRotation(int numquadrants, double anchorx, double anchory) 将此变换设置为平移旋转变换,该变换将坐标围绕指定锚点旋转指定数量的象限。voidsetToRotation(double theta) 将此变换设置为旋转变换。voidsetToRotation(double vecx, double vecy) 将此变换设置为根据旋转向量旋转坐标的旋转变换。voidsetToRotation(double theta, double anchorx, double anchory) 将此变换设置为平移的旋转变换。voidsetToRotation(double vecx, double vecy, double anchorx, double anchory) 将此变换设置为旋转变换,根据旋转矢量围绕锚点旋转坐标。voidsetToScale(double sx, double sy) 将此变换设置为缩放变换。voidsetToShear(double shx, double shy) 将此变换设置为剪切变换。voidsetToTranslation(double tx, double ty) 将此转换设置为平移转换。voidsetTransform(double m00, double m10, double m01, double m11, double m02, double m12) 将此转换设置为由 6 个双精度值指定的矩阵。void将此转换设置为指定AffineTransform对象中转换的副本。voidshear(double shx, double shy) 将此变换与剪切变换连接起来。toString()返回表示此Object值的String。voidtransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此转换转换双精度坐标数组。voidtransform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) 通过此转换转换双精度坐标数组,并将结果存储到浮点数数组中。voidtransform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此转换转换浮点坐标数组,并将结果存储到双精度数组中。voidtransform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) 通过此转换转换浮点坐标数组。void通过此变换变换点对象数组。转换指定的ptSrc并将结果存储在ptDst中。voidtranslate(double tx, double ty) 将此转换与翻译转换连接起来。
-
字段详细信息
-
TYPE_IDENTITY
public static final int TYPE_IDENTITY此常量表示此对象定义的转换是恒等转换。恒等变换是一种输出坐标始终与输入坐标相同的变换。如果此转换不是恒等转换,则类型将是常量 GENERAL_TRANSFORM 或此转换执行的各种坐标转换的适当标志位的组合。- 自从:
- 1.2
- 参见:
-
TYPE_TRANSLATION
public static final int TYPE_TRANSLATION此标志位指示除其他标志位指示的转换外,此对象定义的转换还执行转换。平移将坐标在 x 和 y 中移动一个常数,而不改变向量的长度或角度。- 自从:
- 1.2
- 参见:
-
TYPE_UNIFORM_SCALE
public static final int TYPE_UNIFORM_SCALE此标志位表示除其他标志位指示的转换外,此对象定义的转换还执行统一缩放。统一比例将向量的长度在 x 和 y 方向上乘以相同的量,而不改变向量之间的角度。该标志位与 TYPE_GENERAL_SCALE 标志互斥。- 自从:
- 1.2
- 参见:
-
TYPE_GENERAL_SCALE
public static final int TYPE_GENERAL_SCALE此标志位指示除其他标志位指示的转换外,此对象定义的转换还执行一般缩放。通用尺度将向量的长度乘以 x 和 y 方向上的不同量,而不改变垂直向量之间的角度。该标志位与 TYPE_UNIFORM_SCALE 标志互斥。- 自从:
- 1.2
- 参见:
-
TYPE_MASK_SCALE
public static final int TYPE_MASK_SCALE该常量是任何标度标志位的位掩码。- 自从:
- 1.2
- 参见:
-
TYPE_FLIP
public static final int TYPE_FLIP此标志位指示此对象定义的变换执行围绕某个轴的镜像翻转,除了其他标志位指示的转换之外,还将通常的右手坐标系更改为左手坐标系。右手坐标系是 X 轴正向逆时针旋转以重写Y 轴正向的坐标系,类似于您盯着拇指时右手手指卷曲的方向。左手坐标系是正 X 轴顺时针旋转以重写正 Y 轴的坐标系,类似于左手手指卷曲的方向。没有数学方法可以确定原始翻转或镜像变换的角度,因为在适当调整旋转的情况下,所有翻转角度都是相同的。- 自从:
- 1.2
- 参见:
-
TYPE_QUADRANT_ROTATION
public static final int TYPE_QUADRANT_ROTATION此标志位指示除其他标志位指示的转换外,此对象定义的转换还执行象限旋转 90 度的某个倍数。无论向量的原始方向如何,旋转都会将向量的角度改变相同的量,并且不会改变向量的长度。该标志位与 TYPE_GENERAL_ROTATION 标志互斥。- 自从:
- 1.2
- 参见:
-
TYPE_GENERAL_ROTATION
public static final int TYPE_GENERAL_ROTATION此标志位指示此对象定义的变换除了由其他标志位指示的转换外,还执行任意角度的旋转。无论向量的原始方向如何,旋转都会将向量的角度改变相同的量,并且不会改变向量的长度。该标志位与 TYPE_QUADRANT_ROTATION 标志互斥。- 自从:
- 1.2
- 参见:
-
TYPE_MASK_ROTATION
public static final int TYPE_MASK_ROTATION该常量是任何旋转标志位的位掩码。- 自从:
- 1.2
- 参见:
-
TYPE_GENERAL_TRANSFORM
public static final int TYPE_GENERAL_TRANSFORM此常量表示此对象定义的变换对输入坐标执行任意转换。如果此转换可以按上述任何常量分类,则类型将是常量 TYPE_IDENTITY 或此转换执行的各种坐标转换的适当标志位的组合。- 自从:
- 1.2
- 参见:
-
-
构造方法详细信息
-
AffineTransform
public AffineTransform()构造一个新的AffineTransform表示身份转换。- 自从:
- 1.2
-
AffineTransform
构造一个新的AffineTransform,它是指定AffineTransform对象的副本。- 参数:
Tx- 要复制的AffineTransform对象- 自从:
- 1.2
-
AffineTransform
@ConstructorProperties ({"scaleX","shearY","shearX","scaleY","translateX","translateY"}) public AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12) 从表示 3x3 变换矩阵的 6 个可指定条目的 6 个浮点值构造一个新的AffineTransform。- 参数:
m00- 3x3 矩阵的 X 坐标缩放元素m10- 3x3矩阵的Y坐标剪切元素m01- 3x3矩阵的X坐标剪切元素m11- 3x3 矩阵的 Y 坐标缩放元素m02- 3x3 矩阵的 X 坐标平移元素m12- 3x3 矩阵的 Y 坐标平移元素- 自从:
- 1.2
-
AffineTransform
public AffineTransform(float[] flatmatrix) 从代表 3x3 变换矩阵的 4 个非翻译条目或 6 个可指定条目的浮点值数组构造一个新的AffineTransform。这些值从数组中检索为 { m00 m10 m01 m11 [m02 m12]}。- 参数:
flatmatrix- 包含要在新AffineTransform对象中设置的值的浮点数组。假定数组的长度至少为 4。如果数组的长度小于 6,则只取前 4 个值。如果数组的长度大于 6,则取前 6 个值。- 自从:
- 1.2
-
AffineTransform
public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12) 从表示 3x3 变换矩阵的 6 个可指定条目的 6 个双精度值构造一个新的AffineTransform。- 参数:
m00- 3x3 矩阵的 X 坐标缩放元素m10- 3x3矩阵的Y坐标剪切元素m01- 3x3矩阵的X坐标剪切元素m11- 3x3 矩阵的 Y 坐标缩放元素m02- 3x3 矩阵的 X 坐标平移元素m12- 3x3 矩阵的 Y 坐标平移元素- 自从:
- 1.2
-
AffineTransform
public AffineTransform(double[] flatmatrix) 从代表 3x3 变换矩阵的 4 个非翻译条目或 6 个可指定条目的双精度值数组构造一个新的AffineTransform。这些值从数组中检索为 { m00 m10 m01 m11 [m02 m12]}。- 参数:
flatmatrix- 包含要在新AffineTransform对象中设置的值的双精度数组。假定数组的长度至少为 4。如果数组的长度小于 6,则只取前 4 个值。如果数组的长度大于 6,则取前 6 个值。- 自从:
- 1.2
-
-
方法详情
-
getTranslateInstance
返回表示翻译转换的转换。表示返回变换的矩阵是:[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]- 参数:
tx- 坐标在 X 轴方向平移的距离ty- 坐标在 Y 轴方向平移的距离- 返回:
-
一个
AffineTransform对象,代表一个翻译转换,用指定的向量创建。 - 自从:
- 1.2
-
getRotateInstance
返回表示旋转变换的变换。表示返回变换的矩阵是:[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]旋转正角度 theta 会将正 X 轴上的点旋转到正 Y 轴。另请注意上面对 处理 90 度旋转 的讨论。- 参数:
theta- 以弧度测量的旋转角度- 返回:
-
一个
AffineTransform对象,它是一个旋转变换,以指定的旋转角度创建。 - 自从:
- 1.2
-
getRotateInstance
返回围绕锚点旋转坐标的变换。这个操作相当于平移坐标,使锚点在原点(S1),然后绕新原点(S2)旋转,最后平移,使中间原点恢复到原锚点的坐标(S3)。此操作等效于以下调用序列:
AffineTransform Tx = new AffineTransform(); Tx.translate(anchorx, anchory); // S3: final translation Tx.rotate(theta); // S2: rotate around anchor Tx.translate(-anchorx, -anchory); // S1: translate anchor to origin
表示返回变换的矩阵是:[ cos(theta) -sin(theta) x-x*cos+y*sin ] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ]旋转正角度 theta 会将正 X 轴上的点旋转到正 Y 轴。另请注意上面对 处理 90 度旋转 的讨论。- 参数:
theta- 以弧度测量的旋转角度anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 返回:
-
一个
AffineTransform对象,它以指定的旋转角度围绕指定点旋转坐标。 - 自从:
- 1.2
-
getRotateInstance
返回根据旋转向量旋转坐标的变换。所有坐标都围绕原点旋转相同的量。旋转量使得沿前一个正 X 轴的坐标随后与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy都为 0.0,则返回恒等变换。这个操作相当于调用:AffineTransform.getRotateInstance(Math.atan2(vecy, vecx));
- 参数:
vecx- 旋转向量的X坐标vecy- 旋转向量的Y坐标- 返回:
-
根据指定的旋转向量旋转坐标的
AffineTransform对象。 - 自从:
- 1.6
-
getRotateInstance
public static AffineTransform getRotateInstance(double vecx, double vecy, double anchorx, double anchory) 返回根据旋转向量围绕锚点旋转坐标的变换。所有坐标都围绕指定的锚点坐标旋转相同的量。旋转量使得沿前一个正 X 轴的坐标随后与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy都为 0.0,则返回恒等变换。这个操作相当于调用:AffineTransform.getRotateInstance(Math.atan2(vecy, vecx), anchorx, anchory);- 参数:
vecx- 旋转向量的X坐标vecy- 旋转向量的Y坐标anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 返回:
-
一个
AffineTransform对象,它根据指定的旋转向量围绕指定点旋转坐标。 - 自从:
- 1.6
-
getQuadrantRotateInstance
返回按指定数量的象限旋转坐标的变换。此操作等效于调用:AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0);
旋转正数象限将正 X 轴上的点向正 Y 轴旋转。- 参数:
numquadrants- 要旋转的 90 度弧的数量- 返回:
-
一个
AffineTransform对象,它按指定的象限数旋转坐标。 - 自从:
- 1.6
-
getQuadrantRotateInstance
public static AffineTransform getQuadrantRotateInstance(int numquadrants, double anchorx, double anchory) 返回一个变换,该变换将坐标围绕指定锚点旋转指定数量的象限。此操作等效于调用:AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0, anchorx, anchory);旋转正数象限将正 X 轴上的点向正 Y 轴旋转。- 参数:
numquadrants- 要旋转的 90 度弧的数量anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 返回:
-
一个
AffineTransform对象,它围绕指定锚点将坐标旋转指定数量的象限。 - 自从:
- 1.6
-
getScaleInstance
返回表示缩放变换的变换。表示返回变换的矩阵是:[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]- 参数:
sx- 坐标沿 X 轴方向缩放的因子sy- 坐标沿 Y 轴方向缩放的因子- 返回:
-
一个
AffineTransform对象,它按指定的因子缩放坐标。 - 自从:
- 1.2
-
getShearInstance
返回表示剪切变换的变换。表示返回变换的矩阵是:[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]- 参数:
shx- 坐标在正 X 轴方向上移动的乘数,作为其 Y 坐标的因数shy- 坐标在正 Y 轴方向上移动的乘数,作为其 X 坐标的一个因子- 返回:
-
一个
AffineTransform对象,它按指定的乘数剪切坐标。 - 自从:
- 1.2
-
getType
public int getType()检索描述此转换的转换属性的标志位。返回值是常量 TYPE_IDENTITY 或 TYPE_GENERAL_TRANSFORM 之一,或者是适当标志位的组合。标志位的有效组合是异或运算,除了 TYPE_UNIFORM_SCALE 或 TYPE_GENERAL_SCALE 标志位以及 TYPE_QUADRANT_ROTATION 或 TYPE_GENERAL_ROTATION 标志位之外,还可以组合 TYPE_TRANSLATION 标志位。- 返回:
- 适用于此转换的任何指示标志的 OR 组合
- 自从:
- 1.2
- 参见:
-
getDeterminant
public double getDeterminant()返回变换的矩阵表示的行列式。行列式既可用于确定变换是否可以反转,也可用于获得表示变换的组合 X 和 Y 缩放比例的单个值。如果行列式非零,则此变换是可逆的,并且依赖于逆变换的各种方法不需要抛出
NoninvertibleTransformException。如果行列式为零,则此变换无法反转,因为变换将所有输入坐标映射到一条线或一个点上。如果行列式足够接近零,则逆变换操作可能无法提供足够的精度来产生有意义的结果。如果此变换表示统一比例,如
getType方法所示,则行列式也表示统一比例因子的平方,所有点都通过该比例因子从原点扩展或收缩。如果此变换表示非均匀比例或更一般的变换,则行列式不太可能表示对除确定逆变换是否可能以外的任何目的有用的值。在数学上,行列式是使用以下公式计算的:
| m00 m01 m02 | | m10 m11 m12 | = m00 * m11 - m01 * m10 | 0 0 1 |- 返回:
- 用于变换坐标的矩阵的行列式。
- 自从:
- 1.2
- 参见:
-
getMatrix
public void getMatrix(double[] flatmatrix) 检索 3x3 仿射变换矩阵中的 6 个可指定值,并将它们放入双精度值数组中。这些值以 { m00 m10 m01 m11 m02 m12 } 的形式存储在数组中。还可以指定一个包含 4 个双精度数的数组,在这种情况下,仅检索表示数组的非转换部分的前四个元素,并将值存储到数组中,如 { m00 m10 m01 m11 }- 参数:
flatmatrix- 用于存储返回值的双精度数组。- 自从:
- 1.2
- 参见:
-
getScaleX
public double getScaleX()返回 3x3 仿射变换矩阵的m00元素。该矩阵因子确定输入 X 坐标将如何影响输出 X 坐标,并且是变换比例的一个元素。要测量此变换拉伸或收缩 X 坐标的全部量,请使用以下代码:Point2D p = new Point2D.Double(1, 0); p = tx.deltaTransform(p, p); double scaleX = p.distance(0, 0);
- 返回:
-
一个双精度值,它是 3x3 仿射变换矩阵的
m00元素。 - 自从:
- 1.2
- 参见:
-
getScaleY
public double getScaleY()返回 3x3 仿射变换矩阵的m11元素。此矩阵因子确定输入 Y 坐标将如何影响输出 Y 坐标,并且是变换比例的一个元素。要测量此变换拉伸或收缩 Y 坐标的全部量,请使用以下代码:Point2D p = new Point2D.Double(0, 1); p = tx.deltaTransform(p, p); double scaleY = p.distance(0, 0);
- 返回:
-
一个双精度值,它是 3x3 仿射变换矩阵的
m11元素。 - 自从:
- 1.2
- 参见:
-
getShearX
public double getShearX()返回 3x3 仿射变换矩阵的 X 坐标剪切元素 (m01)。- 返回:
- 一个 double 值,它是仿射变换矩阵的剪切元素的 X 坐标。
- 自从:
- 1.2
- 参见:
-
getShearY
public double getShearY()返回 3x3 仿射变换矩阵的 Y 坐标剪切元素 (m10)。- 返回:
- 一个 double 值,它是仿射变换矩阵的剪切元素的 Y 坐标。
- 自从:
- 1.2
- 参见:
-
getTranslateX
public double getTranslateX()返回 3x3 仿射变换矩阵的平移元素 (m02) 的 X 坐标。- 返回:
- 一个 double 值,它是仿射变换矩阵的平移元素的 X 坐标。
- 自从:
- 1.2
- 参见:
-
getTranslateY
public double getTranslateY()返回 3x3 仿射变换矩阵的平移元素 (m12) 的 Y 坐标。- 返回:
- 一个 double 值,它是仿射变换矩阵的平移元素的 Y 坐标。
- 自从:
- 1.2
- 参见:
-
translate
public void translate(double tx, double ty) 将此转换与翻译转换连接起来。这等效于调用 concatenate(T),其中 T 是由以下矩阵表示的AffineTransform:[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]- 参数:
tx- 坐标在 X 轴方向平移的距离ty- 坐标在 Y 轴方向平移的距离- 自从:
- 1.2
-
rotate
public void rotate(double theta) 将此变换与旋转变换连接起来。这等效于调用 concatenate(R),其中 R 是由以下矩阵表示的AffineTransform:[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]旋转正角度 theta 会将正 X 轴上的点旋转到正 Y 轴。另请注意上面对 处理 90 度旋转 的讨论。- 参数:
theta- 以弧度测量的旋转角度- 自从:
- 1.2
-
rotate
public void rotate(double theta, double anchorx, double anchory) 将此变换与围绕锚点旋转坐标的变换连接起来。这个操作相当于平移坐标,使锚点在原点(S1),然后绕新原点(S2)旋转,最后平移,使中间原点恢复到原锚点的坐标(S3)。此操作等效于以下调用序列:
translate(anchorx, anchory); // S3: final translation rotate(theta); // S2: rotate around anchor translate(-anchorx, -anchory); // S1: translate anchor to origin
旋转正角度 theta 会将正 X 轴上的点旋转到正 Y 轴。另请注意上面对 处理 90 度旋转 的讨论。- 参数:
theta- 以弧度测量的旋转角度anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 自从:
- 1.2
-
rotate
public void rotate(double vecx, double vecy) 将此变换与根据旋转向量旋转坐标的变换连接起来。所有坐标都围绕原点旋转相同的量。旋转量使得沿前一个正 X 轴的坐标随后与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy均为 0.0,则不会向此变换添加额外的旋转。这个操作相当于调用:rotate(Math.atan2(vecy, vecx));
- 参数:
vecx- 旋转向量的X坐标vecy- 旋转向量的Y坐标- 自从:
- 1.6
-
rotate
public void rotate(double vecx, double vecy, double anchorx, double anchory) 将此变换与根据旋转向量围绕锚点旋转坐标的变换连接起来。所有坐标都围绕指定的锚点坐标旋转相同的量。旋转量使得沿前一个正 X 轴的坐标随后与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy均为 0.0,则不会以任何方式修改转换。这个方法相当于调用:rotate(Math.atan2(vecy, vecx), anchorx, anchory);
- 参数:
vecx- 旋转向量的X坐标vecy- 旋转向量的Y坐标anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 自从:
- 1.6
-
quadrantRotate
public void quadrantRotate(int numquadrants) 将此变换与按指定数量的象限旋转坐标的变换连接。这相当于调用:rotate(numquadrants * Math.PI / 2.0);
旋转正数的象限将正 X 轴上的点旋转到正 Y 轴。- 参数:
numquadrants- 要旋转的 90 度弧的数量- 自从:
- 1.6
-
quadrantRotate
public void quadrantRotate(int numquadrants, double anchorx, double anchory) 将此变换与围绕指定锚点按指定数量的象限旋转坐标的变换连接起来。此方法等效于调用:rotate(numquadrants * Math.PI / 2.0, anchorx, anchory);
旋转正数象限将正 X 轴上的点向正 Y 轴旋转。- 参数:
numquadrants- 要旋转的 90 度弧的数量anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 自从:
- 1.6
-
scale
public void scale(double sx, double sy) 将此转换与缩放转换连接起来。这等效于调用 concatenate(S),其中 S 是由以下矩阵表示的AffineTransform:[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]- 参数:
sx- 坐标沿 X 轴方向缩放的因子sy- 坐标沿 Y 轴方向缩放的因子- 自从:
- 1.2
-
shear
public void shear(double shx, double shy) 将此变换与剪切变换连接起来。这相当于调用 concatenate(SH),其中 SH 是由以下矩阵表示的AffineTransform:[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]- 参数:
shx- 坐标在正 X 轴方向上移动的乘数,作为其 Y 坐标的因数shy- 坐标在正 Y 轴方向上移动的乘数,作为其 X 坐标的一个因子- 自从:
- 1.2
-
setToIdentity
public void setToIdentity()将此转换重置为恒等转换。- 自从:
- 1.2
-
setToTranslation
public void setToTranslation(double tx, double ty) 将此转换设置为平移转换。表示此变换的矩阵变为:[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]- 参数:
tx- 坐标在 X 轴方向平移的距离ty- 坐标在 Y 轴方向平移的距离- 自从:
- 1.2
-
setToRotation
public void setToRotation(double theta) 将此变换设置为旋转变换。表示此变换的矩阵变为:[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]旋转正角度 theta 会将正 X 轴上的点旋转到正 Y 轴。另请注意上面对 处理 90 度旋转 的讨论。- 参数:
theta- 以弧度测量的旋转角度- 自从:
- 1.2
-
setToRotation
public void setToRotation(double theta, double anchorx, double anchory) 将此变换设置为平移的旋转变换。这个操作相当于平移坐标,使锚点在原点(S1),然后绕新原点(S2)旋转,最后平移,使中间原点恢复到原锚点的坐标(S3)。此操作等效于以下调用序列:
setToTranslation(anchorx, anchory); // S3: final translation rotate(theta); // S2: rotate around anchor translate(-anchorx, -anchory); // S1: translate anchor to origin
表示此变换的矩阵变为:[ cos(theta) -sin(theta) x-x*cos+y*sin ] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ]旋转正角度 theta 会将正 X 轴上的点旋转到正 Y 轴。另请注意上面对 处理 90 度旋转 的讨论。- 参数:
theta- 以弧度测量的旋转角度anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 自从:
- 1.2
-
setToRotation
public void setToRotation(double vecx, double vecy) 将此变换设置为根据旋转向量旋转坐标的旋转变换。所有坐标都围绕原点旋转相同的量。旋转量使得沿前一个正 X 轴的坐标随后与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy均为 0.0,则转换设置为恒等转换。这个操作相当于调用:setToRotation(Math.atan2(vecy, vecx));
- 参数:
vecx- 旋转向量的X坐标vecy- 旋转向量的Y坐标- 自从:
- 1.6
-
setToRotation
public void setToRotation(double vecx, double vecy, double anchorx, double anchory) 将此变换设置为旋转变换,根据旋转矢量围绕锚点旋转坐标。所有坐标都围绕指定的锚点坐标旋转相同的量。旋转量使得沿前一个正 X 轴的坐标随后与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy均为 0.0,则转换设置为恒等转换。这个操作相当于调用:setToTranslation(Math.atan2(vecy, vecx), anchorx, anchory);
- 参数:
vecx- 旋转向量的X坐标vecy- 旋转向量的Y坐标anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 自从:
- 1.6
-
setToQuadrantRotation
public void setToQuadrantRotation(int numquadrants) 将此变换设置为旋转变换,将坐标旋转指定数量的象限。此操作等效于调用:setToRotation(numquadrants * Math.PI / 2.0);
旋转正数象限将正 X 轴上的点向正 Y 轴旋转。- 参数:
numquadrants- 要旋转的 90 度弧的数量- 自从:
- 1.6
-
setToQuadrantRotation
public void setToQuadrantRotation(int numquadrants, double anchorx, double anchory) 将此变换设置为平移旋转变换,该变换将坐标围绕指定锚点旋转指定数量的象限。此操作等效于调用:setToRotation(numquadrants * Math.PI / 2.0, anchorx, anchory);
旋转正数象限将正 X 轴上的点向正 Y 轴旋转。- 参数:
numquadrants- 要旋转的 90 度弧的数量anchorx- 旋转锚点的X坐标anchory- 旋转锚点的Y坐标- 自从:
- 1.6
-
setToScale
public void setToScale(double sx, double sy) 将此变换设置为缩放变换。表示此变换的矩阵变为:[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]- 参数:
sx- 坐标沿 X 轴方向缩放的因子sy- 坐标沿 Y 轴方向缩放的因子- 自从:
- 1.2
-
setToShear
public void setToShear(double shx, double shy) 将此变换设置为剪切变换。表示此变换的矩阵变为:[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]- 参数:
shx- 坐标在正 X 轴方向上移动的乘数,作为其 Y 坐标的因数shy- 坐标在正 Y 轴方向上移动的乘数,作为其 X 坐标的一个因子- 自从:
- 1.2
-
setTransform
将此转换设置为指定AffineTransform对象中转换的副本。- 参数:
Tx- 从中复制转换的AffineTransform对象- 自从:
- 1.2
-
setTransform
public void setTransform(double m00, double m10, double m01, double m11, double m02, double m12) 将此转换设置为由 6 个双精度值指定的矩阵。- 参数:
m00- 3x3 矩阵的 X 坐标缩放元素m10- 3x3矩阵的Y坐标剪切元素m01- 3x3矩阵的X坐标剪切元素m11- 3x3 矩阵的 Y 坐标缩放元素m02- 3x3 矩阵的 X 坐标平移元素m12- 3x3 矩阵的 Y 坐标平移元素- 自从:
- 1.2
-
concatenate
以最常用的方式将AffineTransform Tx连接到此AffineTransformCx,以提供由Tx映射到先前用户空间的新用户空间。更新 Cx 以执行组合转换。用更新后的变换 Cx' 变换点 p 相当于先用Tx变换 p,然后用原始变换 Cx 变换结果,如下所示: Cx'(p) = Cx(Tx(p)) 在矩阵表示法中,如果这个变换 Cx 由矩阵 [this] 表示,Tx由矩阵 [Tx] 表示,然后此方法执行以下操作:[this] = [this] x [Tx]
- 参数:
Tx- 要与此AffineTransform对象连接的AffineTransform对象。- 自从:
- 1.2
- 参见:
-
preConcatenate
以不太常用的方式将AffineTransform Tx连接到此AffineTransformCx,以便Tx修改相对于绝对像素空间而不是相对于现有用户空间的坐标变换。更新 Cx 以执行组合转换。通过更新的变换 Cx' 变换点 p 相当于首先通过原始变换 Cx 变换 p,然后通过Tx变换结果,如下所示: Cx'(p) = Tx(Cx(p)) 在矩阵表示法中,如果这个变换 Cx 由矩阵 [this] 表示,Tx由矩阵 [Tx] 表示,然后此方法执行以下操作:[this] = [Tx] x [this]
- 参数:
Tx- 要与此AffineTransform对象连接的AffineTransform对象。- 自从:
- 1.2
- 参见:
-
createInverse
返回表示逆变换的AffineTransform对象。该变换 Tx 的逆变换 Tx' 将 Tx 变换后的坐标映射回其原始坐标。换句话说,Tx'(Tx(p)) = p = Tx(Tx'(p))。如果此变换将所有坐标映射到一个点或一条线上,那么它不会有逆映射,因为不在目标点或线上的坐标不会有逆映射。
getDeterminant方法可用于确定此转换是否没有逆,在这种情况下,如果调用createInverse方法将抛出异常。- 返回:
-
表示逆变换的新
AffineTransform对象。 - 抛出:
NoninvertibleTransformException- 如果矩阵不能反转。- 自从:
- 1.2
- 参见:
-
invert
将此变换设置为其自身的逆。该变换 Tx 的逆变换 Tx' 将 Tx 变换后的坐标映射回其原始坐标。换句话说,Tx'(Tx(p)) = p = Tx(Tx'(p))。如果此变换将所有坐标映射到一个点或一条线上,那么它不会有逆映射,因为不在目标点或线上的坐标不会有逆映射。
getDeterminant方法可用于确定此转换是否没有逆,在这种情况下,如果调用invert方法将抛出异常。- 抛出:
NoninvertibleTransformException- 如果矩阵不能反转。- 自从:
- 1.6
- 参见:
-
transform
转换指定的ptSrc并将结果存储在ptDst中。如果ptDst为null,则分配一个新的Point2D对象,然后将转换结果存储在该对象中。在任何一种情况下,为方便起见,返回包含转换点的ptDst。如果ptSrc和ptDst是同一个对象,输入点将被转换后的点正确覆盖。- 参数:
ptSrc- 要转换的指定Point2DptDst- 存储转换ptSrc结果的指定Point2D- 返回:
-
转换
ptSrc并将结果存储在ptDst之后的ptDst。 - 自从:
- 1.2
-
transform
通过此变换变换点对象数组。如果ptDst数组的任何元素是null,则在存储转换结果之前分配一个新的Point2D对象并将其存储到该元素中。请注意,此方法不采取任何预防措施来避免将结果存储到
Point2D对象中而引起的问题,这些对象将用作源数组下方计算的源。此方法确实保证如果指定的Point2D对象既是同一单点变换操作的源又是目标,则在计算完成之前不会存储结果,以避免将结果存储在操作数之上。但是,如果一个操作的目标Point2D对象与源数组下方另一操作的源Point2D对象是同一对象,则该点中的原始坐标将在转换之前被覆盖。- 参数:
ptSrc- 包含源点对象的数组srcOff- 源数组中要转换的第一个点对象的偏移量ptDst- 变换点对象返回到的数组dstOff- 存储在目标数组中的第一个变换点对象位置的偏移量numPts- 要变换的点对象的数量- 自从:
- 1.2
-
transform
public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) 通过此转换转换浮点坐标数组。两个坐标数组部分可以完全相同,也可以是同一数组的重叠部分,而不影响结果的有效性。此方法可确保源坐标在转换之前不会被先前的操作覆盖。坐标存储在数组中,从指定偏移量开始,顺序为[x0, y0, x1, y1, ..., xn, yn]。- 参数:
srcPts- 包含源点坐标的数组。每个点都存储为一对 x、y 坐标。srcOff- 源数组中要转换的第一个点的偏移量dstPts- 返回变换后的点坐标的数组。每个点都存储为一对 x、y 坐标。dstOff- 存储在目标数组中的第一个变换点位置的偏移量numPts- 要转换的点数- 自从:
- 1.2
-
transform
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此转换转换双精度坐标数组。两个坐标数组部分可以完全相同,也可以是同一数组的重叠部分,而不影响结果的有效性。此方法可确保源坐标在转换之前不会被先前的操作覆盖。坐标存储在数组中,从指示的偏移量开始,顺序为[x0, y0, x1, y1, ..., xn, yn]。- 参数:
srcPts- 包含源点坐标的数组。每个点都存储为一对 x、y 坐标。srcOff- 源数组中要转换的第一个点的偏移量dstPts- 返回变换后的点坐标的数组。每个点都存储为一对 x、y 坐标。dstOff- 存储在目标数组中的第一个变换点位置的偏移量numPts- 要变换的点对象的数量- 自从:
- 1.2
-
transform
public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此转换转换浮点坐标数组,并将结果存储到双精度数组中。坐标存储在数组中,从指定偏移量开始,顺序为[x0, y0, x1, y1, ..., xn, yn]。- 参数:
srcPts- 包含源点坐标的数组。每个点都存储为一对 x、y 坐标。srcOff- 源数组中要转换的第一个点的偏移量dstPts- 返回变换后的点坐标的数组。每个点都存储为一对 x、y 坐标。dstOff- 存储在目标数组中的第一个变换点位置的偏移量numPts- 要转换的点数- 自从:
- 1.2
-
transform
public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts) 通过此转换转换双精度坐标数组,并将结果存储到浮点数数组中。坐标存储在数组中,从指定偏移量开始,顺序为[x0, y0, x1, y1, ..., xn, yn]。- 参数:
srcPts- 包含源点坐标的数组。每个点都存储为一对 x、y 坐标。srcOff- 源数组中要转换的第一个点的偏移量dstPts- 返回变换后的点坐标的数组。每个点都存储为一对 x、y 坐标。dstOff- 存储在目标数组中的第一个变换点位置的偏移量numPts- 要变换的点对象的数量- 自从:
- 1.2
-
inverseTransform
public Point2D inverseTransform(Point2D ptSrc, Point2D ptDst) throws NoninvertibleTransformException 对指定的ptSrc进行逆变换并将结果存储在ptDst中。如果ptDst为null,则分配一个新的Point2D对象,然后将转换结果存储在该对象中。在任何一种情况下,为方便起见,返回包含转换点的ptDst。如果ptSrc和ptDst是同一个对象,输入点将被转换后的点正确覆盖。- 参数:
ptSrc- 要进行逆变换的点ptDst- 生成的变换点- 返回:
ptDst,其中包含逆变换的结果。- 抛出:
NoninvertibleTransformException- 如果矩阵不能反转。- 自从:
- 1.2
-
inverseTransform
public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws NoninvertibleTransformException 通过此变换对双精度坐标数组进行逆变换。两个坐标数组部分可以完全相同,也可以是同一数组的重叠部分,而不影响结果的有效性。此方法可确保源坐标在转换之前不会被先前的操作覆盖。坐标存储在数组中,从指定偏移量开始,顺序为[x0, y0, x1, y1, ..., xn, yn]。- 参数:
srcPts- 包含源点坐标的数组。每个点都存储为一对 x、y 坐标。srcOff- 源数组中要转换的第一个点的偏移量dstPts- 返回变换后的点坐标的数组。每个点都存储为一对 x、y 坐标。dstOff- 存储在目标数组中的第一个变换点位置的偏移量numPts- 要变换的点对象的数量- 抛出:
NoninvertibleTransformException- 如果矩阵不能反转。- 自从:
- 1.2
-
deltaTransform
转换ptSrc指定的相对距离向量并将结果存储在ptDst中。使用以下等式在不应用仿射变换矩阵的平移组件的情况下对相对距离向量进行变换:[ x' ] [ m00 m01 (m02) ] [ x ] [ m00x + m01y ] [ y' ] = [ m10 m11 (m12) ] [ y ] = [ m10x + m11y ] [ (1) ] [ (0) (0) ( 1 ) ] [ (1) ] [ (1) ]
如果ptDst为null,则分配一个新的Point2D对象,然后将变换结果存储在该对象中。在任何一种情况下,为方便起见,返回包含转换点的ptDst。如果ptSrc和ptDst是同一个对象,输入点将被转换后的点正确覆盖。- 参数:
ptSrc- 要进行增量变换的距离向量ptDst- 转换后的距离向量- 返回:
ptDst,其中包含转换的结果。- 自从:
- 1.2
-
deltaTransform
public void deltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) 通过此变换变换相对距离向量数组。使用以下等式,在不应用仿射变换矩阵的平移组件的情况下对相对距离向量进行变换:[ x' ] [ m00 m01 (m02) ] [ x ] [ m00x + m01y ] [ y' ] = [ m10 m11 (m12) ] [ y ] = [ m10x + m11y ] [ (1) ] [ (0) (0) ( 1 ) ] [ (1) ] [ (1) ]
两个坐标数组部分可以完全相同,也可以是同一数组的重叠部分,而不影响结果的有效性。此方法可确保源坐标在转换之前不会被先前的操作覆盖。坐标存储在数组中,从指示的偏移量开始,顺序为[x0, y0, x1, y1, ..., xn, yn]。- 参数:
srcPts- 包含源距离向量的数组。每个向量存储为一对相对的 x、y 坐标。srcOff- 源数组中要转换的第一个向量的偏移量dstPts- 转换后的距离向量返回到的数组。每个向量存储为一对相对的 x、y 坐标。dstOff- 存储在目标数组中的第一个变换向量位置的偏移量numPts- 要变换的矢量坐标对的数量- 自从:
- 1.2
-
createTransformedShape
返回一个新的Shape对象,该对象由指定的Shape的几何形状定义,之后它已被此转换转换。- 参数:
pSrc- 要由此转换转换的指定Shape对象。- 返回:
-
一个新的
Shape对象,它定义转换后的Shape的几何形状,如果pSrc为空,则为空。 - 自从:
- 1.2
-
toString
返回表示此Object值的String。 -
isIdentity
public boolean isIdentity()如果此AffineTransform是身份转换,则返回true。- 返回:
true如果这个AffineTransform是恒等变换;false否则。- 自从:
- 1.2
-
clone
返回此AffineTransform对象的副本。 -
hashCode
public int hashCode()返回此转换的哈希码。 -
equals
如果此AffineTransform表示与指定参数相同的仿射坐标变换,则返回true。
-