Advertisement
Guest User

vector

a guest
Dec 22nd, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.48 KB | None | 0 0
  1.  
  2. local vector = {
  3.     add = function( self, o )
  4.         return vector.new(
  5.             self.x + o.x,
  6.             self.y + o.y,
  7.             self.z + o.z
  8.         )
  9.     end,
  10.     sub = function( self, o )
  11.         return vector.new(
  12.             self.x - o.x,
  13.             self.y - o.y,
  14.             self.z - o.z
  15.         )
  16.     end,
  17.     mul = function( self, m )
  18.         return vector.new(
  19.             self.x * m,
  20.             self.y * m,
  21.             self.z * m
  22.         )
  23.     end,
  24.     dot = function( self, o )
  25.         return self.x*o.x + self.y*o.y + self.z*o.z
  26.     end,
  27.     cross = function( self, o )
  28.         return vector.new(
  29.             self.y*o.z - self.z*o.y,
  30.             self.z*o.x - self.x*o.z,
  31.             self.x*o.y - self.y*o.x
  32.         )
  33.     end,
  34.     length = function( self )
  35.         return math.sqrt( self.x*self.x + self.y*self.y + self.z*self.z )
  36.     end,
  37.     normalize = function( self )
  38.         return self:mul( 1 / self:length() )
  39.     end,
  40.     round = function( self, nTolerance )
  41.         nTolerance = nTolerance or 1.0
  42.         return vector.new(
  43.             math.floor( (self.x + (nTolerance * 0.5)) / nTolerance ) * nTolerance,
  44.             math.floor( (self.y + (nTolerance * 0.5)) / nTolerance ) * nTolerance,
  45.             math.floor( (self.z + (nTolerance * 0.5)) / nTolerance ) * nTolerance
  46.         )
  47.     end,
  48.     tostring = function( self )
  49.         return self.x..","..self.y..","..self.z
  50.     end,
  51. }
  52.  
  53. local vmetatable = {
  54.     __index = vector,
  55.     __add = vector.add,
  56.     __sub = vector.sub,
  57.     __mul = vector.mul,
  58.     __unm = function( v ) return v:mul(-1) end,
  59.     __tostring = vector.tostring,
  60. }
  61.  
  62. function new( x, y, z )
  63.     local v = {
  64.         x = x or 0,
  65.         y = y or 0,
  66.         z = z or 0
  67.     }
  68.     setmetatable( v, vmetatable )
  69.     return v
  70. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement