/
githubmirror
/
vgstation13
Обзор
Документация
Войти
/
githubmirror
/
vgstation13
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
Bleeding-Edge
tgui/packages/common/vector.ts
51 строка
1 KB
ShiftyRail
Byond 516 v2.0 (#37553)
12 май 2025, 08:50
Не верифицирован
12 май 2025, 08:50
d79c1fe
Код
Авторство
О чём код?
/** * N-dimensional vector manipulation functions. * * Vectors are plain number arrays, i.e. [x, y, z]. * * @file * @copyright 2020 Aleksej Komarov * @license MIT */ import { map, reduce, zip } from './collections'; const ADD = (a: number, b: number): number => a + b; const SUB = (a: number, b: number): number => a - b; const MUL = (a: number, b: number): number => a * b; const DIV = (a: number, b: number): number => a / b; export type Vector = number[]; export const vecAdd = (...vecs: Vector[]): Vector => { return map(zip(...vecs), (x) => reduce(x, ADD)); }; export const vecSubtract = (...vecs: Vector[]): Vector => { return map(zip(...vecs), (x) => reduce(x, SUB)); }; export const vecMultiply = (...vecs: Vector[]): Vector => { return map(zip(...vecs), (x) => reduce(x, MUL)); }; export const vecDivide = (...vecs: Vector[]): Vector => { return map(zip(...vecs), (x) => reduce(x, DIV)); }; export const vecScale = (vec: Vector, n: number): Vector => { return map(vec, (x) => x * n); }; export const vecInverse = (vec: Vector): Vector => { return map(vec, (x) => -x); }; export const vecLength = (vec: Vector): number => { return Math.sqrt(reduce(vecMultiply(vec, vec), ADD)); }; export const vecNormalize = (vec: Vector): Vector => { const length = vecLength(vec); return map(vec, (c) => c / length); };