文件 | 语言 | 大小 | 版本 | 开发者 | 最后更新 | |
lands/math production | JavaScript | 2.7KB | v1.0.0 | YB | 2024-10-16 | 查看 |
lands/math source code | JavaScript | 7.5KB | v1.0.0 | YB | 2024-10-16 | 查看 |
const {fract, mod} = await Lan.import('math');
const a = fract(3.14159); // a == 0.14159
const r = mod(3.5, 0.3); // r == 0.2
const math = await Lan.import('math');
const a = math.fract(3.14159); // a == 0.14159
const r = math.mod(3.5, 0.3); // r == 0.2
import * as math from "https://ddzeb.com/lands/math";
const a = math.fract(3.14159);
const r = math.mod(3.5, 0.3);
const math = await import("https://ddzeb.com/lands/math");
const a = math.fract(3.14159);
const r = math.mod(3.5, 0.3);
蓝紫数学库主要是提供一些与 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 提供的函数。
二维旋转,点 (x, y) 围绕 (x0, y0) 旋转 theta 弧度。(x0, y0) 缺省为坐标原点。返回旋转后的坐标:
var [x, y] = rot2(1, 1, .5);
// x == 0.39815702328616975
// y == 1.3570081004945758
投影变换,将三维坐标投影为二维,perspective 为可选参数,代表透视投影。函数返回一个相机函数:
const cam = project(0.5, 0.5);
const [x, y] = cam(1, 1, 1);
// x == 0.39815702328616975
// y == 0.711461106733815
有状态随机数发生器:
const rand = RNG('hello');
const r = rand();
// r == 0.9423961526623255
生成一个二维向量 [x, y],接口均是返回新对象:
生成一个三维向量 [x, y, z],接口均是返回新对象:
齐次坐标三维变换矩阵,一个具有 16 个元素的数组。array 参数可选,mat4() 缺省生成 identity 变换。
mat4 静态方法包括:
mat4 对象接口均是操作自身且返回自身,目前有如下接口: