Skip to content

Instantly share code, notes, and snippets.

@MatthewBlanchard
Last active August 29, 2015 14:23
Show Gist options
  • Save MatthewBlanchard/8659d06b7e0e54df8386 to your computer and use it in GitHub Desktop.
Save MatthewBlanchard/8659d06b7e0e54df8386 to your computer and use it in GitHub Desktop.
local sqrt = math.sqrt
Vector3 = Object()
function Vector3:Vector3(x, y, z)
self.x = x or 0
self.y = y or 0
self.z = z or 0
end
Vector3.up = Vector3(0, 1, 0)
Vector3.right = Vector3(1, 0, 0)
Vector3.forward = Vector3(0, 0, -1)
function Vector3:__add(vec)
return Vector3:new(self.x + vec.x, self.y + vec.y, self.z + vec.z)
end
function Vector3:__sub(vec)
return Vector3:new(self.x - vec.x, self.y - vec.y, self.z - vec.z)
end
function Vector3:__mul(scalar)
return Vector3:new(self.x*scalar, self.y*scalar, self.z*scalar)
end
function Vector3:__tostring()
return self.x .. "\t" .. self.y .. "\t" .. self.z
end
function Vector3:normalized()
local mag = sqrt(self.x * self.x + self.y * self.y + self.z * self.z)
return Vector3:new(self.x/mag, self.y/mag, self.z/mag), mag
end
function Vector3:normalize()
local mag = sqrt(self.x * self.x + self.y * self.y + self.z * self.z)
return self.x/mag, self.y/mag, self.z/mag, mag
end
function Vector3:cross(vec)
return Vector3:new(
self.y * vec.z - vec.y * self.z,
self.z * vec.x - vec.z * self.x,
self.x * vec.y - vec.x * self.y
)
end
function Vector3:dot(vec)
return self.x*vec.x+self.y*vec.y+self.z*vec.z
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment