UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

46 lines (38 loc) 1.13 kB
import { v3_dot } from "../../../../../core/geom/vec3/v3_dot.js"; /** * * @param {function} random * @param {number[]} result * @param {number} result_offset * @param {number[]} normal * @param {number} normal_offset */ export function random_in_hemisphere( random, result, result_offset, normal, normal_offset ) { const nx = normal[normal_offset + 0]; const ny = normal[normal_offset + 1]; const nz = normal[normal_offset + 2]; const phi = Math.PI * 2 * random(); const cosTheta = random() * 2 - 1; const theta = Math.acos(cosTheta); const sinTheta = Math.sin(theta); //compute coordinates const x = sinTheta * Math.cos(phi); const y = sinTheta * Math.sin(phi); const z = cosTheta; if (v3_dot(x, y, z, nx, ny, nz) < 0) { result[result_offset] = -x; result[result_offset + 1] = -y; result[result_offset + 2] = -z; } else { //write the result result[result_offset] = x; result[result_offset + 1] = y; result[result_offset + 2] = z; } }