# Transform 类 API 文档 以下内容由 `DeepSeek R1` 模型生成并微调。 --- ## 继承关系 ```mermaid graph LR Transform --> EventEmitter click EventEmitter "https://nodejs.org/api/events.html#class-eventemitter" ``` --- ## 属性说明 | 属性名 | 类型 | 默认值 | 说明 | | -------------- | --------------------- | ----------- | ----------------------------------------------------------- | | `mat` | `mat3` | 单位矩阵 | 存储当前变换的 3x3 矩阵 | | `x` | `number` | `0` | 水平平移量 | | `y` | `number` | `0` | 垂直平移量 | | `scaleX` | `number` | `1` | 水平缩放比例 | | `scaleY` | `number` | `1` | 垂直缩放比例 | | `rad` | `number` | `0` | 旋转弧度值(范围:`[0, 2π)`) | | `modified` | `boolean`(私有) | `false` | 标识变换是否被修改过 | | `bindedObject` | `ITransformUpdatable` | `undefined` | 绑定的对象(当变换更新时自动调用其 `updateTransform` 方法) | --- ## 构造方法 ### `constructor` 创建一个新的变换实例,初始化为单位矩阵。 ```typescript const transform = new Transform(); ``` --- ## 方法说明 ### `bind` ```typescript function bind(obj?: ITransformUpdatable): void; ``` **描述** 绑定一个对象,当变换更新时自动调用其 `updateTransform` 方法(若存在)。 **示例** ```typescript const obj = { updateTransform: () => console.log('Transform updated!') }; transform.bind(obj); ``` --- ### `reset` ```typescript function reset(): void; ``` **描述** 重置所有参数到初始状态(单位矩阵)。 **示例** ```typescript transform.reset(); // 重置为 x=0, y=0, scaleX=1, scaleY=1, rad=0 ``` --- ### `scale` ```typescript function scale(x: number, y: number = x): this; ``` **描述** 叠加缩放变换(相对于当前状态)。 **参数** - `x`: 水平缩放比例 - `y`: 垂直缩放比例(默认同 `x`) **示例** ```typescript transform.scale(2); // 水平和垂直均放大2倍 transform.scale(1.5, 0.5); // 水平放大1.5倍,垂直缩小到0.5倍 ``` --- ### `translate` ```typescript function translate(x: number, y: number): this; ``` **描述** 叠加平移变换(相对于当前状态)。 **参数** - `x`: 水平平移量 - `y`: 垂直平移量 **示例** ```typescript transform.translate(100, 50); // 向右平移100单位,向下平移50单位 ``` --- ### `rotate` ```typescript function rotate(rad: number): this; ``` **描述** 叠加旋转变换(相对于当前状态)。 **参数** - `rad`: 旋转弧度值 **示例** ```typescript transform.rotate(Math.PI / 2); // 顺时针旋转90度 ``` --- ### `setScale` ```typescript function setScale(x: number, y: number = x): this; ``` **描述** 直接设置缩放比例(非叠加,覆盖当前状态)。 **示例** ```typescript transform.setScale(3, 2); // 设置水平缩放3倍,垂直缩放2倍 ``` --- ### `setTranslate` ```typescript function setTranslate(x: number, y: number): this; ``` **描述** 直接设置平移量(非叠加,覆盖当前状态)。 **示例** ```typescript transform.setTranslate(200, 100); // 直接定位到(200, 100) ``` --- ### `setRotate` ```typescript function setRotate(rad: number): this; ``` **描述** 直接设置旋转角度(非叠加,覆盖当前状态)。 **示例** ```typescript transform.setRotate(Math.PI); // 设置旋转180度 ``` --- ### `transformed` ```typescript function transformed(x: number, y: number): vec3; ``` **描述** 将坐标点 `(x, y)` 应用当前变换矩阵,返回变换后的坐标。 **返回值** - `vec3`: 变换后的三维坐标(`[x, y, 1]`) **示例** ```typescript const point = transform.transformed(10, 20); // 应用变换后的坐标 ``` --- ### `untransformed` ```typescript function untransformed(x: number, y: number): vec3; ``` **描述** 将坐标点 `(x, y)` 逆向应用当前变换矩阵,返回原坐标。 **示例** ```typescript const origin = transform.untransformed(50, 30); // 逆向变换后的坐标 ``` --- ### `clone` ```typescript function clone(): Transform; ``` **描述** 复制当前变换实例。 **示例** ```typescript const cloned = transform.clone(); // 生成一个完全相同的副本 ``` --- ## 静态方法说明 ### `Transform.transformed` ```typescript function transformed(transform: Transform, x: number, y: number): vec3; ``` **描述** 静态方法,直接通过变换矩阵计算坐标点 `(x, y)` 的变换结果。 **示例** ```typescript const result = Transform.transformed(transform, 5, 5); ``` --- ### `Transform.untransformed` ```typescript function untransformed(transform: Transform, x: number, y: number): vec3; ``` **描述** 静态方法,直接通过变换矩阵逆向计算坐标点 `(x, y)` 的原位置。 **示例** ```typescript const origin = Transform.untransformed(transform, 100, 50); ``` --- ## 接口说明 ### `ITransformUpdatable` ```typescript interface ITransformUpdatable { updateTransform?(): void; } ``` **描述** 可绑定对象的接口,当变换更新时触发 `updateTransform` 方法(可选)。 --- ## 总使用示例 ```typescript // 创建变换实例 const transform = new Transform(); // 应用变换 transform .translate(50, 30) .scale(2) .rotate(Math.PI / 4); // 绑定对象 const obj = { updateTransform: () => console.log('Transform updated!') }; transform.bind(obj); // 坐标转换 const transformedPoint = transform.transformed(10, 10); console.log('Transformed point:', transformedPoint); // 复制变换 const cloned = transform.clone(); // 静态方法使用 const staticResult = Transform.transformed(cloned, 5, 5); ```