UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

29 lines (28 loc) 773 B
"use strict"; import { Vector3 } from "three"; const _u = new Vector3(); const _v = new Vector3(); const _w = new Vector3(); const EPS = 1e-4; export function closestPointsBetweenLines(line1, line2, target) { _u.copy(line1.end).sub(line1.start); _v.copy(line2.end).sub(line2.start); _w.copy(line1.start).sub(line2.start); const a = _u.dot(_u); const b = _u.dot(_v); const c = _v.dot(_v); const d = _u.dot(_w); const e = _v.dot(_w); const D = a * c - b * b; let sc; let tc; if (D < EPS) { sc = 0; tc = b > c ? d / b : e / c; } else { sc = (b * e - c * d) / D; tc = (a * e - b * d) / D; } target.pointOnLine1.addVectors(line1.start, _u.multiplyScalar(sc)); target.pointOnLine2.addVectors(line2.start, _v.multiplyScalar(tc)); }