@thi.ng/vectors
Version:
Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts
28 lines (27 loc) • 905 B
JavaScript
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
};