Advertisement
mrsimb

Vector library for Lua (compressed)

Feb 10th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.44 KB | None | 0 0
  1. -- Vector library by mrsimb
  2. Vector={}Vector.protomt={}Vector.mt={}function Vector.protomt.__call(a,b,c,d)
  3. return Vector.new(b,c,d)end;function Vector.mt:__index(e)if type(e)=='number'
  4. then if e==1 then return self.x elseif e==2 then return self.y elseif e==3 then
  5. return self.z end end;rawget(self,e)end;function Vector.mt:__newindex(e,f)if
  6. type(e)=='number'then if e==1 then self.x=f elseif e==2 then self.y=f elseif e==
  7. 3 then self.z=f end else rawset(self,e,f)end end;function Vector.mt:__add(f)
  8. return Vector.add(Vector.copy(self),f)end;function Vector.mt:__sub(f)return
  9. Vector.sub(Vector.copy(self),f)end;function Vector.mt:__unm()return Vector.new(-
  10. self.x,-self.y,-self.z)end;function Vector.mt:__mul(g)return Vector.mul(Vector.
  11. copy(self),g)end;function Vector.mt:__div(g)return Vector.div(Vector.copy(self),
  12. g)end;function Vector.mt:__pow(g)return Vector.pow(Vector.copy(self),g)end;
  13. function Vector.mt:__eq(f)return Vector.eq(self,f)end;function Vector.mt:__lt(f)
  14. return Vector.lt(self,f)end;function Vector.mt:__le(f)return Vector.le(self,f)
  15. end;function Vector.mt:__tostring()return Vector.toString(self)end;function
  16. Vector:set(b,c,d)if type(b)=='table'then if Vector.isVector(b)then self.x=b.x or
  17. 0;self.y=b.y or 0;self.y=b.z or 0;return self end;self.x=b[1]or 0;self.y=b[2]or
  18. 0;self.z=b[3]or 0;return self end;self.x=b or 0;self.y=c or 0;self.z=d or 0;
  19. return self end;function Vector:copy()return Vector.new(self.x,self.y,self.z)end
  20. ;function Vector:toString()return self.x..', '..self.y..', '..self.z end;
  21. function Vector:toArray()return{self.x or 0,self.y or 0,self.z or 0}end;function
  22. Vector:add(b,c,d)if type(b)=='table'then if Vector.isVector(b)then self.x=self.x
  23. +(b.x or 0)self.y=self.y+(b.y or 0)self.y=self.y+(b.z or 0)return self end;self.
  24. x=self.x+(b[1]or 0)self.y=self.y+(b[2]or 0)self.z=self.z+(b[3]or 0)return self
  25. end;self.x=self.x+(b or 0)self.y=self.y+(c or 0)self.z=self.z+(d or 0)return
  26. self end;function Vector:sub(b,c,d)if type(b)=='table'then if Vector.isVector(b)
  27. then self.x=self.x-(b.x or 0)self.y=self.y-(b.y or 0)self.z=self.z-(b.z or 0)
  28. return self end;self.x=self.x-(b[1]or 0)self.y=self.y-(b[2]or 0)self.z=self.z-(b
  29. [3]or 0)return self end;self.x=self.x-(b or 0)self.y=self.y-(c or 0)self.z=self.
  30. z-(d or 0)return self end;function Vector:mul(g)self.x=self.x*(g or 0)self.y=
  31. self.y*(g or 0)self.z=self.z*(g or 0)return self end;function Vector:div(g)self.
  32. x=self.x/(g or 0)self.y=self.y/(g or 0)self.z=self.z/(g or 0)return self end;
  33. function Vector:pow(g)self.x=self.x^(g or 0)self.y=self.y^(g or 0)self.z=self.z^
  34. (g or 0)return self end;function Vector:eq(b,c,d)local h,i,j;if type(b)=='table'
  35. then if Vector.isVector(b)then h=b.x or 0;i=b.y or 0;j=b.z or 0 else h=b[1]or 0;
  36. i=b[2]or 0;j=b[3]or 0 end else h=b or 0;i=c or 0;j=d or 0 end;return self.x==h
  37. and self.y==i and self.z==j end;function Vector:lt(b,c,d)if type(b)=='table'then
  38. return Vector.mag(self)<Vector.mag(b)end;return Vector.mag(self)<b end;function
  39. Vector:le(b,c,d)if type(b)=='table'then return Vector.mag(self)<=Vector.mag(b)
  40. end;return Vector.mag(self)<=b end;function Vector:mag()return math.sqrt(Vector.
  41. magSq(self))end;function Vector:magSq()return self.x^2+self.y^2+self.z^2 end;
  42. function Vector:dist(f)local k=Vector.distSq(self,f)return math.sqrt(k)end;
  43. function Vector:distSq(f)local k=Vector.sub(Vector.copy(self),f)return Vector.
  44. magSq(k)end;function Vector:cross(f)return Vector.new(self.y*f.z-self.z*f.y,self
  45. .z*f.x-self.x*f.z,self.x*f.y-self.y*f.x)end;function Vector:dot(f)return self.x*
  46. f.x+self.y*f.y+self.z*f.z end;function Vector:norm()local l=Vector.mag(self)if l
  47. ==0 then return self end;return Vector.div(self,l)end;function Vector:limit(m)
  48. return Vector.mul(Vector.norm(self),m)end;function Vector:angle()return math.
  49. atan2(self.y,self.x)end;function Vector:angleBetween(f)return math.acos(Vector.
  50. dot(self,f)/(Vector.mag(self)*Vector.mag(f)))end;function Vector:rotate(h)local
  51. n=Vector.angle(self)+h;local l=Vector.mag(self)self.x=math.cos(n)*l;self.y=math.
  52. sin(n)*l;return self end;function Vector:lerp(b,c,d,g)if type(b)=='table'then if
  53. Vector.isVector(b)then return self.lerp(self,b.x,b.y,b.z,c)end;return self.lerp(
  54. self,b[1],b[2],b[3],c)end;self.x=self.x+(b-self.x)*g;self.y=self.y+(c-self.y)*g;
  55. self.z=self.z+(d-self.z)*g;return self end;function Vector.fromAngle(h)return
  56. Vector.new(math.cos(h),math.sin(h))end;function Vector.random2d()local h=math.
  57. random()*math.pi*2;return Vector.fromAngle(h)end;function Vector.random3d()local
  58. h=math.random()*math.pi*2;local o=math.sqrt(1-vz^2)*math.cos(h)local p=math.sqrt
  59. (1-vz^2)*math.sin(h)local vz=math.random()*2-1;return Vector.new(o,p,vz)end;
  60. function Vector.isVector(self)return getmetatable(self)==getmetatable(Vector)end
  61. ;function Vector.new(b,c,d)local q={}if type(b)=='table'then if Vector.isVector(
  62. b)then q.x=b.x or 0;q.y=b.y or 0;q.y=b.z or 0 else q.x=b[1]or 0;q.y=b[2]or 0;q.z
  63. =b[3]or 0 end else q.x=b or 0;q.y=c or 0;q.z=d or 0 end;q.set=Vector.set;q.copy=
  64. Vector.copy;q.toString=Vector.toString;q.toArray=Vector.toArray;q.add=Vector.add
  65. ;q.sub=Vector.sub;q.mul=Vector.mul;q.div=Vector.div;q.eq=Vector.eq;q.lt=Vector.
  66. lt;q.le=Vector.le;q.mag=Vector.mag;q.magSq=Vector.magSq;q.dist=Vector.dist;q.
  67. distSq=Vector.distSq;q.cross=Vector.cross;q.dot=Vector.dot;q.norm=Vector.norm;q.
  68. limit=Vector.limit;q.angle=Vector.angle;q.angleBetween=Vector.angleBetween;q.
  69. rotate=Vector.rotate;q.lerp=Vector.lerp;setmetatable(q,Vector.mt)return q end;
  70. setmetatable(Vector,Vector.protomt)
  71. -- Vector library by mrsimb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement