fabric-texture
Version:
This JavaScript library enables fast and efficient image distortion transformations using Canvas 2D.
48 lines (47 loc) • 1.6 kB
TypeScript
/**
* 计算二维仿射变换矩阵
*
* 基于三对对应点计算 2D 仿射变换矩阵的六个参数 [a, b, c, d, e, f]。
* 变换矩阵用于将一组坐标映射到另一组坐标,满足以下方程:
* X = ax + cy + e
* Y = bx + dy + f
*
* @param newCoords - 变换后的三个点坐标
* 每个点包含 {x: number, y: number}
* 三点不能共线,否则无法计算变换矩阵
*
* @param oldCoords - 变换前的三个点坐标
* 每个点包含 {x: number, y: number}
* 三点不能共线,否则无法计算变换矩阵
*
* @returns {number[]} 变换矩阵的六个参数 [a, b, c, d, e, f]
* - a, b: x 方向的缩放和旋转
* - c, d: y 方向的缩放和旋转
* - e, f: x, y 方向的平移
*
* @example
* ```typescript
* // 计算旋转45度的变换矩阵
* const before = [
* { x: 0, y: 0 }, // 原点
* { x: 1, y: 0 }, // x轴上一点
* { x: 0, y: 1 } // y轴上一点
* ];
*
* const after = [
* { x: 0, y: 0 }, // 原点不变
* { x: 0.707, y: 0.707 }, // 旋转后的x轴点
* { x: -0.707, y: 0.707 } // 旋转后的y轴点
* ];
*
* const matrix = calcMatrix(after, before);
* // 返回近似值:[0.707, 0.707, -0.707, 0.707, 0, 0]
* ```
*
* @remarks
* - 使用 safeFactor 处理零值和接近零值的情况
* - 输入点必须按相同顺序对应
* - 返回的矩阵参数可能存在微小的精度误差
* - 三点共线会导致计算失败或结果不准确
*/
export declare const calcMatrix: (newCoords: [Coord, Coord, Coord], oldCoords: [Coord, Coord, Coord]) => number[];