©
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.geom.AffineTransform
public class AffineTransform
AffineTransform
类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D 坐标的线性映射,保留了线的“直线性”和“平行性”。可以使用一系列平移 (translation)、缩放 (scale)、翻转 (flip)、旋转 (rotation) 和错切 (shear) 来构造仿射变换。
这样的坐标变换可以使用一个 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 ]
在 AffineTransform
类的 rotate
方法的一些变量中,双精度参数指定了以弧度表示的旋转角度。这些方法为近似 90 度(包括倍数诸如 180、270 和 360 度)的旋转提供特殊的处理,以便更有效地处理象限旋转这类常见情形。这种特殊处理可以导致旋转角度非常接近于 90 度的倍数,从而可以将其视为正好是 90 度的倍数。对于 90 度的小倍数,被视为象限旋转的角度范围大约是 0.00000121 度宽。这一节解释为什么需要特别小心以及如何实现它。
因为 90 度用弧度表示是 PI/2
,而 PI 是无限不循环小数(因此是无理数),所以它不能像用弧度表示的精确双精度值那样准确地表示 90 度的倍数。因此,理论上不可以使用 PI 来描述象限旋转(90、180、270 或 360 度)。双精度浮点值可以非常接近 PI/2
的非零倍数,但是不够接近到正弦或余弦能精确到 0.0、1.0 或 -1.0。只有在 Math.sin(0.0)
的情况下,Math.sin()
和 Math.cos()
实现才相应地返回 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 度)的范围。
字段摘要 | |
---|---|
static int |
TYPE_FLIP
此标志位指示此对象定义的变换除了执行其他标志位指示的转换外,还执行关于某个坐标轴的镜像翻转操作,此操作将通常的右旋坐标系更改为左旋坐标系。 |
static int |
TYPE_GENERAL_ROTATION
此标志位指示此对象定义的变换除了执行其他标志位指示的转换外,还执行任意角度的旋转操作。 |
static int |
TYPE_GENERAL_SCALE
此标志位指示此对象定义的变换除了执行其他标志位指示的转换外,还执行常规缩放操作。 |
static int |
TYPE_GENERAL_TRANSFORM
此常量指示此对象定义的变换执行输入坐标的任意转换操作。 |
static int |
TYPE_IDENTITY
此常量指示此对象定义的变换是恒等变换。 |
static int |
TYPE_MASK_ROTATION
此常量是所有旋转标志位的位掩码。 |
static int |
TYPE_MASK_SCALE
此常量是所有缩放标志位的位掩码。 |
static int |
TYPE_QUADRANT_ROTATION
此标志位指示此对象定义的变换除了执行其他标志位指示的转换外,还通过乘以 90 度的某个倍数执行象限旋转操作。 |
static int |
TYPE_TRANSLATION
此标志位指示此对象定义的变换除了执行其他标志位指示的转换外,还执行平移操作。 |
static int |
TYPE_UNIFORM_SCALE
此标志位指示此对象定义的变换除了执行其他标志位指示的转换外,还执行统一缩放操作。 |
构造方法摘要 | |
---|---|
AffineTransform()
构造一个表示恒等变换的新 AffineTransform 。 |
|
AffineTransform(AffineTransform Tx)
构造一个新 AffineTransform ,让它作为指定 AffineTransform 对象的副本。 |
|
AffineTransform(double[] flatmatrix)
根据双精度值数组构造一个新 AffineTransform ,该数组要么表示 3x3 变换矩阵的 4 个非平移条目,要么表示它的 6 个可指定条目。 |
|
AffineTransform(double m00,
double m10,
double m01,
double m11,
double m02,
double m12)
根据表示 3x3 变换矩阵 6 个可指定条目的 6 个双精度值构造一个新 AffineTransform 。 |
|
AffineTransform(float[] flatmatrix)
根据一个浮点值数组构造一个新 AffineTransform ,该数组要么表示 3x3 变换矩阵的 4 个非平移条目,要么表示 3x3 变换矩阵的 6 个可指定条目。 |
|
AffineTransform(float m00,
float m10,
float m01,
float m11,
float m02,
float m12)
根据表示 3x3 变换矩阵 6 个可指定条目的 6 个浮点值构造一个新 AffineTransform 。 |
方法摘要 | |
---|---|
Object |
clone()
返回此 AffineTransform 对象的副本。 |
void |
concatenate(AffineTransform Tx)
以最常用的方式将 AffineTransform Tx 连接到此 AffineTransform Cx,以提供由 Tx 映射到以前用户空间的新用户空间。 |
AffineTransform |
createInverse()
返回表示逆向变换的 AffineTransform 对象。 |
Shape |
createTransformedShape(Shape pSrc)
返回新的 Shape 对象,它在通过此变换之后,由指定 Shape 的几何形状定义。 |
void |
deltaTransform(double[] srcPts,
int srcOff,
double[] dstPts,
int dstOff,
int numPts)
通过此变换来变换相对距离向量数组。 |
Point2D |
deltaTransform(Point2D ptSrc,
Point2D ptDst)
变换由 ptSrc 指定的相对距离向量,并将结果存储在 ptDst 中。 |
boolean |
equals(Object obj)
如果此 AffineTransform 表示与指定参数相同的仿射坐标变换,则返回 true 。 |
double |
getDeterminant()
返回变换的矩阵表示形式的决定因子。 |
void |
getMatrix(double[] flatmatrix)
在 3x3 仿射变换矩阵中检索 6 个可指定值,并将其置于双精度值的数组中。 |
static AffineTransform |
getQuadrantRotateInstance(int numquadrants)
返回按指定象限数旋转坐标的变换。 |
static AffineTransform |
getQuadrantRotateInstance(int numquadrants,
double anchorx,
double anchory)
返回按指定象限数绕指定锚点旋转坐标的变换。 |
static AffineTransform |
getRotateInstance(double theta)
返回表示旋转变换的变换。 |
static AffineTransform |
getRotateInstance(double vecx,
double vecy)
返回根据旋转向量旋转坐标的变换。 |
static AffineTransform |
getRotateInstance(double theta,
double anchorx,
double anchory)
返回绕锚点旋转坐标的变换。 |
static AffineTransform |
getRotateInstance(double vecx,
double vecy,
double anchorx,
double anchory)
返回根据旋转向量绕锚点坐标旋转坐标的变换。 |
static AffineTransform |
getScaleInstance(double sx,
double sy)
返回表示缩放变换的变换。 |
double |
getScaleX()
返回 3x3 仿射变换矩阵缩放元素 (m00) 的 X 坐标。 |
double |
getScaleY()
返回 3x3 仿射变换矩阵缩放元素 (m11) 的 Y 坐标。 |
static AffineTransform |
getShearInstance(double shx,
double shy)
返回表示错切变换的变换。 |
double |
getShearX()
返回 3x3 仿射变换矩阵错切元素 (m01) 的 X 坐标。 |
double |
getShearY()
返回 3x3 仿射变换矩阵错切元素 (m10) 的 Y 坐标。 |
static AffineTransform |
getTranslateInstance(double tx,
double ty)
返回表示平移变换的变换。 |
double |
getTranslateX()
返回 3x3 仿射变换矩阵平移元素 (m02) 的 X 坐标。 |
double |
getTranslateY()
返回 3x3 仿射变换矩阵平移元素 (m12) 的 Y 坐标。 |
int |
getType()
检索描述此变换的变换属性的标志位。 |
int |
hashCode()
返回此变换的哈希码。 |
void |
inverseTransform(double[] srcPts,
int srcOff,
double[] dstPts,
int dstOff,
int numPts)
通过此变换来逆向变换双精度坐标数组。 |
Point2D |
inverseTransform(Point2D ptSrc,
Point2D ptDst)
逆向变换指定的 ptSrc 并将结果存储在 ptDst 中。 |
void |
invert()
将此变换设置为它自身的逆变换。 |
boolean |
isIdentity()
如果此 AffineTransform 是恒等变换,则返回 true 。 |
void |
preConcatenate(AffineTransform Tx)
以不常用的方式将 AffineTransform Tx 连接到此 AffineTransform Cx,从而 Tx 相对于绝对像素空间(而非相对于现有用户空间)修改坐标变换。 |
void |
quadrantRotate(int numquadrants)
连接此变换与按照指定象限数旋转坐标的变换。 |
void |
quadrantRotate(int numquadrants,
double anchorx,
double anchory)
连接此变换与按指定象限数绕指定锚点旋转坐标的变换。 |
void |
rotate(double theta)
连接此变换与旋转变换。 |
void |
rotate(double vecx,
double vecy)
连接此变换与根据旋转向量旋转坐标的变换。 |
void |
rotate(double theta,
double anchorx,
double anchory)
连接此变换与绕锚点旋转坐标的变换。 |
void |
rotate(double vecx,
double vecy,
double anchorx,
double anchory)
连接此变换与根据旋转向量绕锚点旋转坐标的变换。 |
void |
scale(double sx,
double sy)
连接此变换与缩放变换。 |
void |
setToIdentity()
将此变换重置为恒等变换。 |
void |
setToQuadrantRotation(int numquadrants)
将此变换设置为按指定象限数旋转坐标的旋转变换。 |
void |
setToQuadrantRotation(int numquadrants,
double anchorx,
double anchory)
将此变换设置为按指定象限数绕指定锚点旋转坐标的平移旋转变换。 |
void |
setToRotation(double theta)
将此变换设置为旋转变换。 |
void |
setToRotation(double vecx,
double vecy)
将此变换设置为根据旋转向量旋转坐标的旋转变换。 |
void |
setToRotation(double theta,
double anchorx,
double anchory)
将此变换设置为平移的旋转变换。 |
void |
setToRotation(double vecx,
double vecy,
double anchorx,
double anchory)
将此变换设置为根据旋转向量绕锚点旋转坐标的旋转变换。 |
void |
setToScale(double sx,
double sy)
将此变换设置为缩放变换。 |
void |
setToShear(double shx,
double shy)
将此变换设置为错切变换。 |
void |
setToTranslation(double tx,
double ty)
将此变换设置为平移变换。 |
void |
setTransform(AffineTransform Tx)
将此变换设置为指定 AffineTransform 对象中变换的副本。 |
void |
setTransform(double m00,
double m10,
double m01,
double m11,
double m02,
double m12)
将此变换设置为 6 个双精度值指定的矩阵。 |
void |
shear(double shx,
double shy)
连接此变换与错切变换。 |
String |
toString()
返回表示此 Object 值的 String 。 |
void |
transform(double[] srcPts,
int srcOff,
double[] dstPts,
int dstOff,
int numPts)
通过此变换来变换双精度坐标数组。 |
void |
transform(double[] srcPts,
int srcOff,
float[] dstPts,
int dstOff,
int numPts)
通过此变换来变换双精度坐标数组,并将结果存储在 float 数组中。 |
void |
transform(float[] srcPts,
int srcOff,
double[] dstPts,
int dstOff,
int numPts)
通过此变换来变换浮点坐标数组,并将结果存储在 double 数组中。 |
void |
transform(float[] srcPts,
int srcOff,
float[] dstPts,
int dstOff,
int numPts)
通过此变换来变换浮点坐标数组。 |
void |
transform(Point2D[] ptSrc,
int srcOff,
Point2D[] ptDst,
int dstOff,
int numPts)
通过此变换来变换点对象数组。 |
Point2D |
transform(Point2D ptSrc,
Point2D ptDst)
变换指定的 ptSrc 并将结果存储在 ptDst 中。 |
void |
translate(double tx,
double ty)
连接此变换与平移变换。 |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final int TYPE_IDENTITY
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_TRANSLATION
TYPE_IDENTITY
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_UNIFORM_SCALE
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_GENERAL_SCALE
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_MASK_SCALE
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
常量字段值public static final int TYPE_FLIP
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_QUADRANT_ROTATION
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_GENERAL_ROTATION
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
常量字段值public static final int TYPE_MASK_ROTATION
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
常量字段值public static final int TYPE_GENERAL_TRANSFORM
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
getType()
,
常量字段值构造方法详细信息 |
---|
public AffineTransform()
AffineTransform
。
public AffineTransform(AffineTransform Tx)
AffineTransform
,让它作为指定 AffineTransform
对象的副本。
Tx
- 要复制的 AffineTransform
对象public AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12)
AffineTransform
。
m00
- 3x3 矩阵缩放元素的 X 坐标m10
- 3x3 矩阵剪切元素的 Y 坐标m01
- 3x3 矩阵剪切元素的 X 坐标m11
- 3x3 矩阵缩放元素的 Y 坐标m02
- 3x3 矩阵平移元素的 X 坐标m12
- 3x3 矩阵平移元素的 Y 坐标public AffineTransform(float[] flatmatrix)
AffineTransform
,该数组要么表示 3x3 变换矩阵的 4 个非平移条目,要么表示 3x3 变换矩阵的 6 个可指定条目。从该数组中检索到的值为 { m00 m10 m01 m11 [m02 m12]}。
flatmatrix
- float 数组,包含要在新 AffineTransform
对象中设置的值。假定数组的长度至少为 4。如果数组的长度小于 6,则仅采用前 4 个值。如果数组的长度大于 6,则采用前 6 个值。public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
AffineTransform
。
m00
- 3x3 矩阵缩放元素的 X 坐标m10
- 3x3 矩阵剪切元素的 Y 坐标m01
- 3x3 矩阵剪切元素的 X 坐标m11
- 3x3 矩阵缩放元素的 Y 坐标m02
- 3x3 矩阵平移元素的 X 坐标m12
- 3x3 矩阵平移元素的 Y 坐标public AffineTransform(double[] flatmatrix)
AffineTransform
,该数组要么表示 3x3 变换矩阵的 4 个非平移条目,要么表示它的 6 个可指定条目。从该数组中检索到的值为 { m00 m10 m01 m11 [m02 m12]}。
flatmatrix
- double 数组,包含要在新 AffineTransform
对象中设置的值。假定数组的长度至少为 4。如果数组的长度小于 6,则仅采用前 4 个值。如果数组的长度大于 6,则采用前 6 个值。方法详细信息 |
---|
public static AffineTransform getTranslateInstance(double tx, double ty)
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- 坐标在 X 轴方向上平移的距离ty
- 坐标在 Y 轴方向上平移的距离
AffineTransform
对象,该对象是使用指定向量创建的。public static AffineTransform getRotateInstance(double theta)
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]用正角度 theta 进行的旋转将 X 正半轴上的点向 Y 正半轴旋转。还要注意上文处理 90 度旋转的讨论。
theta
- 用弧度测量的旋转角度
AffineTransform
对象。public static AffineTransform getRotateInstance(double theta, double anchorx, double anchory)
此操作等效于以下调用序列:
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
对象。public static AffineTransform getRotateInstance(double vecx, double vecy)
vecx
和 vecy
都是 0.0,则返回一个恒等变换。此操作等效于调用:
AffineTransform.getRotateInstance(Math.atan2(vecy, vecx));
vecx
- 旋转向量的 X 坐标vecy
- 旋转向量的 Y 坐标
AffineTransform
对象。public static AffineTransform getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
vecx
和 vecy
都是 0.0,则返回一个恒等变换。此操作等效于调用:
AffineTransform.getRotateInstance(Math.atan2(vecy, vecx), anchorx, anchory);
vecx
- 旋转向量的 X 坐标vecy
- 旋转向量的 Y 坐标anchorx
- 旋转锚点的 X 坐标anchory
- 旋转锚点的 Y 坐标
AffineTransform
对象。public static AffineTransform getQuadrantRotateInstance(int numquadrants)
AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0);用正象限数进行的旋转将 X 正半轴上的点向 Y 正半轴旋转。
numquadrants
- 要旋转的 90 度弧数
AffineTransform
对象。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
对象。public static AffineTransform getScaleInstance(double sx, double sy)
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- 坐标沿 X 轴方向缩放的因子sy
- 坐标沿 Y 轴方向缩放的因子
AffineTransform
对象。public static AffineTransform getShearInstance(double shx, double shy)
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- 坐标在 X 正半轴方向上进行位移的乘数,与其 Y 坐标的因子一样shy
- 坐标在 Y 正半轴方向上进行位移的乘数,与其 X 坐标的因子一样
AffineTransform
对象。public int getType()
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
public double getDeterminant()
如果决定因子非零,则此变换是可逆的,依赖于此逆向变换的各种方法均无需抛出 NoninvertibleTransformException
。如果决定因子为零,则此变换是不可逆的,因为变换将所有输入坐标映射到线或点上。如果决定因子非常接近零,则逆向变换操作可能不够精确,无法生成有意义结果。
如果像 getType
方法指示的那样,此变换表示统一缩放,则决定因子还表示统一缩放因子的平方。所有点都通过该缩放因子从原点展开或向原点收缩。如果此变换表示非统一缩放或较通用的变换,则决定因子只表示确定逆向变换是否可能,而不表示除此之外任何有用值。
在数学上,使用以下公式计算决定因子:
| m00 m01 m02 | | m10 m11 m12 | = m00 * m11 - m01 * m10 | 0 0 1 |
getType()
,
createInverse()
,
inverseTransform(java.awt.geom.Point2D, java.awt.geom.Point2D)
,
TYPE_UNIFORM_SCALE
public void getMatrix(double[] flatmatrix)
flatmatrix
- 用于存储返回值的 double 数组。getScaleX()
,
getScaleY()
,
getShearX()
,
getShearY()
,
getTranslateX()
,
getTranslateY()
public double getScaleX()
getMatrix(double[])
public double getScaleY()
getMatrix(double[])
public double getShearX()
getMatrix(double[])
public double getShearY()
getMatrix(double[])
public double getTranslateX()
getMatrix(double[])
public double getTranslateY()
getMatrix(double[])
public void translate(double tx, double ty)
AffineTransform
,由以下矩阵表示:
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- 坐标在 X 轴方向上平移的距离ty
- 坐标在 Y 轴方向上平移的距离public void rotate(double theta)
AffineTransform
,由以下矩阵表示:
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]用正角度 theta 进行的旋转将 X 正半轴上的点向 Y 正半轴旋转。还要注意上文处理 90 度旋转的讨论。
theta
- 用弧度测量的旋转角度public void rotate(double theta, double anchorx, double anchory)
此操作等效于以下调用序列:
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 坐标public void rotate(double vecx, double vecy)
vecx
和 vecy
都是 0.0,则没有附加的旋转添加到此变换。此操作等效于调用:
rotate(Math.atan2(vecy, vecx));
vecx
- 旋转向量的 X 坐标vecy
- 旋转向量的 Y 坐标public void rotate(double vecx, double vecy, double anchorx, double anchory)
vecx
和 vecy
都是 0.0,则不以任何方式修改此变换。此方法等效于调用:
rotate(Math.atan2(vecy, vecx), anchorx, anchory);
vecx
- 旋转向量的 X 坐标vecy
- 旋转向量的 Y 坐标anchorx
- 旋转锚点的 X 坐标anchory
- 旋转锚点的 Y 坐标public void quadrantRotate(int numquadrants)
rotate(numquadrants * Math.PI / 2.0);用正象限数进行的旋转将 X 正半轴上的点向 Y 正半轴旋转。
numquadrants
- 要旋转的 90 度弧数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 坐标public void scale(double sx, double sy)
AffineTransform
,由以下矩阵表示:
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- 坐标沿 X 轴方向缩放的因子sy
- 坐标沿 Y 轴方向缩放的因子public void shear(double shx, double shy)
AffineTransform
,由以下矩阵表示:
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- 坐标在正 X 轴方向上进行位移的乘数,与其 Y 坐标的因子一样shy
- 坐标在正 Y 轴方向上进行位移的乘数,与其 X 坐标的因子一样public void setToIdentity()
public void setToTranslation(double tx, double ty)
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- 坐标在 X 轴方向上平移的距离ty
- 坐标在 Y 轴方向上平移的距离public void setToRotation(double theta)
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]用正角度 theta 进行的旋转将 X 正半轴上的点向 Y 正半轴旋转。还要注意上文处理 90 度旋转的讨论。
theta
- 用弧度测量的旋转角度public void setToRotation(double theta, double anchorx, double anchory)
此操作等效于以下调用序列:
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 坐标public void setToRotation(double vecx, double vecy)
vecx
和 vecy
都是 0.0,则将该变换设置为恒等变换。此操作等效于调用:
setToRotation(Math.atan2(vecy, vecx));
vecx
- 旋转向量的 X 坐标vecy
- 旋转向量的 Y 坐标public void setToRotation(double vecx, double vecy, double anchorx, double anchory)
vecx
和 vecy
都是 0.0,则将该变换设置为恒等变换。此操作等效于调用:
setToTranslation(Math.atan2(vecy, vecx), anchorx, anchory);
vecx
- 旋转向量的 X 坐标vecy
- 旋转向量的 Y 坐标anchorx
- 旋转锚点的 X 坐标anchory
- 旋转锚点的 Y 坐标public void setToQuadrantRotation(int numquadrants)
setToRotation(numquadrants * Math.PI / 2.0);用正象限数进行的旋转将 X 正半轴上的点向 Y 正半轴旋转。
numquadrants
- 要旋转的 90 度弧数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 坐标public void setToScale(double sx, double sy)
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- 坐标沿 X 轴方向缩放的因子sy
- 坐标沿 Y 轴方向缩放的因子public void setToShear(double shx, double shy)
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- 坐标在正 X 轴方向上进行位移的乘数,与其 Y 坐标的因子一样shy
- 坐标在正 Y 轴方向上进行位移的乘数,与其 X 坐标的因子一样public void setTransform(AffineTransform Tx)
AffineTransform
对象中变换的副本。
Tx
- 从中复制变换的 AffineTransform
对象public void setTransform(double m00, double m10, double m01, double m11, double m02, double m12)
m00
- 3x3 矩阵缩放元素的 X 坐标m10
- 3x3 矩阵错切元素的 Y 坐标m01
- 3x3 矩阵错切元素的 X 坐标m11
- 3x3 矩阵缩放元素的 Y 坐标m02
- 3x3 矩阵平移元素的 X 坐标m12
- 3x3 矩阵平移元素的 Y 坐标public void concatenate(AffineTransform Tx)
AffineTransform
Tx
连接到此 AffineTransform
Cx,以提供由 Tx
映射到以前用户空间的新用户空间。更新 Cx 以执行组合变换。通过更新的变换 Cx' 来对点 p 进行变换等效于首先通过 Tx
变换 p,然后通过初始变换 Cx 变换所得结果,如下所示:Cx'(p) = Cx(Tx(p))。在矩阵符号中,如果此变换 Cx 由矩阵 [this] 表示,Tx
由矩阵 [Tx] 表示,则此方法执行以下操作:
[this] = [this] x [Tx]
Tx
- 要与此 AffineTransform
对象连接的 AffineTransform
对象。preConcatenate(java.awt.geom.AffineTransform)
public void preConcatenate(AffineTransform Tx)
AffineTransform
Tx
连接到此 AffineTransform
Cx,从而 Tx
相对于绝对像素空间(而非相对于现有用户空间)修改坐标变换。更新 Cx 以执行组合变换。通过更新的变换 Cx' 来对点 p 进行变换等效于首先通过初始变换 Cx 变换 p,然后通过 Tx
变换所得结果,如下所示:Cx'(p) = Tx(Cx(p))。在矩阵符号中,如果此变换 Cx 由矩阵 [this] 表示,Tx
由矩阵 [Tx] 表示,则此方法执行以下操作:
[this] = [Tx] x [this]
Tx
- 要与此 AffineTransform
对象连接的 AffineTransform
对象。concatenate(java.awt.geom.AffineTransform)
public AffineTransform createInverse() throws NoninvertibleTransformException
AffineTransform
对象。此变换 Tx 的逆向变换 Tx' 将由 Tx 变换的坐标映射回其初始坐标。换句话说,Tx'(Tx(p)) = p = Tx(Tx'(p))。
如果此变换将所有坐标映射到点或线上,那么它将不能进行逆向变换,因为不位于目标点或线上的坐标没有逆向映射。getDeterminant
方法可用于确定此变换是否不可逆,若不可逆,则调用 createInverse
方法时将抛出异常。
AffineTransform
对象。
NoninvertibleTransformException
- 如果矩阵不可逆。getDeterminant()
public void invert() throws NoninvertibleTransformException
如果此变换将所有坐标映射到点或线上,那么它将不能进行逆向变换,因为不位于目标点或线上的坐标没有逆向映射。getDeterminant
方法可用于确定此变换是否不可逆,若不可逆,则调用 invert
方法时将抛出异常。
NoninvertibleTransformException
- 如果矩阵不可逆。getDeterminant()
public Point2D transform(Point2D ptSrc, Point2D ptDst)
ptSrc
并将结果存储在 ptDst
中。如果 ptDst
为 null
,则分配一个新的 Point2D
对象,然后将变换的结果存储在此对象中。在任何一种情况下,为方便起见,都将返回包含变换点的 ptDst
。如果 ptSrc
和 ptDst
是同一个对象,则将使用变换点正确地改写输入点。
ptSrc
- 要变换的指定 Point2D
ptDst
- 存储变换 ptSrc
结果的指定 Point2D
ptSrc
并将结果存入 ptDst
后的 ptDst
。public void transform(Point2D[] ptSrc, int srcOff, Point2D[] ptDst, int dstOff, int numPts)
ptDst
数组的任何元素为 null
,那么在存储变换结果之前,新的 Point2D
对象将被分配并存储到该元素中。
注意,此方法没有针对如何避免将结果存储到 Point2D
对象(这些对象将用作源数组背后某些计算的源)时产生的问题采取任何预防措施。此方法可保证,如果指定的 Point2D
对象同时作为同一个单点变换操作的源和目标,则在计算完成之前不存储结果,从而避免将结果存储在该操作数上。但是,如果一个操作的目标 Point2D
对象与源数组背后另一个操作的源 Point2D
对象相同,那么在转换该点初始坐标之前,这些坐标都将被改写。
ptSrc
- 包含源点对象的数组ptDst
- 从其中返回变换点对象的数组srcOff
- 源数组中要变换的第一个点对象的偏移量dstOff
- 目标数组中存储的第一个变换点对象的位置的偏移量numPts
- 要变换的点对象数public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
的顺序存储在数组中。
srcPts
- 包含源点坐标的数组。每个点都存储为一对 x, y 坐标。dstPts
- 从其中返回变换点坐标的数组。每个点都存储为一对 x, y 坐标。srcOff
- 源数组中要变换的第一个点的偏移量dstOff
- 目标数组中存储的第一个变换点位置的偏移量numPts
- 要变换的点数public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
的顺序存储在数组中。
srcPts
- 包含源点坐标的数组。每个点都存储为一对 x, y 坐标。dstPts
- 从其中返回变换点坐标的数组。每个点都存储为一对 x, y 坐标。srcOff
- 源数组中要变换的第一个点的偏移量dstOff
- 目标数组中存储的第一个变换点位置的偏移量numPts
- 要变换的点对象数public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
的顺序存储在数组中。
srcPts
- 包含源点坐标的数组。每个点都存储为一对 x, y 坐标。dstPts
- 从其中返回变换点坐标的数组。每个点都存储为一对 x, y 坐标。srcOff
- 源数组中要变换的第一个点的偏移量dstOff
- 目标数组中存储的第一个变换点位置的偏移量numPts
- 要变换的点数public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
的顺序存储在数组中。
srcPts
- 包含源点坐标的数组。每个点都存储为一对 x, y 坐标。dstPts
- 从其中返回变换点坐标的数组。每个点都存储为一对 x, y 坐标。srcOff
- 源数组中要变换的第一个点的偏移量dstOff
- 目标数组中存储的第一个变换点位置的偏移量numPts
- 要变换的点对象数public Point2D inverseTransform(Point2D ptSrc, Point2D ptDst) throws NoninvertibleTransformException
ptSrc
并将结果存储在 ptDst
中。如果 ptDst
为 null
,则分配一个新的 Point2D
对象,然后将变换的结果存储在此对象中。无论是哪种情况,为方便起见,都将返回包含变换点的 ptDst
。如果 ptSrc
和 ptDst
是同一个对象,则将使用变换点正确地改写输入点。
ptSrc
- 要逆向变换的点ptDst
- 得到的变换点
ptDst
,它包含逆向变换的结果。
NoninvertibleTransformException
- 如果矩阵不可逆。public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws NoninvertibleTransformException
[x0, y0, x1, y1, ..., xn, yn]
的顺序存储在数组中。
srcPts
- 包含源点坐标的数组。每个点都存储为一对 x, y 坐标。dstPts
- 从其中返回变换点坐标的数组。每个点都存储为一对 x, y 坐标。srcOff
- 源数组中要变换的第一个点的偏移量dstOff
- 目标数组中存储的第一个变换点位置的偏移量numPts
- 要变换的点对象数
NoninvertibleTransformException
- 如果矩阵不可逆。public Point2D deltaTransform(Point2D ptSrc, Point2D ptDst)
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
- 要进行 delta 变换的距离向量ptDst
- 得到的变换距离向量
ptDst
,它包含变换的结果。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 坐标。dstPts
- 从其中返回变换距离向量的数组。每个向量都存储为一对相对 x, y 坐标。srcOff
- 源数组中要变换的第一个向量的偏移量dstOff
- 目标数组中存储的第一个变换向量位置的偏移量numPts
- 要变换的向量坐标对的数量public Shape createTransformedShape(Shape pSrc)
Shape
对象,它在通过此变换之后,由指定 Shape
的几何形状定义。
pSrc
- 要被此变换变换的指定 Shape
对象。
Shape
的几何形状所定义的新 Shape
对象;如果 pSrc
为 null,则返回 null。public String toString()
Object
值的 String
。
Object
中的 toString
Object
值的 String
。public boolean isIdentity()
AffineTransform
是恒等变换,则返回 true
。
AffineTransform
是恒等变换,则返回 true
;否则返回 false
。public Object clone()
AffineTransform
对象的副本。
Object
中的 clone
AffineTransform
对象副本的 Object
。Cloneable
public int hashCode()
Object
中的 hashCode
Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
AffineTransform
表示与指定参数相同的仿射坐标变换,则返回 true
。
Object
中的 equals
obj
- 要测试与此 AffineTransform
相等性的 Object
obj
等于此 AffineTransform
对象,则返回 true
;否则返回 false
。Object.hashCode()
,
Hashtable
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。