Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import {
addVector,
crossProduct,
dotProduct,
multiplyVector,
vectorLength
} from './vector'
export function snapRayToLine(ray, line) {
// Variables to record and compare
var u = ray.direction
var A = ray.origin
var v = line.direction
var B = line.origin
let n = crossProduct(v, u)
let AB = substractVector(B, A)
let dot = dotProduct(n, AB)
let nLength = vectorLength(n)
let distance = Math.abs(dot / nLength)
let t1 = dotProduct(crossProduct(v, n), AB) / dotProduct(n, n)
let t2 = dotProduct(crossProduct(u, n), AB) / dotProduct(n, n)
let M = addVector(A, multiplyVector(t1, u))
let N = addVector(B, multiplyVector(t2, v))
return { distance, pointOnRay: M, pointOnLine: N }
}
|