tsm: A Typescript vector and matrix math library
=================================================
tsm is a a collection of vector, matrix and quaternion classes written in Typescript.
The library's design is influenced by both [gl-matrix](https://github.com/toji/gl-matrix) and [glm](https://github.com/g-truc/glm).
What's special about tsm?
-------------------------
- tsm makes use of Typescript's type annotations to reduce the number of possible bugs.
- tsm makes use of Javascript's new property definitions to enable GLSL-style swizzle operators:
let v1 = new vec2();
let q1 = new quat();
v1.xy = [0, 1];
q1.w = 1.0;
- tsm offers both non-static and static methods for many operations:
let v1 = new vec3([1, 2, 3]);
let v2 = new vec3([4, 5, 6]);
let v3 = vec3.sum(v1, v2);
let v4 = v1.copy().add(v2);
console.log(v3.equals(v4)); // output: "true"
General design notes
--------------------
Swizzle operators return numeric arrays, not vector instances:
let v = new vec4([1, 2, 3, 4]);
let n = v.xyz; // n = [1, 2, 3]
If, instead, you want to create a new instance of a vector or a matrix, use the copy() method:
let v1 = new vec4([1, 2, 3, 4]);
let v2 = v1.copy();
You can also initialize a new vector with the values of another:
let v1 = new vec4([1, 2, 3, 4]);
let v2 = new vec4(v1.xyzw);
Or copy the values of one vector to another using the swizzle operators or the copy() method:
v2.xyzw = v1.xyzw; // same as v1.copy(v2)
The four basic arithmetic operations can be performed on vector instances or using static methods:
let v1 = new vec4([1, 2, 3, 4]);
let v2 = new vec4([5, 6, 7, 8]);
let v3 = vec4.product(v1, v2); // returns a new vec4 instance
v1.multiply(v2); // writes the result of the multiplication into v1
v2.multiply(v1); // writes the result of the multiplication into v2
The reason for all of these different ways of doing the same thing is that object allocation in Javascript is slow and dynamic allocation shoud therefore be reduced to a minimum.
For this reason, static methods offer an optional destination parameter:
let v3 = vec3.cross(v1, v2) // allocates a new instance of vec3
is the same as:
let v3 = new vec3();
vec3.cross(v1, v2, v3) // writes into the existing instance
Matrices do not have swizzle operators. Instead, they provide the all(), row() and col() methods:
let m = new mat2([1, 2, 3, 4]);
let all = m.all(); // [1, 2, 3, 4]
let row = m.row(0); // [1, 2]
let col = m.col(0); // [1, 3]
TypeScript向量和矩阵数学库。_TypeScript_JavaScript_下.zip
版权申诉
122 浏览量
2023-04-13
23:51:26
上传
评论
收藏 64KB ZIP 举报
快撑死的鱼
- 粉丝: 1w+
- 资源: 9156
最新资源
- QuestionTwo.java
- QuestionOne.java
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 2017校招真题校园招聘真题算法题(37道)Python源码.zip
- 基于单片机protues仿真的多功能自动饮水机系统设计(仿真图、源代码、演示视频)
- 论文《一种修复流程挖掘事件日志中缺失活动标签的深度学习方法》翻译
- 智慧电厂相关资料发电控制的方式
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈