Matrix
Inheritance: java.lang.Object
public class Matrix
替代 GDI+ 矩阵。
大多数算法取自 Sun 的 AffineTransform.java。内部使用的矩阵元素名称采用 Java 的命名。Java 名称到 .NET 名称的映射及说明如下:m00 M11 缩放 X,m10 M12 剪切 Y,m01 M21 剪切 X,m11 M22 缩放 Y,m02 M31 平移 X,m12 M32 平移 Y。
构造函数
| 构造函数 | 描述 |
|---|---|
| Matrix() | 将 Matrix 类的新实例初始化为单位矩阵。 |
| Matrix(float m11, float m12, float m21, float m22, float m31, float m32) | 将 Matrix 类的新实例进行初始化。 |
| Matrix(RectangleF rect, PointF[] plgpts) | 将 Matrix 类的新实例初始化为由指定矩形和点数组定义的几何变换。 |
| Matrix(Rectangle rect, Point[] plgpts) | 将 Matrix 类的新实例初始化为由指定矩形和点数组定义的几何变换。 |
| Matrix(Matrix origin) | 创建 Matrix 类的副本。 |
字段
| 字段 | 描述 |
|---|---|
| TYPE_IDENTITY | 单位变换是指输出坐标始终与输入坐标相同的变换。 |
| TYPE_TRANSLATION | 平移会在 x 和 y 方向上以恒定量移动坐标,但不改变向量的长度或角度。 |
| TYPE_UNIFORM_SCALE | 均匀缩放会在 x 和 y 方向上以相同的比例乘以向量的长度,但不改变向量之间的角度。 |
| TYPE_GENERAL_SCALE | 一般比例会在 x 和 y 方向上以不同的量乘以向量的长度,同时不改变垂直向量之间的角度。 |
| TYPE_MASK_SCALE | 此常量是用于任意比例标志位的位掩码。 |
| TYPE_FLIP | 此标志位表示此对象定义的变换会围绕某轴进行镜像翻转,将通常的右手坐标系转换为左手坐标系,并且还会执行其他标志位指示的转换。 |
| TYPE_QUADRANT_ROTATION | 此标志位表示此对象定义的变换会进行以 90 度的倍数为单位的象限旋转,并且还会执行其他标志位指示的转换。 |
| TYPE_GENERAL_ROTATION | 此标志位表示此对象定义的变换会按任意角度进行旋转,并且还会执行其他标志位指示的转换。 |
| TYPE_MASK_ROTATION | 此常量是用于任意旋转标志位的位掩码。 |
| TYPE_GENERAL_TRANSFORM | 此常量表示此对象定义的变换会对输入坐标进行任意转换。 |
方法
| 方法 | 描述 |
|---|---|
| isEquals(Matrix a, Matrix b) | 确定两个矩阵是否相等。 |
| getM11() | 获取矩阵第一行第一列的元素。 |
| getM12() | 获取矩阵第一行第二列的元素。 |
| getM21() | 获取矩阵第二行第一列的元素。 |
| getM22() | 获取矩阵第二行第二列的元素。 |
| getM31() | 获取矩阵第三行第一列的元素。 |
| getM32() | 获取矩阵第三行第一列的元素。 |
| toString() | 返回表示此实例的字符串。 |
| getElements() | 获取矩阵元素的副本。 |
| transformPoints(PointF[] points) | 对指定的点数组应用此 Matrix 所表示的几何变换。 |
| scale(float scaleX, float scaleY, int order) | 使用指定的顺序将指定的缩放向量(scaleX 和 scaleY)应用于此 Matrix。 |
| scale(float sx, float sy) | 使用(默认)Prepend 顺序将指定的缩放向量(scaleX 和 scaleY)应用于此 Matrix。 |
| translate(float offsetX, float offsetY, int order) | 使用指定的顺序将指定的平移向量应用于此 Matrix。 |
| translate(float tx, float ty) | 使用(默认)Prepend 顺序将指定的平移向量应用于此 Matrix。 |
| multiply(Matrix tTx, int order) | 将此 Matrix 与 matrix 参数中指定的矩阵相乘,并按 order 参数中指定的顺序进行。 |
| multiply(Matrix tTx) | 使用(默认)Prepend 顺序将此 Matrix 与 matrix 参数中指定的矩阵相乘。 |
| rotate(float angle, int order) | 在指定的顺序下,对此 Matrix 绕原点(零 x 和 y 坐标)按 angle 参数指定的角度进行顺时针旋转。 |
| rotate(float angle) | 在默认(Prepend)顺序下,对此 Matrix 绕原点(零 x 和 y 坐标)按 angle 参数指定的角度进行顺时针旋转。 |
| rotateAt(float angle, PointF point, int order) | 在指定的顺序下,对此 Matrix 绕指定点进行顺时针旋转。 |
| rotateAt(float angle, PointF point) | 在默认(Prepend)顺序下,对此 Matrix 绕指定点进行顺时针旋转。 |
| reset() | 将此矩阵重置为单位矩阵的元素。 |
| hashCode() | 返回此实例的哈希码。 |
| equals(Object obj) | 确定指定的 Object 是否等于此实例。 |
| isIdentity() | 如果此 AffineTransform 是单位变换,则返回 true。 |
Matrix()
public Matrix()
将 Matrix 类的新实例初始化为单位矩阵。
Matrix(float m11, float m12, float m21, float m22, float m31, float m32)
public Matrix(float m11, float m12, float m21, float m22, float m31, float m32)
将 Matrix 类的新实例进行初始化。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| m11 | float | m00 M11 缩放 X |
| m12 | float | m10 M12 剪切 Y |
| m21 | float | m01 M21 剪切 X |
| m22 | float | m11 M22 缩放 Y |
| m31 | float | m02 M31 平移 X |
| m32 | float | m12 M32 平移 Y |
Matrix(RectangleF rect, PointF[] plgpts)
public Matrix(RectangleF rect, PointF[] plgpts)
将 Matrix 类的新实例初始化为由指定矩形和点数组定义的几何变换。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| rect | RectangleF | 表示要变换的矩形的 RectangleF 结构。 |
| plgpts | PointF[] | 一个包含三个 PointF 结构的数组,表示要将矩形的左上、右上和左下角变换到的平行四边形的点。平行四边形的右下角由前面三个角暗示。 |
Matrix(Rectangle rect, Point[] plgpts)
public Matrix(Rectangle rect, Point[] plgpts)
将 Matrix 类的新实例初始化为由指定矩形和点数组定义的几何变换。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| rect | Rectangle | 表示要变换的矩形的 Rectangle 结构。 |
| plgpts | Point[] | 一个包含三个 Point 结构的数组,表示要将矩形的左上、右上和左下角变换到的平行四边形的点。平行四边形的右下角由前面三个角暗示。 |
Matrix(Matrix origin)
public Matrix(Matrix origin)
创建 Matrix 类的副本。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| origin | Matrix | 用于复制的基础矩阵。 |
TYPE_IDENTITY
public static final int TYPE_IDENTITY
单位变换是指输出坐标始终与输入坐标相同的变换。如果此变换不是单位变换,则其类型将是常量 GENERAL_TRANSFORM,或是针对该变换执行的各种坐标转换的相应标志位的组合。
TYPE_TRANSLATION
public static final int TYPE_TRANSLATION
平移会在 x 和 y 方向上以恒定量移动坐标,但不改变向量的长度或角度。
TYPE_UNIFORM_SCALE
public static final int TYPE_UNIFORM_SCALE
统一缩放在 x 和 y 方向上以相同的量乘以向量的长度,而不改变向量之间的角度。此标志位与 TypeGeneralScale 标志互斥。
TYPE_GENERAL_SCALE
public static final int TYPE_GENERAL_SCALE
通用缩放在 x 和 y 方向上以不同的量乘以向量的长度,而不改变垂直向量之间的角度。此标志位与 TypeUniformScale 标志互斥。
TYPE_MASK_SCALE
public static final int TYPE_MASK_SCALE
此常量是用于任意比例标志位的位掩码。
TYPE_FLIP
public static final int TYPE_FLIP
此标志位指示由此对象定义的变换在某一轴上执行镜像翻转,除了其他标志位指示的转换外,还将通常的右手坐标系转换为左手坐标系。右手坐标系是指正 X 轴逆时针旋转以覆盖正 Y 轴,类似于右手拇指指向观察方向时手指的卷曲方向。左手坐标系是指正 X 轴顺时针旋转以覆盖正 Y 轴,类似于左手拇指指向观察方向时手指的卷曲方向。由于在适当的调整旋转下所有翻转角度相同,无法通过数学方法确定原始翻转或镜像变换的角度。注意:TypeFlip 是在 GENERAL_TRANSFORM 已公开流通后添加的,标志位因此无法再方便地重新编号,否则会在外部代码中引入二进制不兼容性。
TYPE_QUADRANT_ROTATION
public static final int TYPE_QUADRANT_ROTATION
此标志位指示由此对象定义的变换在执行其他标志位指示的转换之外,还进行以 90 度的整数倍为单位的象限旋转。旋转会以相同的量改变向量的角度,而不论向量的原始方向如何,也不改变向量的长度。此标志位与 TypeGeneralRotation 标志互斥。
TYPE_GENERAL_ROTATION
public static final int TYPE_GENERAL_ROTATION
此标志位表示此对象定义的变换在执行其他标志位指示的转换之外,还会进行任意角度的旋转。旋转会以相同的量改变向量的角度,无论向量的原始方向如何,且不改变向量的长度。此标志位与
TYPE_MASK_ROTATION
public static final int TYPE_MASK_ROTATION
此常量是用于任意旋转标志位的位掩码。
TYPE_GENERAL_TRANSFORM
public static final int TYPE_GENERAL_TRANSFORM
此常量表示此对象定义的变换对输入坐标执行任意转换。如果此变换可以由上述任意常量分类,则其类型将是常量 TypeIdentity,或是针对该变换执行的各种坐标转换的相应标志位的组合。
isEquals(Matrix a, Matrix b)
public static boolean isEquals(Matrix a, Matrix b)
确定两个矩阵是否相等。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| a | Matrix | 要比较的第一个矩阵。 |
| b | Matrix | 要比较的第二个矩阵。 |
Returns: boolean - 如果矩阵相等则为 True。
getM11()
public final float getM11()
获取矩阵第一行第一列的元素。表示沿 X 轴的缩放。
Returns: float - 矩阵第一行第一列的元素。
getM12()
public final float getM12()
获取矩阵第一行第二列的元素。表示沿 Y 轴的剪切。
Returns: float - 矩阵第一行第二列的元素。
getM21()
public final float getM21()
获取矩阵第二行第一列的元素。表示沿 X 轴的剪切。
Returns: float - 矩阵第二行第一列的元素。
getM22()
public final float getM22()
获取矩阵第二行第二列的元素。表示沿 Y 轴的缩放。
Returns: float - 矩阵第二行第二列的元素。
getM31()
public final float getM31()
获取矩阵第三行第一列的元素。表示沿 X 轴的平移。
Returns: float - 矩阵第三行第一列的元素。
getM32()
public final float getM32()
获取矩阵第三行第一列的元素。表示沿 Y 轴的平移。
Returns: float - 矩阵第三行第一列的元素。
toString()
public String toString()
返回表示此实例的字符串。
Returns: java.lang.String - 表示此实例的字符串。
getElements()
public final float[] getElements()
获取矩阵元素的副本。
Returns: float[] - 矩阵元素的副本。
transformPoints(PointF[] points)
public final void transformPoints(PointF[] points)
对指定的点数组应用此 Matrix 所表示的几何变换。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| points | PointF[] | 这些点。 |
scale(float scaleX, float scaleY, int order)
public final void scale(float scaleX, float scaleY, int order)
使用指定的顺序将指定的缩放向量(scaleX 和 scaleY)应用于此 Matrix。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| scaleX | float | X 方向的比例。 |
| scaleY | float | Y 方向的比例。 |
| order | int | 顺序。 |
scale(float sx, float sy)
public final void scale(float sx, float sy)
使用(默认)Prepend 顺序将指定的缩放向量(scaleX 和 scaleY)应用于此 Matrix。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| sx | float | 该 sx。该 sx。该 sx。 |
| sy | float | 该 sy。该 sy。该 sy。 |
translate(float offsetX, float offsetY, int order)
public final void translate(float offsetX, float offsetY, int order)
使用指定的顺序将指定的平移向量应用于此 Matrix。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| offsetX | float | 该 offset X。 |
| offsetY | float | 该 offset Y。 |
| order | int | 顺序。 |
translate(float tx, float ty)
public final void translate(float tx, float ty)
使用(默认)Prepend 顺序将指定的平移向量应用于此 Matrix。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| tx | float | 该 tx。该 tx。该 tx。 |
| ty | float | 该 ty。该 ty。该 ty。 |
multiply(Matrix tTx, int order)
public final void multiply(Matrix tTx, int order)
将此 Matrix 与 matrix 参数中指定的矩阵相乘,并按 order 参数中指定的顺序进行。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| tTx | Matrix | 该 tx。该 tx。该 tx。 |
| order | int | 该 order。该 order。该 order。 |
multiply(Matrix tTx)
public final void multiply(Matrix tTx)
使用(默认)Prepend 顺序将此 Matrix 与 matrix 参数中指定的矩阵相乘。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| tTx | Matrix | 用于相乘的 matrix。 |
rotate(float angle, int order)
public final void rotate(float angle, int order)
在指定的顺序下,对此 Matrix 绕原点(零 x 和 y 坐标)按 angle 参数指定的角度进行顺时针旋转。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| angle | float | 旋转角度。 |
| order | int | 该 matrix 顺序。 |
rotate(float angle)
public final void rotate(float angle)
在默认(Prepend)顺序下,对此 Matrix 绕原点(零 x 和 y 坐标)按 angle 参数指定的角度进行顺时针旋转。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| angle | float | 旋转角度。 |
rotateAt(float angle, PointF point, int order)
public final void rotateAt(float angle, PointF point, int order)
在指定的顺序下,对此 Matrix 绕指定点进行顺时针旋转。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| angle | float | 该角度。 |
| point | PointF | 该点。 |
| order | int | 顺序。 |
rotateAt(float angle, PointF point)
public final void rotateAt(float angle, PointF point)
在默认(Prepend)顺序下,对此 Matrix 绕指定点进行顺时针旋转。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| angle | float | 该角度。 |
| point | PointF | 该点。 |
reset()
public final void reset()
将此矩阵重置为单位矩阵的元素。
hashCode()
public int hashCode()
返回此实例的哈希码。
Returns: int - 此实例的哈希码,适用于哈希算法和哈希表等数据结构。
equals(Object obj)
public boolean equals(Object obj)
确定指定的 Object 是否等于此实例。
Parameters:
| 参数 | 类型 | 描述 |
|---|---|---|
| obj | java.lang.Object | 用于与此实例比较的 Object。 |
Returns:
布尔值 - 如果指定的 Object 等于此实例则为 true;否则为 false。
isIdentity()
public boolean isIdentity()
如果此 AffineTransform 是单位变换,则返回 true。
Returns:
布尔值 - 如果此 AffineTransform 是单位变换则为 true;否则为 false。