-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathvectors.lua
54 lines (44 loc) · 1.2 KB
/
vectors.lua
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
--Methods for handling math between 2D vectors
-- Vectors are tables with x,y variables inside
-- Contributors: WarrenM
-- Add v1 to v2
function v_addv( v1, v2 )
return { x = v1.x + v2.x, y = v1.y + v2.y }
end
-- Subtract v2 from v1
function v_subv( v1, v2 )
return { x = v1.x - v2.x, y = v1.y - v2.y }
end
-- Multiply v by scalar n
function v_mults( v, n )
return { x = v.x * n, y = v.y * n }
end
-- Divide v by scalar n
function v_divs( v, n )
return { x = v.x / n, y = v.y / n }
end
-- Gets magnitude of v, squared (faster than v_mag)
function v_magsqr( v )
return ( v.x * v.x ) + ( v.y * v.y )
end
-- Compute magnitude of v
function v_mag( v )
return sqrt( ( v.x * v.x ) + ( v.y * v.y ) )
end
-- Normalizes v into a unit vector
function v_normalize( v )
local len = v_mag( v )
return { x = v.x / len, y = v.y / len }
end
-- Computes dot product between v1 and v2
function v_dot( v1, v2 )
return ( v1.x * v2.x ) + ( v1.y * v2.y )
end
-- Computes the reflection vector between vector v and normal n
-- NOTE : assumes v and n are normalized
function v_reflect( v, n )
local dot = v_dot( v, n )
local wdnv = v_mults( v_mults( n, dot ), 2.0 )
local refv = v_subv( v, wdnv )
return refv
end