UNPKG

@thi.ng/vectors

Version:

Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts

28 lines (27 loc) 905 B
import { dot, dot2, dot3 } from "./dot.js"; import { maddN, maddN2, maddN3 } from "./maddn.js"; import { mulN, mulN2, mulN3 } from "./muln.js"; import { setN, setN2, setN3 } from "./setn.js"; const refract = (out, a, n, eta) => { !out && (out = a); const d = dot(a, n); const k = 1 - eta * eta * (1 - d * d); return k < 0 ? setN(out, 0) : maddN(out, n, -(eta * d + Math.sqrt(k)), mulN(out, a, eta)); }; const refract2 = (out, a, n, eta) => { !out && (out = a); const d = dot2(a, n); const k = 1 - eta * eta * (1 - d * d); return k < 0 ? setN2(out, 0) : maddN2(out, n, -(eta * d + Math.sqrt(k)), mulN2(out, a, eta)); }; const refract3 = (out, a, n, eta) => { !out && (out = a); const d = dot3(a, n); const k = 1 - eta * eta * (1 - d * d); return k < 0 ? setN3(out, 0) : maddN3(out, n, -(eta * d + Math.sqrt(k)), mulN3(out, a, eta)); }; export { refract, refract2, refract3 };