矩阵变换

2024-01-23 13:10 更新

本模块提供矩阵变换功能,可对图形进行平移、旋转和缩放等。

说明

本模块首批接口从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

导入模块

  1. import matrix4 from '@ohos.matrix4'

matrix4.init

init(options: [number,number,number,number,number,number,number,number,number,number,number,number,number,number,number,number]): Matrix4Transit

Matrix的构造函数,可以通过传入的参数创建一个四阶矩阵,矩阵为列优先。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

[number,number,number,number,

number,number,number,number,

number,number,number,number,

number,number,number,number]

是

参数为长度为16(4*4)的number数组, 详情见四阶矩阵说明。

默认值:

[1, 0, 0, 0,

0, 1, 0, 0,

0, 0, 1, 0,

0, 0, 0, 1]

返回值:

类型

说明

Matrix4Transit

根据入参创建的四阶矩阵对象。

四阶矩阵说明:

参数名

类型

必填

说明

m00

number

是

x轴缩放值,单位矩阵默认为1。

m01

number

是

第2个值,xyz轴旋转会影响这个值。

m02

number

是

第3个值,xyz轴旋转会影响这个值。

m03

number

是

无实际意义。

m10

number

是

第5个值,xyz轴旋转会影响这个值。

m11

number

是

y轴缩放值,单位矩阵默认为1。

m12

number

是

第7个值,xyz轴旋转会影响这个值。

m13

number

是

无实际意义。

m20

number

是

第9个值,xyz轴旋转会影响这个值。

m21

number

是

第10个值,xyz轴旋转会影响这个值。

m22

number

是

z轴缩放值,单位矩阵默认为1。

m23

number

是

无实际意义。

m30

number

是

x轴平移值,单位px,单位矩阵默认为0。

m31

number

是

y轴平移值,单位px,单位矩阵默认为0。

m32

number

是

z轴平移值,单位px,单位矩阵默认为0。

m33

number

是

齐次坐标下生效,产生透视投影效果。

示例

  1. import matrix4 from '@ohos.matrix4'
  2. // 创建一个四阶矩阵
  3. let matrix = matrix4.init([1.0, 0.0, 0.0, 0.0,
  4. 0.0, 1.0, 0.0, 0.0,
  5. 0.0, 0.0, 1.0, 0.0,
  6. 0.0, 0.0, 0.0, 1.0])
  7. @Entry
  8. @Component
  9. struct Tests {
  10. build() {
  11. Column() {
  12. Image($r("app.media.zh"))
  13. .width("40%")
  14. .height(100)
  15. .transform(matrix)
  16. }
  17. }
  18. }

matrix4.identity

identity(): Matrix4Transit

Matrix的初始化函数,可以返回一个单位矩阵对象。

系统能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

类型

说明

Matrix4Transit

单位矩阵对象。

示例:

  1. // matrix1 和 matrix2 效果一致
  2. import matrix4 from '@ohos.matrix4'
  3. let matrix1 = matrix4.init([1.0, 0.0, 0.0, 0.0,
  4. 0.0, 1.0, 0.0, 0.0,
  5. 0.0, 0.0, 1.0, 0.0,
  6. 0.0, 0.0, 0.0, 1.0])
  7. let matrix2 = matrix4.identity()
  8. @Entry
  9. @Component
  10. struct Tests {
  11. build() {
  12. Column() {
  13. Image($r("app.media.zh"))
  14. .width("40%")
  15. .height(100)
  16. .transform(matrix1)
  17. Image($r("app.media.zh"))
  18. .width("40%")
  19. .height(100)
  20. .margin({ top: 150 })
  21. .transform(matrix2)
  22. }
  23. }
  24. }

matrix4.copy

copy(): Matrix4Transit

Matrix的拷贝函数,可以拷贝一份当前的矩阵对象。

系统能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

类型

说明

Matrix4Transit

当前矩阵的拷贝对象。

示例:

  1. // xxx.ets
  2. import matrix4 from '@ohos.matrix4'
  3. @Entry
  4. @Component
  5. struct Test {
  6. private matrix1 = matrix4.identity().translate({ x: 100 })
  7. // 对matrix1的拷贝矩阵做scale操作,不影响到matrix1
  8. private matrix2 = this.matrix1.copy().scale({ x: 2 })
  9. build() {
  10. Column() {
  11. Image($r("app.media.bg1"))
  12. .width("40%")
  13. .height(100)
  14. .transform(this.matrix1)
  15. Image($r("app.media.bg2"))
  16. .width("40%")
  17. .height(100)
  18. .margin({ top: 50 })
  19. .transform(this.matrix2)
  20. }
  21. }
  22. }

matrix4.invert

invert(): Matrix4Transit

Matrix的逆函数,可以返回一个当前矩阵对象的逆矩阵,即效果正好相反。

系统能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

类型

说明

Matrix4Transit

当前矩阵的逆矩阵对象。

matrix4.combine

combine(options: Matrix4Transit): Matrix4Transit

Matrix的叠加函数,可以将两个矩阵的效果叠加起来生成一个新的矩阵对象。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

Matrix4Transit

是

待叠加的矩阵对象。

返回值:

类型

说明

Matrix4Transit

叠加后的矩阵对象。

matrix4.translate

translate(options: TranslateOption): Matrix4Transit

Matrix的平移函数,可以为当前矩阵增加x轴/y轴/z轴平移效果。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

TranslateOption

是

设置平移参数。

返回值:

类型

说明

Matrix4Transit

平移后的矩阵对象。

matrix4.scale

scale(options: ScaleOption): Matrix4Transit

Matrix的缩放函数,可以为当前矩阵增加x轴/y轴/z轴缩放效果。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

ScaleOption

是

设置缩放参数。

返回值:

类型

说明

Matrix4Transit

缩放后的矩阵对象。

matrix4.rotate

rotate(options: RotateOption): Matrix4Transit

Matrix的旋转函数,可以为当前矩阵增加x轴/y轴/z轴旋转效果。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

RotateOption

是

设置旋转参数。

返回值:

类型

说明

Matrix4Transit

旋转后的矩阵对象。

matrix4.transformPoint

transformPoint(options: [number, number]): [number, number]

Matrix的坐标点转换函数,可以将当前的变换效果作用到一个坐标点上。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

[number, number]

是

需要转换的坐标点。

返回值:

类型

说明

[number, number]

返回矩阵变换后的Point对象。

Matrix4Transit

combine

combine(options: Matrix4Transit): Matrix4Transit

Matrix的叠加函数,可以将两个矩阵的效果叠加起来生成一个新的矩阵对象。会改变调用该函数的原始矩阵。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

Matrix4Transit

是

待叠加的矩阵对象。

返回值:

类型

说明

Matrix4Transit

矩阵叠加后的对象。

示例:

  1. // xxx.ets
  2. import matrix4 from '@ohos.matrix4'
  3. @Entry
  4. @Component
  5. struct Test {
  6. private matrix1 = matrix4.identity().translate({ x: 200 })
  7. private matrix2 = matrix4.identity().scale({ x: 2 })
  8. build() {
  9. Column() {
  10. // 矩阵变换前
  11. Image($r("app.media.icon"))
  12. .width("40%")
  13. .height(100)
  14. .margin({ top: 50 })
  15. // 先平移x轴200px,再缩放两倍x轴,得到矩阵变换后的效果图
  16. Image($r("app.media.icon"))
  17. .transform(this.matrix1.copy().combine(this.matrix2))
  18. .width("40%")
  19. .height(100)
  20. .margin({ top: 50 })
  21. }
  22. }
  23. }

invert

invert(): Matrix4Transit

Matrix的逆函数,可以返回一个当前矩阵对象的逆矩阵,即效果正好相反。会改变调用该函数的原始矩阵。

系统能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

类型

说明

Matrix4Transit

当前矩阵的逆矩阵对象。

示例:

  1. import matrix4 from '@ohos.matrix4'
  2. // matrix1(宽放大2倍) 和 matrix2(宽缩小2倍) 效果相反
  3. let matrix1 = matrix4.identity().scale({ x: 2 })
  4. let matrix2 = matrix1.copy().invert()
  5. @Entry
  6. @Component
  7. struct Tests {
  8. build() {
  9. Column() {
  10. Image($r("app.media.zh"))
  11. .width(200)
  12. .height(100)
  13. .transform(matrix1)
  14. .margin({ top: 100 })
  15. Image($r("app.media.zh"))
  16. .width(200)
  17. .height(100)
  18. .margin({ top: 150 })
  19. .transform(matrix2)
  20. }
  21. }
  22. }

translate

translate(options: TranslateOption): Matrix4Transit

Matrix的平移函数,可以为当前矩阵增加x轴/y轴/z轴平移效果。会改变调用该函数的原始矩阵。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

TranslateOption

是

设置平移参数。

返回值:

类型

说明

Matrix4Transit

平移效果后的矩阵对象。

示例:

  1. // xxx.ets
  2. import matrix4 from '@ohos.matrix4'
  3. @Entry
  4. @Component
  5. struct Test {
  6. private matrix1 = matrix4.identity().translate({ x: 100, y: 200, z: 30 })
  7. build() {
  8. Column() {
  9. Image($r("app.media.bg1")).transform(this.matrix1)
  10. .width("40%")
  11. .height(100)
  12. }
  13. }
  14. }

scale

scale(options: ScaleOption): Matrix4Transit

Matrix的缩放函数,可以为当前矩阵增加x轴/y轴/z轴缩放效果。会改变调用该函数的原始矩阵。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

ScaleOption

是

设置缩放参数。

返回值:

类型

说明

Matrix4Transit

缩放效果后的矩阵对象。

示例:

  1. // xxx.ets
  2. import matrix4 from '@ohos.matrix4'
  3. @Entry
  4. @Component
  5. struct Test {
  6. private matrix1 = matrix4.identity().scale({ x:2, y:3, z:4, centerX:50, centerY:50 })
  7. build() {
  8. Column() {
  9. Image($r("app.media.bg1")).transform(this.matrix1)
  10. .width("40%")
  11. .height(100)
  12. }
  13. }
  14. }

rotate

rotate(options: RotateOption): Matrix4Transit

Matrix的旋转函数,可以为当前矩阵增加x轴/y轴/z轴旋转效果。会改变调用该函数的原始矩阵。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

RotateOption

是

设置旋转参数。

返回值:

类型

说明

Matrix4Transit

旋转效果后的矩阵对象。

示例:

  1. // xxx.ets
  2. import matrix4 from '@ohos.matrix4'
  3. @Entry
  4. @Component
  5. struct Test {
  6. private matrix1 = matrix4.identity().rotate({ x: 1, y: 1, z: 2, angle: 30 })
  7. build() {
  8. Column() {
  9. Image($r("app.media.bg1")).transform(this.matrix1)
  10. .width("40%")
  11. .height(100)
  12. }.width("100%").margin({ top: 50 })
  13. }
  14. }

transformPoint

transformPoint(options: [number, number]): [number, number]

Matrix的坐标点转换函数,可以将当前的变换效果作用到一个坐标点上。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

option

[number, number]

是

需要转换的坐标点。

返回值:

类型

说明

[number, number]

返回矩阵变换后的Point对象。

示例:

  1. // xxx.ets
  2. import matrix4 from '@ohos.matrix4'
  3. @Entry
  4. @Component
  5. struct Test {
  6. private originPoint: number[] = [50, 50]
  7. private matrix_1 = matrix4.identity().translate({ x: 150, y: -50 })
  8. private transformPoint = this.matrix_1.transformPoint([this.originPoint[0], this.originPoint[1]])
  9. private matrix_2 = matrix4.identity().translate({ x: this.transformPoint[0], y: this.transformPoint[1] })
  10. build() {
  11. Column() {
  12. Text(`矩阵变换前的坐标:[${this.originPoint}]`)
  13. .fontSize(16)
  14. Image($r("app.media.image"))
  15. .width('600px')
  16. .height('300px')
  17. .margin({ top: 50 })
  18. Text(`矩阵变换后的坐标:[${this.transformPoint}]`)
  19. .fontSize(16)
  20. .margin({ top: 100 })
  21. Image($r("app.media.image"))
  22. .width('600px')
  23. .height('300px')
  24. .margin({ top: 50 })
  25. .transform(this.matrix_2)
  26. }.width("100%").padding(50)
  27. }
  28. }

TranslateOption

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称

类型

必填

说明

x

number

否

x轴的平移距离,单位px。

默认值:0

取值范围 (-∞, +∞)

y

number

否

y轴的平移距离,单位px。

默认值:0

取值范围 (-∞, +∞)

z

number

否

z轴的平移距离,单位px。

默认值:0

取值范围 (-∞, +∞)

ScaleOption

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称

类型

必填

说明

x

number

否

x轴的缩放倍数。x>1时以x轴方向放大,0<x<1时以x轴方向缩小,x<0时沿x轴反向并缩放。

默认值:1

取值范围 (-∞, +∞)

y

number

否

y轴的缩放倍数。y>1时以y轴方向放大,0<y<1时以y轴方向缩小,y<0时沿y轴反向并缩放。

默认值:1

取值范围 (-∞, +∞)

z

number

否

z轴的缩放倍数。z>1时以z轴方向放大,0<z<1时以z轴方向缩小,z<0时沿z轴反向并缩放。

默认值:1

取值范围 (-∞, +∞)

centerX

number

否

变换中心点x轴坐标。

默认值:0。

取值范围 (-∞, +∞)

centerY

number

否

变换中心点y轴坐标。

默认值:0。

取值范围 (-∞, +∞)

RotateOption

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称

类型

必填

说明

x

number

否

旋转轴向量x坐标。

默认值:0。

取值范围 (-∞, +∞)

y

number

否

旋转轴向量y坐标。

默认值:0。

取值范围 (-∞, +∞)

z

number

否

旋转轴向量z坐标。

默认值:0。

取值范围 (-∞, +∞)。

说明: 旋转向量中x、y、z至少有一个不为0才有意义。

angle

number

否

旋转角度。

默认值:0

centerX

number

否

变换中心点x轴坐标。

默认值:0

centerY

number

否

变换中心点y轴坐标。

默认值:0

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号