[gs-longan](../README.md) / DMatrix4

# Class: DMatrix4

## Table of contents

### Constructors

- [constructor](DMatrix4.md#constructor)

### Methods

- [Inverse](DMatrix4.md#inverse)
- [InverseMatrix](DMatrix4.md#inversematrix)
- [Transpose](DMatrix4.md#transpose)
- [TransposeMatrix](DMatrix4.md#transposematrix)
- [clone](DMatrix4.md#clone)
- [getRotate](DMatrix4.md#getrotate)
- [getScale](DMatrix4.md#getscale)
- [getTranslate](DMatrix4.md#gettranslate)
- [identity](DMatrix4.md#identity)
- [lookat](DMatrix4.md#lookat)
- [multiply](DMatrix4.md#multiply)
- [multiplyBBProjection](DMatrix4.md#multiplybbprojection)
- [multiplyBoundingBox](DMatrix4.md#multiplyboundingbox)
- [multiplyPoint](DMatrix4.md#multiplypoint)
- [multiplyVector](DMatrix4.md#multiplyvector)
- [ortho](DMatrix4.md#ortho)
- [rotate](DMatrix4.md#rotate)
- [rotateByAxis](DMatrix4.md#rotatebyaxis)
- [scale](DMatrix4.md#scale)
- [scaleMatrix](DMatrix4.md#scalematrix)
- [translate](DMatrix4.md#translate)
- [translateMatrix](DMatrix4.md#translatematrix)

## Constructors

### constructor

• **new DMatrix4**(): [`DMatrix4`](DMatrix4.md)

#### Returns

[`DMatrix4`](DMatrix4.md)

## Methods

### Inverse

▸ **Inverse**(`m`): `void`

就地计算双精度矩阵的逆，结果写回参数矩阵（若不可逆则返回 undefined）

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 要求逆的矩阵（Float64Array，长度为16），函数会修改该矩阵以保存逆矩阵 |

#### Returns

`void`

___

### InverseMatrix

▸ **InverseMatrix**(`m`): `Float64Array`

计算并返回给定 4x4 矩阵的逆矩阵（不修改原始输入）。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 要求逆的 4x4 矩阵，类型为 Float64Array，长度应为 16。 |

#### Returns

`Float64Array`

返回一个新的 Float64Array，表示输入矩阵的逆矩阵。

___

### Transpose

▸ **Transpose**(`m`): `void`

将 4x4 矩阵原地转置。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 长度至少为 16 的 Float64Array，表示列主序的 4x4 矩阵。该数组会被原地修改。 |

#### Returns

`void`

void

___

### TransposeMatrix

▸ **TransposeMatrix**(`m`): `Float64Array`

将给定的 4x4 矩阵转置并返回新的矩阵副本。
不会修改传入的 m，而是先克隆后对克隆结果进行转置并返回。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 要转置的矩阵，使用 Float64Array 表示，预期长度为 16（4x4）。 |

#### Returns

`Float64Array`

返回转置后的 Float64Array（新的数组实例）。

___

### clone

▸ **clone**(`m`): `Float64Array`

克隆双精度矩阵到新实例

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 源矩阵（Float64Array，长度为16） |

#### Returns

`Float64Array`

克隆后的矩阵（Float64Array，长度为16）

___

### getRotate

▸ **getRotate**(`m`): `Float64Array`

从矩阵中提取旋转部分（移除平移与缩放），返回只包含旋转的矩阵

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 源矩阵（Float32Array，长度为16） |

#### Returns

`Float64Array`

只包含旋转分量的矩阵（Float32Array，长度为16）

___

### getScale

▸ **getScale**(`m`): `Float64Array`

从矩阵中提取缩放分量并返回对应的缩放矩阵

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 源矩阵（Float32Array，长度为16） |

#### Returns

`Float64Array`

包含缩放分量的矩阵（Float32Array，长度为16）

___

### getTranslate

▸ **getTranslate**(`m`): `Float64Array`

提取矩阵中的平移部分并返回平移矩阵

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 源矩阵（Float32Array，长度为16） |

#### Returns

`Float64Array`

只包含平移分量的矩阵（Float32Array，长度为16）

___

### identity

▸ **identity**(): `Float64Array`

返回 4x4 单位矩阵（双精度）

#### Returns

`Float64Array`

单位矩阵（Float64Array，长度为16）

___

### lookat

▸ **lookat**(`eyeX`, `eyeY`, `eyeZ`, `centerX`, `centerY`, `centerZ`, `upX`, `upY`, `upZ`): `Float64Array`

创建观察矩阵（LookAt），将相机从 eye 看向 center，使用 up 指定上方向

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `eyeX` | `number` | 相机位置 X |
| `eyeY` | `number` | 相机位置 Y |
| `eyeZ` | `number` | 相机位置 Z |
| `centerX` | `number` | 目标点 X |
| `centerY` | `number` | 目标点 Y |
| `centerZ` | `number` | 目标点 Z |
| `upX` | `number` | up 向量 X 分量 |
| `upY` | `number` | up 向量 Y 分量 |
| `upZ` | `number` | up 向量 Z 分量 |

#### Returns

`Float64Array`

观察矩阵（Float32Array，长度为16）

___

### multiply

▸ **multiply**(`m1`, `m2`): `Float64Array`

矩阵相乘（双精度）

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m1` | `Float64Array` | 左矩阵（Float64Array，长度为16） |
| `m2` | `Float64Array` | 右矩阵（Float64Array，长度为16） |

#### Returns

`Float64Array`

相乘结果矩阵（Float64Array，长度为16）

___

### multiplyBBProjection

▸ **multiplyBBProjection**(`m`, `bb`): `Float64Array`

对包围盒进行投影变换并返回在投影空间中的包围盒

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 投影矩阵（Float32Array，长度为16） |
| `bb` | `Float64Array` | 包围盒 [minX,minY,minZ,maxX,maxY,maxZ]（Float32Array，长度为6） |

#### Returns

`Float64Array`

投影后的包围盒（Float32Array，长度为6）

___

### multiplyBoundingBox

▸ **multiplyBoundingBox**(`m`, `bb`): `Float64Array`

变换包围盒（双精度），返回变换后的包围盒

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 变换矩阵（Float64Array，长度为16） |
| `bb` | `Float64Array` | 包围盒 [minX,minY,minZ,maxX,maxY,maxZ]（Float64Array，长度为6） |

#### Returns

`Float64Array`

变换后的包围盒（Float64Array，长度为6）

___

### multiplyPoint

▸ **multiplyPoint**(`m`, `p`): `Float64Array`

点矩阵变换（双精度）

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 矩阵（Float64Array，长度为16） |
| `p` | `Float64Array` | 点（Float64Array，长度为3） |

#### Returns

`Float64Array`

变换后的点（Float64Array，长度为3）

___

### multiplyVector

▸ **multiplyVector**(`m`, `v`): `Float64Array`

矩阵乘向量（双精度），不包含平移分量

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 矩阵（Float64Array，长度为16） |
| `v` | `Float64Array` | 向量（Float64Array，长度为3） |

#### Returns

`Float64Array`

变换后的向量（Float64Array，长度为3）

___

### ortho

▸ **ortho**(`left`, `right`, `bottom`, `top`, `near`, `far`): `Float64Array`

创建或写入正交投影矩阵

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `left` | `number` | 视体左边界 |
| `right` | `number` | 视体右边界 |
| `bottom` | `number` | 视体下边界 |
| `top` | `number` | 视体上边界 |
| `near` | `number` | 近裁剪面 |
| `far` | `number` | 远裁剪面 |

#### Returns

`Float64Array`

正交投影矩阵（Float32Array，长度为16）

___

### rotate

▸ **rotate**(`axis`, `alpha`): `Float64Array`

使用罗德里格斯（Rodrigues）旋转公式，根据给定轴和角度生成一个 4x4 旋转矩阵。
*

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `axis` | `Float64Array` | 表示旋转轴的长度为 3 的 Float64Array，应为单位向量（若不是请先归一化）。 * |
| `alpha` | `number` | 旋转角度，单位为弧度。 * |

#### Returns

`Float64Array`

返回值为长度为 16 的 Float64Array，按列优先（column-major）排列的 4x4 旋转矩阵，属于齐次变换（底行为 [0, 0, 0, 1]）。

___

### rotateByAxis

▸ **rotateByAxis**(`origin`, `axis`, `alpha`): `Float64Array`

指定点轴旋转

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `origin` | `Float64Array` | 点 |
| `axis` | `Float64Array` | 旋转轴 |
| `alpha` | `number` | 弧度 |

#### Returns

`Float64Array`

变换矩阵

___

### scale

▸ **scale**(`m`, `x`, `y`, `z`): `void`

将缩放因子应用于给定矩阵的缩放分量并直接修改该矩阵。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 要修改的矩阵数组 |
| `x` | `number` | X 轴缩放因子 |
| `y` | `number` | Y 轴缩放因子 |
| `z` | `number` | Z 轴缩放因子 |

#### Returns

`void`

无返回值，直接在输入矩阵上生效

___

### scaleMatrix

▸ **scaleMatrix**(`x`, `y`, `z`): `Float64Array`

创建一个 4x4 缩放矩阵。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `x` | `number` | (X 轴缩放因子) |
| `y` | `number` | (Y 轴缩放因子) |
| `z` | `number` | (Z 轴缩放因子) |

#### Returns

`Float64Array`

返回长度为 16 的 Float64Array，表示对角线为 [x, y, z, 1] 的 4x4 缩放矩阵。

___

### translate

▸ **translate**(`m`, `x`, `y`, `z`): `void`

将平移应用到给定的 4x4 矩阵（原地修改）。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `m` | `Float64Array` | 目标矩阵，长度为 16 的 Float64Array（按列主序排列）。 |
| `x` | `number` | 在 X 方向上的平移量。 |
| `y` | `number` | 在 Y 方向上的平移量。 |
| `z` | `number` | 在 Z 方向上的平移量。 |

#### Returns

`void`

void - 无返回值；函数会直接修改传入的矩阵 m 的平移分量。

___

### translateMatrix

▸ **translateMatrix**(`x`, `y`, `z`): `Float64Array`

生成一个 4x4 的平移矩阵（列主序）。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `x` | `number` | 沿 X 轴的平移距离 |
| `y` | `number` | 沿 Y 轴的平移距离 |
| `z` | `number` | 沿 Z 轴的平移距离 |

#### Returns

`Float64Array`

返回表示 4x4 平移矩阵的 Float64Array
