1 -- Small package of 3D vector functions
6 local vec = {v[1], v[2], v[3]}
11 local function addvec(v, w)
12 return new{v[1]+w[1], v[2]+w[2], v[3]+w[3]}
15 local function subvec(v, w)
16 return new{v[1]-w[1], v[2]-w[2], v[3]-w[3]}
19 local function addnum(v, n)
20 return new{v[1] + n, v[2] + n, v[3] + n}
23 local function subnum(v, n)
24 return new{v[1] - n, v[2] - n, v[3] - n}
27 local function addany(v, x)
28 if type(x) == "table" then
35 local function subany(v, x)
36 if type(x) == "table" then
43 local function scale(v, n)
44 return new{v[1]*n, v[2]*n, v[3]*n}
47 local function dot(v, w)
48 return v[1]*w[1] +v[2]*w[2] + v[3]*w[3]
51 local function mulany(v, x)
52 if type(x) == "table" then
59 local function cross(v, w)
60 return new {v[2]*w[3] - w[2]*v[3],
61 w[1]*v[3] - v[1]*w[3],
62 v[1]*w[2] - w[1]*v[2]}
65 local function scaleinv(v,n)
66 return new{v[1]/n, v[2]/n, v[3]/n}
73 local function norm2(v)
77 local function norm(v)
78 return math.sqrt(norm2(v))
81 local function normalize(v)
85 local function vectostring(v)
86 return "{" .. v[1] .. ", " .. v[2] .. ", " .. v[3] .. "}"
94 mt.__tostring = vectostring
101 normalize = normalize,