当前位置: 首页 > news >正文

node-dommatrix

node-dommatrix

一个符合规范的W3C DOMMatrix实现,用于2D/3D矩阵变换。适用于图形库、动画系统以及任何需要精确几何变换的应用场景。


✨ 核心特性

  • 遵循W3C标准:严格按照几何接口规范实现
  • 双模式支持:无缝处理2D(3×3)和3D(4×4)矩阵
  • 类型安全:完整的TypeScript支持,带有严格的类型定义
  • 轻量级:压缩后约4KB,无依赖
  • CSS兼容:输出matrix()/matrix3d()字符串,可直接用于样式中

🚀 安装

# npm
npm install node-dommatrix# yarn
yarn add node-dommatrix

📖 API 参考

🔹 DOMMatrix 类

构造函数

支持多种初始化方式创建新矩阵:

语法描述
new DOMMatrix()空的单位矩阵(默认2D模式)
new DOMMatrix(transformString)从CSS变换字符串创建(例如:"translate(10px) rotate(30deg)"
new DOMMatrix(matrixArray)从数组创建:2D矩阵需要6个元素[a,b,c,d,e,f],3D矩阵需要16个元素
new DOMMatrix(otherMatrix)克隆另一个DOMMatrix实例

示例:

// 从CSS变换字符串创建
const mat = new DOMMatrix('translate(50px, 100px) scale(2) rotate(45deg)');// 从2D数组创建
const identity2d = new DOMMatrix([1, 0, 0, 1, 0, 0]);// 从3D数组创建
const identity3d = new DOMMatrix([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
]);

🔸 核心方法
方法参数返回值描述
clone()-DOMMatrix创建矩阵的深拷贝
identity()-void将矩阵重置为单位矩阵(无变换)
multiply(other)other: DOMMatrixDOMMatrix返回新矩阵:this × other
multiplySelf(other)other: DOMMatrixthis修改当前矩阵:this = this × other
inverse()-DOMMatrix | null返回逆矩阵(如果是奇异矩阵则返回null)
transformPoint(point)point: DOMPointInitDOMPoint将矩阵应用于点进行变换
toString()-string返回兼容CSS的变换字符串

示例:矩阵乘法

const translate = new DOMMatrix().translateSelf(10, 20);
const rotate = new DOMMatrix().rotateSelf(30);// 创建新矩阵:translate × rotate
const combined = translate.multiply(rotate);// 或者在当前矩阵上直接修改
translate.multiplySelf(rotate);

示例:逆变换

const matrix = new DOMMatrix().scaleSelf(2);
const inverse = matrix.inverse(); // 逆矩阵将缩放0.5倍// 逆转变换
const point = new DOMPoint(4, 6);
const transformed = matrix.transformPoint(point); // {x:8, y:12}
const original = inverse!.transformPoint(transformed); // {x:4, y:6}

🔸 变换方法

所有变换方法都有两种变体:

  • 非变异版本method() 返回应用了变换的新矩阵
  • 变异版本methodSelf() 直接在当前矩阵上应用变换
方法参数返回值描述
translate(tx, ty?, tz?)tx: number(X方向平移)
ty: number(Y方向平移,默认:0)
tz: number(Z方向平移,默认:0)
DOMMatrix带平移的新矩阵
translateSelf(tx, ty?, tz?)同上this平移当前矩阵
rotate(angle, x?, y?, z?)angle: number(角度)
x,y,z: 旋转轴(默认:0,0,1 用于2D)
DOMMatrix带旋转的新矩阵
rotateSelf(angle, x?, y?, z?)同上this旋转当前矩阵
scale(sx, sy?, sz?)sx: number(X方向缩放)
sy: number(Y方向缩放,默认:sx)
sz: number(Z方向缩放,默认:1)
DOMMatrix带缩放的新矩阵
scaleSelf(sx, sy?, sz?)同上this缩放当前矩阵
skewX(angle)angle: number(角度)DOMMatrix带X方向倾斜的新矩阵
skewXSelf(angle)同上this对当前矩阵应用X方向倾斜
skewY(angle)angle: number(角度)DOMMatrix带Y方向倾斜的新矩阵
skewYSelf(angle)同上this对当前矩阵应用Y方向倾斜
to2D()-DOMMatrix转换为2D矩阵(丢弃3D数据)

示例:链式变换

const matrix = new DOMMatrix().translateSelf(100, 200)    // 移动原点.rotateSelf(45)             // 绕新原点旋转.scaleSelf(1.5);            // 缩放变换后的矩阵console.log(matrix.toString()); 
// 输出: matrix(1.06..., 1.06..., -1.06..., 1.06..., 100, 200)

示例:3D变换

const matrix = new DOMMatrix().rotateSelf(30, 1, 0, 0)    // 绕X轴旋转30°.translateSelf(0, 0, 50)    // 沿Z轴移动.scaleSelf(1, 1, 0.8);      // 缩放Z轴const point = matrix.transformPoint(new DOMPoint(10, 20, 30));

🔸 属性
属性类型描述
is2Dboolean若矩阵处于2D模式则为true
elementsreadonly number[]原始矩阵值(3D矩阵16个元素,2D矩阵6个有效元素)
a-fnumber2D组件快捷方式:
a=m11, b=m12, c=m21, d=m22, e=m41, f=m42
m11-m44number3D组件访问器(4×4矩阵位置)

示例:直接访问属性

const matrix = new DOMMatrix().scaleSelf(2, 3);
console.log(matrix.a);  // 2 (m11: X方向缩放)
console.log(matrix.d);  // 3 (m22: Y方向缩放)matrix.e = 50;          // 设置X方向平移 (m41)
matrix.f = 100;         // 设置Y方向平移 (m42)

🔹 DOMPoint 类

表示3D空间中的点,带有齐次坐标:

构造函数
new DOMPoint(x?: number, y?: number, z?: number, w?: number);
属性
属性类型描述
xnumberX坐标(默认:0)
ynumberY坐标(默认:0)
znumberZ坐标(默认:0)
wnumber齐次坐标(默认:1)

示例:

const point = new DOMPoint(10, 20, 30);
console.log(point.x); // 10// 用矩阵变换点
const transformed = matrix.transformPoint(point);

🧩 兼容性

  • Node.js: ≥ 14.0.0
  • 浏览器: Chrome 54+, Firefox 43+, Safari 10+, Edge 15+
  • TypeScript: ≥ 4.0(用于类型定义)

📄 许可证

MIT ©

http://www.dtcms.com/a/446925.html

相关文章:

  • 人工智能赋能传统医疗设施设备改造:未来展望与伦理挑战
  • angular网站模板下载公众号必备50个模板
  • 移动端教学视频网站开发怎么制作网站?
  • 德惠市建设局网站商城 小程序
  • 图文网站源码做网站要源代码
  • 怎样下载别人网站自己做的视频html5企业网站模版
  • Git配置与安装并使用Git管理项目
  • 网站dns查询网址大全2345电脑版下载
  • 串扰13-串扰如何影响信号边沿
  • 泰安市住房与城乡建设局网站企业网站建设的目的
  • jetson nano搭建vue3环境
  • 为什么mysql要有主从复制,主库,从库这种东西
  • 进网站后台显示空白wordpress 虾米音乐插件
  • 中国最大的做网站公司常州企业建站系统
  • U支付自动发卡平台使用教程
  • 正规网站优化公司宝思哲手表网站
  • 山西做网站的公司哪个好阜城网站建设价格
  • Raspberry Pi Pico GPIO
  • 网站备案icp过期上海做网站seo
  • 微网站开发 在线商城泰安求职招聘网
  • RSA-NOTES-2
  • 客户管理系统网站模板下载最新的域名
  • Bootstrap5 弹出框
  • 3d网站带后台下载网络公关名词解释
  • 商丘做网站推广的公司目前免费的h5制作软件
  • Halcon算子学习1-机器视觉Halcon中,select_gray和select_shape的区别?如何选择与使用建议?如何组合使用?
  • 兰州程序开发网站建设成都双语网站开发
  • systemd-resolved.service实验实战1
  • 山东房和城乡建设厅网站首页网站开发维护合同书
  • 呼和浩特建设网站建立网站服务器怎么弄