• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (Matrix)
2
3<!--Kit: ArkGraphics 2D-->
4<!--Subsystem: Graphics-->
5<!--Owner: @hangmengxin-->
6<!--Designer: @wangyanglan-->
7<!--Tester: @nobuggers-->
8<!--Adviser: @ge-yafang-->
9
10> **说明:**
11>
12> - 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
13>
14> - 本Class首批接口从API version 12开始支持。
15>
16> - 本模块使用屏幕物理像素单位px。
17>
18> - 本模块为单线程模型策略,需要调用方自行管理线程安全和上下文状态的切换。
19
20矩阵对象。
21
22表示为3*3的矩阵,如下图所示:
23
24![matrix_3x3](figures/matrix3X3.PNG)
25
26矩阵中的元素从左到右,从上到下分别表示水平缩放系数、水平倾斜系数、水平位移系数、垂直倾斜系数、垂直缩放系数、垂直位移系数、X轴透视系数、Y轴透视系数、透视缩放系数。
27设(x<sub>1</sub>, y<sub>1</sub>)为源坐标点,(x<sub>2</sub>, y<sub>2</sub>)为源坐标点通过矩阵变换后的坐标点,则两个坐标点的关系如下:
28
29![matrix_xy](figures/matrix_xy.PNG)
30
31## 导入模块
32
33```ts
34import { drawing } from '@kit.ArkGraphics2D';
35```
36
37## constructor<sup>12+</sup>
38
39constructor()
40
41构造一个矩阵对象。
42
43**系统能力:** SystemCapability.Graphics.Drawing
44
45**示例:**
46
47```ts
48import { drawing } from '@kit.ArkGraphics2D';
49
50let matrix = new drawing.Matrix();
51```
52
53## constructor<sup>20+</sup>
54
55constructor(matrix: Matrix)
56
57拷贝一个矩阵。
58
59**系统能力:** SystemCapability.Graphics.Drawing
60
61**参数:**
62
63| 参数名         | 类型                                       | 必填   | 说明                  |
64| ----------- | ---------------------------------------- | ---- | ------------------- |
65| matrix      | [Matrix](arkts-apis-graphics-drawing-Matrix.md)                  | 是    | 被拷贝的矩阵。|
66
67**示例:**
68
69```ts
70import { drawing } from '@kit.ArkGraphics2D';
71
72let matrix = new drawing.Matrix();
73let matrix2 = new drawing.Matrix(matrix);
74```
75
76## isAffine<sup>20+</sup>
77
78isAffine(): boolean
79
80判断当前矩阵是否为仿射矩阵。仿射矩阵是一种包括平移、旋转、缩放等变换的矩阵。
81
82**系统能力:** SystemCapability.Graphics.Drawing
83
84**返回值:**
85
86| 类型                        | 说明                  |
87| --------------------------- | -------------------- |
88| boolean | 返回当前矩阵是否为仿射矩阵。true表示是仿射矩阵,false表示不是仿射矩阵。 |
89
90**示例:**
91
92```ts
93import { drawing } from '@kit.ArkGraphics2D';
94
95let matrix = new drawing.Matrix();
96matrix.setMatrix([1, 0.5, 1, 0.5, 1, 1, 1, 1, 1]);
97let isAff = matrix.isAffine();
98console.info('isAff :', isAff);
99```
100
101## rectStaysRect<sup>20+</sup>
102
103rectStaysRect(): boolean
104
105判断经过该矩阵映射后的矩形的形状是否仍为矩形。
106
107**系统能力:** SystemCapability.Graphics.Drawing
108
109**返回值:**
110
111| 类型                        | 说明                  |
112| --------------------------- | -------------------- |
113| boolean | 返回经过该矩阵映射后的矩形的形状是否仍为矩形。true表示仍是矩形,false表示不是矩形。 |
114
115**示例:**
116
117```ts
118import { drawing } from '@kit.ArkGraphics2D';
119
120let matrix = new drawing.Matrix();
121matrix.setMatrix([1, 0.5, 1, 0.5, 1, 1, 1, 1, 1]);
122let matrix2 = new drawing.Matrix(matrix);
123let isRect = matrix2.rectStaysRect();
124console.info('isRect :', isRect);
125```
126
127## setSkew<sup>20+</sup>
128
129setSkew(kx: number, ky: number, px: number, py: number): void
130
131设置矩阵的倾斜系数。
132
133**系统能力:** SystemCapability.Graphics.Drawing
134
135**参数:**
136
137| 参数名         | 类型                                       | 必填   | 说明                       |
138| ----------- | ---------------------------------------- | ---- | -------------------             |
139| kx          | number                  | 是    | x轴上的倾斜量,该参数为浮点数。正值会使绘制沿y轴增量方向向右倾斜;负值会使绘制沿y轴增量方向向左倾斜。        |
140| ky          | number                  | 是    | y轴上的倾斜量,该参数为浮点数。正值会使绘制沿x轴增量方向向下倾斜;负值会使绘制沿x轴增量方向向上倾斜。        |
141| px          | number                  | 是    | 倾斜中心点的x轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点右侧,负数表示位于坐标原点左侧。     |
142| py          | number                  | 是    | 倾斜中心点的y轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点下侧,负数表示位于坐标原点上侧。     |
143
144**示例:**
145
146```ts
147import { drawing } from '@kit.ArkGraphics2D';
148
149let matrix = new drawing.Matrix();
150matrix.setMatrix([1, 0.5, 1, 0.5, 1, 1, 1, 1, 1]);
151matrix.setSkew(2, 0.5, 0.5, 2);
152```
153
154## setSinCos<sup>20+</sup>
155
156setSinCos(sinValue: number, cosValue: number, px: number, py: number): void
157
158设置矩阵,使其围绕旋转中心(px, py)以指定的正弦值和余弦值旋转。
159
160**系统能力:** SystemCapability.Graphics.Drawing
161
162**参数:**
163
164| 参数名         | 类型                                       | 必填   | 说明            |
165| ----------- | ---------------------------------------- | ---- | ------------------- |
166| sinValue          | number                  | 是    | 旋转角度的正弦值。仅当正弦值和余弦值的平方和为1时,为旋转变换,否则矩阵可能包含平移缩放等其他变换。          |
167| cosValue          | number                  | 是    | 旋转角度的余弦值。仅当正弦值和余弦值的平方和为1时,为旋转变换,否则矩阵可能包含平移缩放等其他变换。            |
168| px          | number                  | 是    | 旋转中心的x轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点右侧,负数表示位于坐标原点左侧。     |
169| py          | number                  | 是    | 旋转中心的y轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点下侧,负数表示位于坐标原点上侧。    |
170
171**示例:**
172
173```ts
174import { drawing } from '@kit.ArkGraphics2D';
175
176let matrix = new drawing.Matrix();
177matrix.setMatrix([1, 0.5, 1, 0.5, 1, 1, 1, 1, 1]);
178matrix.setSinCos(0, 1, 1, 0);
179```
180## setRotation<sup>12+</sup>
181
182setRotation(degree: number, px: number, py: number): void
183
184设置矩阵为单位矩阵,并围绕位于(px, py)的旋转轴点进行旋转。
185
186**系统能力:** SystemCapability.Graphics.Drawing
187
188**参数:**
189
190| 参数名         | 类型                                       | 必填   | 说明                  |
191| ----------- | ---------------------------------------- | ---- | ------------------- |
192| degree      | number                  | 是    | 角度,单位为度。正数表示顺时针旋转,负数表示逆时针旋转,该参数为浮点数。|
193| px          | number                  | 是    | 旋转轴点的横坐标,该参数为浮点数。     |
194| py          | number                  | 是    | 旋转轴点的纵坐标,该参数为浮点数。     |
195
196**错误码:**
197
198以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
199
200| 错误码ID | 错误信息 |
201| ------- | --------------------------------------------|
202| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
203
204**示例:**
205
206```ts
207import { drawing } from '@kit.ArkGraphics2D';
208
209let matrix = new drawing.Matrix();
210matrix.setRotation(90, 100, 100);
211```
212
213## setScale<sup>12+</sup>
214
215setScale(sx: number, sy: number, px: number, py: number): void
216
217设置矩阵为单位矩阵围绕位于(px, py)的中心点,以sx和sy进行缩放后的结果。
218
219**系统能力:** SystemCapability.Graphics.Drawing
220
221**参数:**
222
223| 参数名         | 类型                                       | 必填   | 说明                  |
224| ----------- | ---------------------------------------- | ---- | ------------------- |
225| sx          | number                  | 是    | x轴方向缩放系数,为负数时可看作是先关于y = px作镜像翻转后再进行缩放,该参数为浮点数。     |
226| sy          | number                  | 是    | y轴方向缩放系数,为负数时可看作是先关于x = py作镜像翻转后再进行缩放,该参数为浮点数。     |
227| px          | number                  | 是    |  缩放中心点的横坐标,该参数为浮点数。      |
228| py          | number                  | 是    |  缩放中心点的纵坐标,该参数为浮点数。      |
229
230**错误码:**
231
232以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
233
234| 错误码ID | 错误信息 |
235| ------- | --------------------------------------------|
236| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
237
238**示例:**
239
240```ts
241import { drawing } from '@kit.ArkGraphics2D';
242
243let matrix = new drawing.Matrix();
244matrix.setScale(100, 100, 150, 150);
245```
246
247## setTranslation<sup>12+</sup>
248
249setTranslation(dx: number, dy: number): void
250
251设置矩阵为单位矩阵平移(dx, dy)后的结果。
252
253**系统能力:** SystemCapability.Graphics.Drawing
254
255**参数:**
256
257| 参数名         | 类型                                       | 必填   | 说明                  |
258| ----------- | ---------------------------------------- | ---- | ------------------- |
259| dx          | number                  | 是    | x轴方向平移距离,正数表示往x轴正方向平移,负数表示往x轴负方向平移,该参数为浮点数。     |
260| dy          | number                  | 是    | y轴方向平移距离,正数表示往y轴正方向平移,负数表示往y轴负方向平移,该参数为浮点数。     |
261
262**错误码:**
263
264以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
265
266| 错误码ID | 错误信息 |
267| ------- | --------------------------------------------|
268| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
269
270**示例:**
271
272```ts
273import { drawing } from '@kit.ArkGraphics2D';
274
275let matrix = new drawing.Matrix();
276matrix.setTranslation(100, 100);
277```
278
279## setMatrix<sup>12+</sup>
280
281setMatrix(values: Array\<number>): void
282
283设置矩阵对象的各项参数。
284
285**系统能力:** SystemCapability.Graphics.Drawing
286
287**参数:**
288
289| 参数名 | 类型                                                 | 必填 | 说明             |
290| ------ | ---------------------------------------------------- | ---- | ---------------- |
291| values  | Array\<number> | 是   | 长度为9的浮点数组,表示矩阵对象参数。数组中的值按下标从小,到大分别表示水平缩放系数、水平倾斜系数、水平位移系数、垂直倾斜系数、垂直缩放系数、垂直位移系数、X轴透视系数、Y轴透视系数、透视缩放系数。 |
292
293**错误码:**
294
295以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
296
297| 错误码ID | 错误信息 |
298| ------- | --------------------------------------------|
299| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types; 3. Parameter verification failed. |
300
301**示例:**
302
303```ts
304import { drawing } from '@kit.ArkGraphics2D';
305
306let matrix = new drawing.Matrix();
307let value : Array<number> = [2, 2, 2, 2, 2, 2, 2, 2, 2];
308matrix.setMatrix(value);
309```
310
311## preConcat<sup>12+</sup>
312
313preConcat(matrix: Matrix): void
314
315将当前矩阵设置为当前矩阵左乘matrix的结果。
316
317**系统能力:** SystemCapability.Graphics.Drawing
318
319**参数:**
320
321| 参数名 | 类型                                                 | 必填 | 说明             |
322| ------ | ---------------------------------------------------- | ---- | ---------------- |
323| matrix  | [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 表示矩阵对象,位于乘法表达式右侧。 |
324
325**错误码:**
326
327以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
328
329| 错误码ID | 错误信息 |
330| ------- | --------------------------------------------|
331| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
332
333**示例:**
334
335```ts
336import { drawing } from '@kit.ArkGraphics2D';
337
338let matrix1 = new drawing.Matrix();
339matrix1.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
340let matrix2 = new drawing.Matrix();
341matrix2.setMatrix([-2, 1, 3, 1, 0, -1, 3, -1, 2]);
342matrix1.preConcat(matrix2);
343```
344
345## setMatrix<sup>20+</sup>
346
347setMatrix(matrix: Array\<number\> \| Matrix): void
348
349用一个矩阵对当前矩阵进行更新。
350
351**系统能力:** SystemCapability.Graphics.Drawing
352
353**参数:**
354
355| 参数名 | 类型                                                 | 必填 | 说明             |
356| ------ | ---------------------------------------------------- | ---- | ---------------- |
357| matrix | Array\<number\> \| [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 用于更新的数组或矩阵。 |
358
359**示例:**
360
361```ts
362import { drawing } from '@kit.ArkGraphics2D';
363
364let matrix1 = new drawing.Matrix();
365matrix1.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
366let matrix2 = new drawing.Matrix();
367matrix1.setMatrix(matrix2);
368```
369
370## setConcat<sup>20+</sup>
371
372setConcat(matrixA: Matrix, matrixB: Matrix): void
373
374用两个矩阵的乘积更新当前矩阵。
375
376**系统能力:** SystemCapability.Graphics.Drawing
377
378**参数:**
379
380| 参数名 | 类型                                                 | 必填 | 说明             |
381| ------ | ---------------------------------------------------- | ---- | ---------------- |
382| matrixA  | [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 用于运算的矩阵A。 |
383| matrixB  | [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 用于运算的矩阵B。 |
384
385**示例:**
386
387```ts
388import { drawing } from '@kit.ArkGraphics2D';
389
390let matrix1 = new drawing.Matrix();
391matrix1.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
392let matrix2 = new drawing.Matrix();
393matrix2.setMatrix([-2, 1, 3, 1, 0, -1, 3, -1, 2]);
394matrix1.setConcat(matrix2, matrix1);
395```
396
397## postConcat<sup>20+</sup>
398
399postConcat(matrix: Matrix): void
400
401用当前矩阵右乘一个矩阵。
402
403**系统能力:** SystemCapability.Graphics.Drawing
404
405**参数:**
406
407| 参数名 | 类型                                                 | 必填 | 说明             |
408| ------ | ---------------------------------------------------- | ---- | ---------------- |
409| matrix | [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 用于运算的矩阵。 |
410
411**示例:**
412
413```ts
414import { drawing } from '@kit.ArkGraphics2D';
415
416let matrix = new drawing.Matrix();
417if (matrix.isIdentity()) {
418  console.info("matrix is identity.");
419} else {
420  console.info("matrix is not identity.");
421}
422let matrix1 = new drawing.Matrix();
423matrix1.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
424let matrix2 = new drawing.Matrix();
425matrix2.setMatrix([-2, 1, 3, 1, 0, -1, 3, -1, 2]);
426matrix1.postConcat(matrix2);
427```
428
429## isEqual<sup>12+</sup>
430
431isEqual(matrix: Matrix): Boolean
432
433判断两个矩阵是否相等。
434
435**系统能力:** SystemCapability.Graphics.Drawing
436
437**参数:**
438
439| 参数名 | 类型                                                 | 必填 | 说明             |
440| ------ | ---------------------------------------------------- | ---- | ---------------- |
441| matrix  | [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 另一个矩阵。 |
442
443**返回值:**
444
445| 类型                        | 说明                  |
446| --------------------------- | -------------------- |
447| Boolean | 返回两个矩阵的比较结果。true表示两个矩阵相等,false表示两个矩阵不相等。 |
448
449**错误码:**
450
451以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
452
453| 错误码ID | 错误信息 |
454| ------- | --------------------------------------------|
455| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
456
457**示例:**
458
459```ts
460import { drawing } from '@kit.ArkGraphics2D';
461
462let matrix1 = new drawing.Matrix();
463matrix1.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
464let matrix2 = new drawing.Matrix();
465matrix2.setMatrix([-2, 1, 3, 1, 0, -1, 3, -1, 2]);
466if (matrix1.isEqual(matrix2)) {
467  console.info("matrix1 and matrix2 are equal.");
468} else {
469  console.info("matrix1 and matrix2 are not equal.");
470}
471```
472
473## invert<sup>12+</sup>
474
475invert(matrix: Matrix): Boolean
476
477将矩阵matrix设置为当前矩阵的逆矩阵,并返回是否设置成功的结果。
478
479**系统能力:** SystemCapability.Graphics.Drawing
480
481**参数:**
482
483| 参数名 | 类型                                                 | 必填 | 说明             |
484| ------ | ---------------------------------------------------- | ---- | ---------------- |
485| matrix  | [Matrix](arkts-apis-graphics-drawing-Matrix.md) | 是   | 矩阵对象,用于存储获取到的逆矩阵。 |
486
487**返回值:**
488
489| 类型                        | 说明                  |
490| --------------------------- | -------------------- |
491| Boolean | 返回matrix是否被设置为逆矩阵的结果。true表示当前矩阵可逆,matrix被设置为逆矩阵,false表示当前矩阵不可逆,matrix不被设置。 |
492
493**错误码:**
494
495以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
496
497| 错误码ID | 错误信息 |
498| ------- | --------------------------------------------|
499| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
500
501**示例:**
502
503```ts
504import { drawing } from '@kit.ArkGraphics2D';
505
506let matrix1 = new drawing.Matrix();
507matrix1.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
508let matrix2 = new drawing.Matrix();
509matrix2.setMatrix([-2, 1, 3, 1, 0, -1, 3, -1, 2]);
510if (matrix1.invert(matrix2)) {
511  console.info("matrix1 is invertible and matrix2 is set as an inverse matrix of the matrix1.");
512} else {
513  console.info("matrix1 is not invertible and matrix2 is not changed.");
514}
515```
516
517## isIdentity<sup>12+</sup>
518
519isIdentity(): Boolean
520
521判断矩阵是否是单位矩阵。
522
523**系统能力:** SystemCapability.Graphics.Drawing
524
525**返回值:**
526
527| 类型                        | 说明                  |
528| --------------------------- | -------------------- |
529| Boolean | 返回矩阵是否是单位矩阵。true表示矩阵是单位矩阵,false表示矩阵不是单位矩阵。 |
530
531**示例:**
532
533```ts
534import { drawing } from '@kit.ArkGraphics2D';
535
536let matrix = new drawing.Matrix();
537if (matrix.isIdentity()) {
538  console.info("matrix is identity.");
539} else {
540  console.info("matrix is not identity.");
541}
542```
543
544## getValue<sup>12+</sup>
545
546getValue(index: number): number
547
548获取矩阵给定索引位的值。索引范围0-8。
549
550**系统能力:** SystemCapability.Graphics.Drawing
551
552**参数:**
553
554| 参数名          | 类型    | 必填 | 说明                                                        |
555| --------------- | ------- | ---- | ----------------------------------------------------------- |
556| index | number | 是   | 索引位置,范围0-8,该参数为整数。 |
557
558**返回值:**
559
560| 类型                  | 说明           |
561| --------------------- | -------------- |
562| number | 函数返回矩阵给定索引位对应的值,该返回值为整数。 |
563
564**错误码:**
565
566以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
567
568| 错误码ID | 错误信息 |
569| ------- | --------------------------------------------|
570| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.|
571
572**示例:**
573
574```ts
575import {drawing} from "@kit.ArkGraphics2D";
576
577let matrix = new drawing.Matrix();
578for (let i = 0; i < 9; i++) {
579    console.info("matrix "+matrix.getValue(i).toString());
580}
581```
582
583## postRotate<sup>12+</sup>
584
585postRotate(degree: number, px: number, py: number): void
586
587将矩阵设置为矩阵右乘围绕轴心点旋转一定角度的单位矩阵后得到的矩阵。
588
589**系统能力:** SystemCapability.Graphics.Drawing
590
591**参数:**
592
593| 参数名          | 类型    | 必填 | 说明                                                        |
594| --------------- | ------- | ---- | ----------------------------------------------------------- |
595| degree | number | 是   | 旋转角度,单位为度。正数表示顺时针旋转,负数表示逆时针旋转,该参数为浮点数。 |
596| px | number | 是   | 旋转中心点的横坐标,该参数为浮点数。 |
597| py | number | 是   | 旋转中心点的纵坐标,该参数为浮点数。 |
598
599**错误码:**
600
601以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
602
603| 错误码ID | 错误信息 |
604| ------- | --------------------------------------------|
605| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
606
607**示例:**
608
609```ts
610import {drawing} from "@kit.ArkGraphics2D";
611
612let matrix = new drawing.Matrix();
613let degree: number = 2;
614let px: number = 3;
615let py: number = 4;
616matrix.postRotate(degree, px, py);
617console.info("matrix= "+matrix.getAll().toString());
618```
619
620## postScale<sup>12+</sup>
621
622postScale(sx: number, sy: number, px: number, py: number): void
623
624将矩阵设置为矩阵右乘围绕轴心点按一定缩放系数缩放后的单位矩阵后得到的矩阵。
625
626**系统能力:** SystemCapability.Graphics.Drawing
627
628**参数:**
629
630| 参数名          | 类型    | 必填 | 说明                                                        |
631| --------------- | ------- | ---- | ----------------------------------------------------------- |
632| sx | number | 是   | x轴方向缩放系数,负数表示先关于y = px作镜像翻转后再进行缩放,该参数为浮点数。 |
633| sy | number | 是   | y轴方向缩放系数,负数表示先关于x = py作镜像翻转后再进行缩放,该参数为浮点数。 |
634| px | number | 是   | 缩放中心点的横坐标,该参数为浮点数。 |
635| py | number | 是   | 缩放中心点的纵坐标,该参数为浮点数。 |
636
637**错误码:**
638
639以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
640
641| 错误码ID | 错误信息 |
642| ------- | --------------------------------------------|
643| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
644
645**示例:**
646
647```ts
648import {drawing} from "@kit.ArkGraphics2D";
649
650let matrix = new drawing.Matrix();
651let sx: number = 2;
652let sy: number = 0.5;
653let px: number = 1;
654let py: number = 1;
655matrix.postScale(sx, sy, px, py);
656console.info("matrix= "+matrix.getAll().toString());
657```
658
659## postTranslate<sup>12+</sup>
660
661postTranslate(dx: number, dy: number): void
662
663将矩阵设置为矩阵右乘平移一定距离后的单位矩阵后得到的矩阵。
664
665**系统能力:** SystemCapability.Graphics.Drawing
666
667**参数:**
668
669| 参数名          | 类型    | 必填 | 说明                                                        |
670| --------------- | ------- | ---- | ----------------------------------------------------------- |
671| dx | number | 是   | x轴方向平移距离,正数表示往x轴正方向平移,负数表示往x轴负方向平移,该参数为浮点数。 |
672| dy | number | 是   | y轴方向平移距离,正数表示往y轴正方向平移,负数表示往y轴负方向平移,该参数为浮点数。 |
673
674**错误码:**
675
676以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
677
678| 错误码ID | 错误信息 |
679| ------- | --------------------------------------------|
680| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
681
682**示例:**
683
684```ts
685import {drawing} from "@kit.ArkGraphics2D";
686
687let matrix = new drawing.Matrix();
688let dx: number = 3;
689let dy: number = 4;
690matrix.postTranslate(dx, dy);
691console.info("matrix= "+matrix.getAll().toString());
692```
693
694## preRotate<sup>12+</sup>
695
696preRotate(degree: number, px: number, py: number): void
697
698将矩阵设置为矩阵左乘围绕轴心点旋转一定角度的单位矩阵后得到的矩阵。
699
700**系统能力:** SystemCapability.Graphics.Drawing
701
702**参数:**
703
704| 参数名          | 类型    | 必填 | 说明                                                        |
705| --------------- | ------- | ---- | ----------------------------------------------------------- |
706| degree | number | 是   | 旋转角度,单位为度。正数表示顺时针旋转,负数表示逆时针旋转,该参数为浮点数。 |
707| px | number | 是   | 旋转中心点的横坐标,该参数为浮点数。 |
708| py | number | 是   | 旋转中心点的纵坐标,该参数为浮点数。 |
709
710**错误码:**
711
712以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
713
714| 错误码ID | 错误信息 |
715| ------- | --------------------------------------------|
716| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
717
718**示例:**
719
720```ts
721import {drawing} from "@kit.ArkGraphics2D";
722
723let matrix = new drawing.Matrix();
724let degree: number = 2;
725let px: number = 3;
726let py: number = 4;
727matrix.preRotate(degree, px, py);
728console.info("matrix= "+matrix.getAll().toString());
729```
730
731## postSkew<sup>20+</sup>
732
733postSkew(kx: number, ky: number, px: number, py: number): void
734
735当前矩阵右乘一个倾斜变换矩阵。
736
737**系统能力:** SystemCapability.Graphics.Drawing
738
739**参数:**
740
741| 参数名         | 类型                                       | 必填   | 说明             |
742| ----------- | ---------------------------------------- | ---- | -------------------   |
743| kx          | number                  | 是    | x轴上的倾斜量,该参数为浮点数。正值会使绘制沿y轴增量方向向右倾斜;负值会使绘制沿y轴增量方向向左倾斜。           |
744| ky          | number                  | 是    | y轴上的倾斜量,该参数为浮点数。正值会使绘制沿x轴增量方向向下倾斜;负值会使绘制沿x轴增量方向向上倾斜。           |
745| px          | number                  | 是    | 倾斜中心点的x轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点右侧,负数表示位于坐标原点左侧。    |
746| py          | number                  | 是    | 倾斜中心点的y轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点下侧,负数表示位于坐标原点上侧。   |
747
748**示例:**
749
750```ts
751import {drawing} from "@kit.ArkGraphics2D"
752let matrix = new drawing.Matrix();
753matrix.postSkew(2.0, 1.0, 2.0, 1.0);
754```
755
756## preSkew<sup>20+</sup>
757
758 preSkew(kx: number, ky: number, px: number, py: number): void
759
760当前矩阵左乘一个倾斜变换矩阵。
761
762**系统能力:** SystemCapability.Graphics.Drawing
763
764**参数:**
765
766| 参数名         | 类型                                       | 必填   | 说明             |
767| ----------- | ---------------------------------------- | ---- | -------------------   |
768| kx          | number                  | 是    | x轴上的倾斜量,该参数为浮点数。正值会使绘制沿y轴增量方向向右倾斜;负值会使绘制沿y轴增量方向向左倾斜。           |
769| ky          | number                  | 是    | y轴上的倾斜量,该参数为浮点数。正值会使绘制沿x轴增量方向向下倾斜;负值会使绘制沿x轴增量方向向上倾斜。           |
770| px          | number                  | 是    | 倾斜中心点的x轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点右侧,负数表示位于坐标原点左侧。        |
771| py          | number                  | 是    | 倾斜中心点的y轴坐标,该参数为浮点数。0表示坐标原点,正数表示位于坐标原点下侧,负数表示位于坐标原点上侧。        |
772
773**示例:**
774
775```ts
776import {drawing} from "@kit.ArkGraphics2D"
777let matrix = new drawing.Matrix();
778matrix.preSkew(2.0, 1.0, 2.0, 1.0);
779```
780
781## mapRadius<sup>20+</sup>
782
783mapRadius(radius: number): number
784
785返回半径为radius的圆经过当前矩阵映射形成的椭圆的平均半径。平均半径的平方为椭圆长轴长度和短轴长度的乘积。若当前矩阵包含透视变换,则该结果无意义。
786
787**系统能力:** SystemCapability.Graphics.Drawing
788
789**参数:**
790
791| 参数名 | 类型                                                 | 必填 | 说明             |
792| ------ | ---------------------------------------------------- | ---- | ---------------- |
793| radius  | number | 是   | 用于计算的圆的半径,浮点数。如果是负数,则按照绝对值进行计算。 |
794
795**返回值:**
796
797| 类型                        | 说明                  |
798| --------------------------- | -------------------- |
799| number | 返回经过变换之后的平均半径。 |
800
801**示例:**
802
803```ts
804import {drawing} from "@kit.ArkGraphics2D"
805
806let matrix = new drawing.Matrix();
807matrix.setMatrix([2, 1, 3, 1, 2, 1, 3, 1, 2]);
808let radius = matrix.mapRadius(10);
809console.info('radius', radius);
810```
811
812## preScale<sup>12+</sup>
813
814preScale(sx: number, sy: number, px: number, py: number): void
815
816将矩阵设置为矩阵左乘围绕轴心点按一定缩放系数缩放后的单位矩阵后得到的矩阵。
817
818**系统能力:** SystemCapability.Graphics.Drawing
819
820**参数:**
821
822| 参数名          | 类型    | 必填 | 说明                                                        |
823| --------------- | ------- | ---- | ----------------------------------------------------------- |
824| sx | number | 是   | x轴方向缩放系数,为负数时可看作是先关于y = px作镜像翻转后再进行缩放,该参数为浮点数。 |
825| sy | number | 是   | y轴方向缩放系数,为负数时可看作是先关于x = py作镜像翻转后再进行缩放,该参数为浮点数。 |
826| px | number | 是   | 轴心点横坐标,该参数为浮点数。 |
827| py | number | 是   | 轴心点纵坐标,该参数为浮点数。 |
828
829**错误码:**
830
831以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
832
833| 错误码ID | 错误信息 |
834| ------- | --------------------------------------------|
835| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
836
837**示例:**
838
839```ts
840import {drawing} from "@kit.ArkGraphics2D";
841
842let matrix = new drawing.Matrix();
843let sx: number = 2;
844let sy: number = 0.5;
845let px: number = 1;
846let py: number = 1;
847matrix.preScale(sx, sy, px, py);
848console.info("matrix"+matrix.getAll().toString());
849```
850
851## preTranslate<sup>12+</sup>
852
853preTranslate(dx: number, dy: number): void
854
855将矩阵设置为矩阵左乘平移一定距离后的单位矩阵后得到的矩阵。
856
857**系统能力:** SystemCapability.Graphics.Drawing
858
859**参数:**
860
861| 参数名          | 类型    | 必填 | 说明                                                        |
862| --------------- | ------- | ---- | ----------------------------------------------------------- |
863| dx | number | 是   | x轴方向平移距离,正数表示往x轴正方向平移,负数表示往x轴负方向平移,该参数为浮点数。 |
864| dy | number | 是   | y轴方向平移距离,正数表示往y轴正方向平移,负数表示往y轴负方向平移,该参数为浮点数。 |
865
866**错误码:**
867
868以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
869
870| 错误码ID | 错误信息 |
871| ------- | --------------------------------------------|
872| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
873
874**示例:**
875
876```ts
877import {drawing} from "@kit.ArkGraphics2D";
878
879let matrix = new drawing.Matrix();
880let dx: number = 3;
881let dy: number = 4;
882matrix.preTranslate(dx, dy);
883console.info("matrix"+matrix.getAll().toString());
884```
885
886## reset<sup>12+</sup>
887
888reset(): void
889
890重置当前矩阵为单位矩阵。
891
892**系统能力:** SystemCapability.Graphics.Drawing
893
894**示例:**
895
896```ts
897import {drawing} from "@kit.ArkGraphics2D";
898
899let matrix = new drawing.Matrix();
900matrix.postScale(2, 3, 4, 5);
901matrix.reset();
902console.info("matrix= "+matrix.getAll().toString());
903```
904
905## mapPoints<sup>12+</sup>
906
907mapPoints(src: Array\<common2D.Point>): Array\<common2D.Point>
908
909通过矩阵变换将源点数组映射到目标点数组。
910
911**系统能力:** SystemCapability.Graphics.Drawing
912
913**参数:**
914
915| 参数名          | 类型    | 必填 | 说明                                                        |
916| --------------- | ------- | ---- | ----------------------------------------------------------- |
917| src | Array\<[common2D.Point](js-apis-graphics-common2D.md#point12)> | 是   | 源点数组。 |
918
919**返回值:**
920
921| 类型                  | 说明           |
922| --------------------- | -------------- |
923| Array\<[common2D.Point](js-apis-graphics-common2D.md#point12)> | 源点数组经矩阵变换后的点数组。 |
924
925**错误码:**
926
927以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
928
929| 错误码ID | 错误信息 |
930| ------- | --------------------------------------------|
931| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
932
933**示例:**
934
935```ts
936import {drawing,common2D} from "@kit.ArkGraphics2D";
937
938let src: Array<common2D.Point> = [];
939src.push({x: 15, y: 20});
940src.push({x: 20, y: 15});
941src.push({x: 30, y: 10});
942let matrix = new drawing.Matrix();
943let dst: Array<common2D.Point> = matrix.mapPoints(src);
944console.info("matrix= src: "+JSON.stringify(src));
945console.info("matrix= dst: "+JSON.stringify(dst));
946```
947
948## getAll<sup>12+</sup>
949
950getAll(): Array\<number>
951
952获取矩阵的所有元素值。
953
954**系统能力:** SystemCapability.Graphics.Drawing
955
956**返回值:**
957
958| 类型                  | 说明           |
959| --------------------- | -------------- |
960| Array\<number> | 存储矩阵元素值的浮点数组,长度为9。 |
961
962**示例:**
963
964```ts
965import {drawing} from "@kit.ArkGraphics2D";
966
967let matrix = new drawing.Matrix();
968console.info("matrix "+ matrix.getAll());
969```
970
971## mapRect<sup>12+</sup>
972
973mapRect(dst: common2D.Rect, src: common2D.Rect): boolean
974
975将目标矩形设置为源矩形通过矩阵变换后的图形的外接矩形。如下图所示,蓝色矩形为源矩形,假设黄色矩形为源矩形通过矩阵变换形成的图形,此时黄色矩形的边不与坐标轴平行,无法使用矩形对象表示,因此,将目标矩形设置为黄色矩形的外接矩形,即黑色矩形。
976
977![mapRect](figures/zh-ch_matrix_mapRect.png)
978
979**系统能力:** SystemCapability.Graphics.Drawing
980
981**参数:**
982
983| 参数名          | 类型    | 必填 | 说明                                                        |
984| --------------- | ------- | ---- | ----------------------------------------------------------- |
985| dst | [common2D.Rect](js-apis-graphics-common2D.md#rect) | 是   | 目标矩形对象,用于存储源矩形经矩阵变换后的图形的外接矩形。 |
986| src |[common2D.Rect](js-apis-graphics-common2D.md#rect) | 是   | 源矩形对象。 |
987
988**返回值:**
989
990| 类型                  | 说明           |
991| --------------------- | -------------- |
992| boolean | 返回源矩形经过矩阵变换后的图形是否仍然是矩形,true表示是矩形,false表示不是矩形。 |
993
994**错误码:**
995
996以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
997
998| 错误码ID | 错误信息 |
999| ------- | --------------------------------------------|
1000| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
1001
1002**示例:**
1003
1004```ts
1005import {drawing,common2D} from "@kit.ArkGraphics2D";
1006
1007let dst: common2D.Rect = { left: 100, top: 20, right: 130, bottom: 60 };
1008let src: common2D.Rect = { left: 100, top: 80, right: 130, bottom: 120 };
1009let matrix = new drawing.Matrix();
1010if (matrix.mapRect(dst, src)) {
1011    console.info("matrix= dst "+JSON.stringify(dst));
1012}
1013```
1014
1015## setRectToRect<sup>12+</sup>
1016
1017setRectToRect(src: common2D.Rect, dst: common2D.Rect, scaleToFit: ScaleToFit): boolean
1018
1019将当前矩阵设置为能使源矩形映射到目标矩形的变换矩阵。
1020
1021**系统能力:** SystemCapability.Graphics.Drawing
1022
1023**参数:**
1024
1025| 参数名          | 类型    | 必填 | 说明                                                        |
1026| --------------- | ------- | ---- | ----------------------------------------------------------- |
1027| src | [common2D.Rect](js-apis-graphics-common2D.md#rect) | 是   | 源矩形。 |
1028| dst | [common2D.Rect](js-apis-graphics-common2D.md#rect) | 是   | 目标矩形。 |
1029| scaleToFit | [ScaleToFit](arkts-apis-graphics-drawing-e.md#scaletofit12) | 是   | 源矩形到目标矩形的映射方式。 |
1030
1031**返回值:**
1032
1033| 类型                  | 说明           |
1034| --------------------- | -------------- |
1035| boolean | 返回矩阵是否可以表示矩形之间的映射,true表示可以,false表示不可以。如果源矩形的宽高任意一个小于等于0,则返回false,并将矩阵设置为单位矩阵;如果目标矩形的宽高任意一个小于等于0,则返回true,并将矩阵设置为除透视缩放系数为1外其余值皆为0的矩阵。 |
1036
1037**错误码:**
1038
1039以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1040
1041| 错误码ID | 错误信息 |
1042| ------- | --------------------------------------------|
1043| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types;3.Parameter verification failed. |
1044
1045**示例:**
1046
1047```ts
1048import {drawing,common2D} from "@kit.ArkGraphics2D";
1049
1050let src: common2D.Rect = { left: 100, top: 100, right: 300, bottom: 300 };
1051let dst: common2D.Rect = { left: 200, top: 200, right: 600, bottom: 600 };
1052let scaleToFit: drawing.ScaleToFit = drawing.ScaleToFit.FILL_SCALE_TO_FIT
1053let matrix = new drawing.Matrix();
1054if (matrix.setRectToRect(src, dst, scaleToFit)) {
1055    console.info("matrix"+matrix.getAll().toString());
1056}
1057```
1058
1059## setPolyToPoly<sup>12+</sup>
1060
1061setPolyToPoly(src: Array\<common2D.Point>, dst: Array\<common2D.Point>, count: number): boolean
1062
1063将当前矩阵设置为能够将源点数组映射到目标点数组的变换矩阵。源点和目标点的个数必须大于等于0,小于等于4。
1064
1065**系统能力:** SystemCapability.Graphics.Drawing
1066
1067**参数:**
1068
1069| 参数名          | 类型    | 必填 | 说明                                                        |
1070| --------------- | ------- | ---- | ----------------------------------------------------------- |
1071| src | Array\<[common2D.Point](js-apis-graphics-common2D.md#point12)> | 是   | 源点数组,长度必须为count。 |
1072| dst | Array\<[common2D.Point](js-apis-graphics-common2D.md#point12)> | 是   | 目标点数组,长度必须为count。 |
1073| count | number | 是   | 在src和dst点的数量,该参数为整数。 |
1074
1075**返回值:**
1076
1077| 类型                  | 说明           |
1078| --------------------- | -------------- |
1079| boolean | 返回设置矩阵是否成功的结果,true表示设置成功,false表示设置失败。 |
1080
1081**错误码:**
1082
1083以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1084
1085| 错误码ID | 错误信息 |
1086| ------- | --------------------------------------------|
1087| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. |
1088
1089**示例:**
1090
1091```ts
1092import {drawing,common2D} from "@kit.ArkGraphics2D";
1093
1094let srcPoints: Array<common2D.Point> = [ {x: 10, y: 20}, {x: 200, y: 150} ];
1095let dstPoints: Array<common2D.Point> = [{ x:0, y: 10 }, { x:300, y: 600 }];
1096let matrix = new drawing.Matrix();
1097if (matrix.setPolyToPoly(srcPoints, dstPoints, 2)) {
1098    console.info("matrix"+matrix.getAll().toString());
1099}
1100```