矩陣變換

2024-01-23 13:10 更新

本模塊提供矩陣變換功能,可對圖形進(jìn)行平移、旋轉(zhuǎn)和縮放等。

說明

本模塊首批接口從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

導(dǎo)入模塊

  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的構(gòu)造函數(shù),可以通過傳入的參數(shù)創(chuàng)建一個(gè)四階矩陣,矩陣為列優(yōu)先。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

[number,number,number,number,

number,number,number,number,

number,number,number,number,

number,number,number,number]

參數(shù)為長度為16(4*4)的number數(shù)組, 詳情見四階矩陣說明。

默認(rèn)值:

[1, 0, 0, 0,

0, 1, 0, 0,

0, 0, 1, 0,

0, 0, 0, 1]

返回值:

類型

說明

Matrix4Transit

根據(jù)入?yún)?chuàng)建的四階矩陣對象。

四階矩陣說明:

參數(shù)名

類型

必填

說明

m00

number

x軸縮放值,單位矩陣默認(rèn)為1。

m01

number

第2個(gè)值,xyz軸旋轉(zhuǎn)會(huì)影響這個(gè)值。

m02

number

第3個(gè)值,xyz軸旋轉(zhuǎn)會(huì)影響這個(gè)值。

m03

number

無實(shí)際意義。

m10

number

第5個(gè)值,xyz軸旋轉(zhuǎn)會(huì)影響這個(gè)值。

m11

number

y軸縮放值,單位矩陣默認(rèn)為1。

m12

number

第7個(gè)值,xyz軸旋轉(zhuǎn)會(huì)影響這個(gè)值。

m13

number

無實(shí)際意義。

m20

number

第9個(gè)值,xyz軸旋轉(zhuǎn)會(huì)影響這個(gè)值。

m21

number

第10個(gè)值,xyz軸旋轉(zhuǎn)會(huì)影響這個(gè)值。

m22

number

z軸縮放值,單位矩陣默認(rèn)為1。

m23

number

無實(shí)際意義。

m30

number

x軸平移值,單位px,單位矩陣默認(rèn)為0。

m31

number

y軸平移值,單位px,單位矩陣默認(rèn)為0。

m32

number

z軸平移值,單位px,單位矩陣默認(rèn)為0。

m33

number

齊次坐標(biāo)下生效,產(chǎn)生透視投影效果。

示例

  1. import matrix4 from '@ohos.matrix4'
  2. // 創(chuàng)建一個(gè)四階矩陣
  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的初始化函數(shù),可以返回一個(gè)單位矩陣對象。

系統(tǒng)能力: 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的拷貝函數(shù),可以拷貝一份當(dāng)前的矩陣對象。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

類型

說明

Matrix4Transit

當(dāng)前矩陣的拷貝對象。

示例:

  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的逆函數(shù),可以返回一個(gè)當(dāng)前矩陣對象的逆矩陣,即效果正好相反。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

類型

說明

Matrix4Transit

當(dāng)前矩陣的逆矩陣對象。

matrix4.combine

combine(options: Matrix4Transit): Matrix4Transit

Matrix的疊加函數(shù),可以將兩個(gè)矩陣的效果疊加起來生成一個(gè)新的矩陣對象。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

Matrix4Transit

待疊加的矩陣對象。

返回值:

類型

說明

Matrix4Transit

疊加后的矩陣對象。

matrix4.translate

translate(options: TranslateOption): Matrix4Transit

Matrix的平移函數(shù),可以為當(dāng)前矩陣增加x軸/y軸/z軸平移效果。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

TranslateOption

設(shè)置平移參數(shù)。

返回值:

類型

說明

Matrix4Transit

平移后的矩陣對象。

matrix4.scale

scale(options: ScaleOption): Matrix4Transit

Matrix的縮放函數(shù),可以為當(dāng)前矩陣增加x軸/y軸/z軸縮放效果。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

ScaleOption

設(shè)置縮放參數(shù)。

返回值:

類型

說明

Matrix4Transit

縮放后的矩陣對象。

matrix4.rotate

rotate(options: RotateOption): Matrix4Transit

Matrix的旋轉(zhuǎn)函數(shù),可以為當(dāng)前矩陣增加x軸/y軸/z軸旋轉(zhuǎn)效果。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

RotateOption

設(shè)置旋轉(zhuǎn)參數(shù)。

返回值:

類型

說明

Matrix4Transit

旋轉(zhuǎn)后的矩陣對象。

matrix4.transformPoint

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

Matrix的坐標(biāo)點(diǎn)轉(zhuǎn)換函數(shù),可以將當(dāng)前的變換效果作用到一個(gè)坐標(biāo)點(diǎn)上。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

[number, number]

需要轉(zhuǎn)換的坐標(biāo)點(diǎn)。

返回值:

類型

說明

[number, number]

返回矩陣變換后的Point對象。

Matrix4Transit

combine

combine(options: Matrix4Transit): Matrix4Transit

Matrix的疊加函數(shù),可以將兩個(gè)矩陣的效果疊加起來生成一個(gè)新的矩陣對象。會(huì)改變調(diào)用該函數(shù)的原始矩陣。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

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的逆函數(shù),可以返回一個(gè)當(dāng)前矩陣對象的逆矩陣,即效果正好相反。會(huì)改變調(diào)用該函數(shù)的原始矩陣。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

類型

說明

Matrix4Transit

當(dāng)前矩陣的逆矩陣對象。

示例:

  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的平移函數(shù),可以為當(dāng)前矩陣增加x軸/y軸/z軸平移效果。會(huì)改變調(diào)用該函數(shù)的原始矩陣。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

TranslateOption

設(shè)置平移參數(shù)。

返回值:

類型

說明

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的縮放函數(shù),可以為當(dāng)前矩陣增加x軸/y軸/z軸縮放效果。會(huì)改變調(diào)用該函數(shù)的原始矩陣。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

ScaleOption

設(shè)置縮放參數(shù)。

返回值:

類型

說明

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的旋轉(zhuǎn)函數(shù),可以為當(dāng)前矩陣增加x軸/y軸/z軸旋轉(zhuǎn)效果。會(huì)改變調(diào)用該函數(shù)的原始矩陣。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

RotateOption

設(shè)置旋轉(zhuǎn)參數(shù)。

返回值:

類型

說明

Matrix4Transit

旋轉(zhuǎn)效果后的矩陣對象。

示例:

  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的坐標(biāo)點(diǎn)轉(zhuǎn)換函數(shù),可以將當(dāng)前的變換效果作用到一個(gè)坐標(biāo)點(diǎn)上。

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

參數(shù):

參數(shù)名

類型

必填

說明

option

[number, number]

需要轉(zhuǎn)換的坐標(biāo)點(diǎn)。

返回值:

類型

說明

[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(`矩陣變換前的坐標(biāo):[${this.originPoint}]`)
  13. .fontSize(16)
  14. Image($r("app.media.image"))
  15. .width('600px')
  16. .height('300px')
  17. .margin({ top: 50 })
  18. Text(`矩陣變換后的坐標(biāo):[${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

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

名稱

類型

必填

說明

x

number

x軸的平移距離,單位px。

默認(rèn)值:0

取值范圍 (-∞, +∞)

y

number

y軸的平移距離,單位px。

默認(rèn)值:0

取值范圍 (-∞, +∞)

z

number

z軸的平移距離,單位px。

默認(rèn)值:0

取值范圍 (-∞, +∞)

ScaleOption

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

名稱

類型

必填

說明

x

number

x軸的縮放倍數(shù)。x>1時(shí)以x軸方向放大,0<x<1時(shí)以x軸方向縮小,x<0時(shí)沿x軸反向并縮放。

默認(rèn)值:1

取值范圍 (-∞, +∞)

y

number

y軸的縮放倍數(shù)。y>1時(shí)以y軸方向放大,0<y<1時(shí)以y軸方向縮小,y<0時(shí)沿y軸反向并縮放。

默認(rèn)值:1

取值范圍 (-∞, +∞)

z

number

z軸的縮放倍數(shù)。z>1時(shí)以z軸方向放大,0<z<1時(shí)以z軸方向縮小,z<0時(shí)沿z軸反向并縮放。

默認(rèn)值:1

取值范圍 (-∞, +∞)

centerX

number

變換中心點(diǎn)x軸坐標(biāo)。

默認(rèn)值:0。

取值范圍 (-∞, +∞)

centerY

number

變換中心點(diǎn)y軸坐標(biāo)。

默認(rèn)值:0。

取值范圍 (-∞, +∞)

RotateOption

系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full

名稱

類型

必填

說明

x

number

旋轉(zhuǎn)軸向量x坐標(biāo)。

默認(rèn)值:0。

取值范圍 (-∞, +∞)

y

number

旋轉(zhuǎn)軸向量y坐標(biāo)。

默認(rèn)值:0。

取值范圍 (-∞, +∞)

z

number

旋轉(zhuǎn)軸向量z坐標(biāo)。

默認(rèn)值:0。

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

說明: 旋轉(zhuǎn)向量中x、y、z至少有一個(gè)不為0才有意義。

angle

number

旋轉(zhuǎn)角度。

默認(rèn)值:0

centerX

number

變換中心點(diǎn)x軸坐標(biāo)。

默認(rèn)值:0

centerY

number

變換中心點(diǎn)y軸坐標(biāo)。

默認(rèn)值:0

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號