蓝紫™
DDZEB 完全自主知识产权图形图像开发平台
开放源码 免费使用 在线运行
与 OpenGL 兼容的小函数、空间变换、简单的矢量支持等。
文件语言大小版本开发者最后更新
lands/math productionJavaScript2.7KBv1.0.0YB2024-10-16查看
lands/math source codeJavaScript7.5KBv1.0.0YB2024-10-16查看
一、简要介绍 二、接口方法一、简要介绍

蓝紫数学库主要是提供一些与 OpenGL 兼容的小函数,以及一些开发中需要用到的小功能。我们并不想把这个库做得很复杂,提供一些简单功能即可。同时,为了提高计算效率,几乎不检查参数合法性。

二、接口方法 2.1、OpenGL 小函数
radians      = (degree) => degree * PI / 180;
mod          = (x, y) => x - y * floor(x / y);
fract        = (x) => x - floor(x);
clamp        = (x, a, b) => min(max(x, a), b);
clamp01      = (x) => min(max(x, 0), 1);
step         = (a, x) => x < a ? 0 : 1;
mix          = (a, b, x) => a * (1 - x) + b * x;
herm3        = (x) => x * x * (3. - 2. * x);
herm5        = (x) => ((6 * x - 15) * x + 10) * x * x * x;
smoothstep   = (a, b, x) => herm3(clamp((x - a) / (b - a), 0, 1));

其中,clamp01、herm3、herm5 不属于 OpenGL 提供的函数。

2.2、rot2(x, y, theta, x0, y0)

二维旋转,点 (x, y) 围绕 (x0, y0) 旋转 theta 弧度。(x0, y0) 缺省为坐标原点。返回旋转后的坐标:

var [x, y] = rot2(1, 1, .5);
// x == 0.39815702328616975
// y == 1.3570081004945758
2.3、project(pitch, yaw, perspective)

投影变换,将三维坐标投影为二维,perspective 为可选参数,代表透视投影。函数返回一个相机函数:

const cam = project(0.5, 0.5);
const [x, y] = cam(1, 1, 1);
// x == 0.39815702328616975
// y == 0.711461106733815
2.4、RNG(seed)

有状态随机数发生器:

const rand = RNG('hello');
const r = rand();
// r == 0.9423961526623255
2.5、vec2(x, y)

生成一个二维向量 [x, y],接口均是返回新对象:

2.6、vec3(x, y, z)

生成一个三维向量 [x, y, z],接口均是返回新对象:

2.7、mat4(array)

齐次坐标三维变换矩阵,一个具有 16 个元素的数组。array 参数可选,mat4() 缺省生成 identity 变换。

mat4 静态方法包括:

mat4 对象接口均是操作自身且返回自身,目前有如下接口: