矩阵变换

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

公众号
微信公众号

编程狮公众号