Created
April 17, 2022 09:16
-
-
Save izquiratops/671d63791e7e8fbf2d35ce2f4fa0845a to your computer and use it in GitHub Desktop.
3D vector math utils
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const clamp = (v, min, max) => v < min ? min : (v > max ? max : v); | |
const scale = (v, in_min, in_max, out_min, out_max) => out_min + ((out_max) - out_min) * (((v) - in_min) / ((in_max) - in_min)); | |
const anglemod = (r) => Math.atan2(Math.sin(r), Math.cos(r)); | |
const vec3 = (x = 0, y = 0, z = 0) => ({x, y, z}); | |
const vec3_rotate_yaw_pitch = (p, yaw, pitch) => vec3_rotate_y(vec3_rotate_x(p, pitch), yaw); | |
const vec3_rotate_y = (p, rad) => vec3(p.z * Math.sin(rad) + p.x * Math.cos(rad), p.y, p.z * Math.cos(rad) - p.x * Math.sin(rad)); | |
const vec3_rotate_x = (p, rad) => vec3(p.x, p.y * Math.cos(rad) - p.z * Math.sin(rad), p.y * Math.sin(rad) + p.z * Math.cos(rad)); | |
const vec3_2d_angle = (a, b) => Math.atan2(b.x - a.x, b.z - a.z); | |
const vec3_clone = (a) => vec3(a.x,a.y,a.z); | |
const vec3_length = (a) => Math.hypot(a.x,a.y,a.z); | |
const vec3_dist = (a, b) => vec3_length(vec3_sub(a, b)); | |
const vec3_dot = (a, b) => (a.x * b.x + a.y * b.y + a.z * b.z); | |
const vec3_add = (a, b) => vec3(a.x + b.x, a.y + b.y, a.z + b.z); | |
const vec3_sub = (a, b) => vec3(a.x - b.x, a.y - b.y, a.z - b.z); | |
const vec3_mul = (a, b) => vec3(a.x * b.x, a.y * b.y, a.z * b.z); | |
const vec3_mulf = (a, b) => vec3(a.x * b, a.y * b, a.z * b); | |
const vec3_cross = (a, b) => vec3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); | |
const vec3_normalize = (v) => vec3_mulf(v, 1/vec3_length(v)); | |
const vec3_face_normal = (v0, v1, v2) => vec3_normalize(vec3_cross(vec3_sub(v0, v1), vec3_sub(v2, v1))); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment