Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Vector library by mrsimb
- Vector={}Vector.protomt={}Vector.mt={}function Vector.protomt.__call(a,b,c,d)
- return Vector.new(b,c,d)end;function Vector.mt:__index(e)if type(e)=='number'
- then if e==1 then return self.x elseif e==2 then return self.y elseif e==3 then
- return self.z end end;rawget(self,e)end;function Vector.mt:__newindex(e,f)if
- type(e)=='number'then if e==1 then self.x=f elseif e==2 then self.y=f elseif e==
- 3 then self.z=f end else rawset(self,e,f)end end;function Vector.mt:__add(f)
- return Vector.add(Vector.copy(self),f)end;function Vector.mt:__sub(f)return
- Vector.sub(Vector.copy(self),f)end;function Vector.mt:__unm()return Vector.new(-
- self.x,-self.y,-self.z)end;function Vector.mt:__mul(g)return Vector.mul(Vector.
- copy(self),g)end;function Vector.mt:__div(g)return Vector.div(Vector.copy(self),
- g)end;function Vector.mt:__pow(g)return Vector.pow(Vector.copy(self),g)end;
- function Vector.mt:__eq(f)return Vector.eq(self,f)end;function Vector.mt:__lt(f)
- return Vector.lt(self,f)end;function Vector.mt:__le(f)return Vector.le(self,f)
- end;function Vector.mt:__tostring()return Vector.toString(self)end;function
- Vector:set(b,c,d)if type(b)=='table'then if Vector.isVector(b)then self.x=b.x or
- 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
- 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;
- return self end;function Vector:copy()return Vector.new(self.x,self.y,self.z)end
- ;function Vector:toString()return self.x..', '..self.y..', '..self.z end;
- function Vector:toArray()return{self.x or 0,self.y or 0,self.z or 0}end;function
- Vector:add(b,c,d)if type(b)=='table'then if Vector.isVector(b)then self.x=self.x
- +(b.x or 0)self.y=self.y+(b.y or 0)self.y=self.y+(b.z or 0)return self end;self.
- 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
- end;self.x=self.x+(b or 0)self.y=self.y+(c or 0)self.z=self.z+(d or 0)return
- self end;function Vector:sub(b,c,d)if type(b)=='table'then if Vector.isVector(b)
- 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)
- return self end;self.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 end;self.x=self.x-(b or 0)self.y=self.y-(c or 0)self.z=self.
- z-(d or 0)return self end;function Vector:mul(g)self.x=self.x*(g or 0)self.y=
- self.y*(g or 0)self.z=self.z*(g or 0)return self end;function Vector:div(g)self.
- x=self.x/(g or 0)self.y=self.y/(g or 0)self.z=self.z/(g or 0)return self end;
- function Vector:pow(g)self.x=self.x^(g or 0)self.y=self.y^(g or 0)self.z=self.z^
- (g or 0)return self end;function Vector:eq(b,c,d)local h,i,j;if type(b)=='table'
- 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;
- 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
- and self.y==i and self.z==j end;function Vector:lt(b,c,d)if type(b)=='table'then
- return Vector.mag(self)<Vector.mag(b)end;return Vector.mag(self)<b end;function
- Vector:le(b,c,d)if type(b)=='table'then return Vector.mag(self)<=Vector.mag(b)
- end;return Vector.mag(self)<=b end;function Vector:mag()return math.sqrt(Vector.
- magSq(self))end;function Vector:magSq()return self.x^2+self.y^2+self.z^2 end;
- function Vector:dist(f)local k=Vector.distSq(self,f)return math.sqrt(k)end;
- function Vector:distSq(f)local k=Vector.sub(Vector.copy(self),f)return Vector.
- magSq(k)end;function Vector:cross(f)return Vector.new(self.y*f.z-self.z*f.y,self
- .z*f.x-self.x*f.z,self.x*f.y-self.y*f.x)end;function Vector:dot(f)return self.x*
- f.x+self.y*f.y+self.z*f.z end;function Vector:norm()local l=Vector.mag(self)if l
- ==0 then return self end;return Vector.div(self,l)end;function Vector:limit(m)
- return Vector.mul(Vector.norm(self),m)end;function Vector:angle()return math.
- atan2(self.y,self.x)end;function Vector:angleBetween(f)return math.acos(Vector.
- dot(self,f)/(Vector.mag(self)*Vector.mag(f)))end;function Vector:rotate(h)local
- n=Vector.angle(self)+h;local l=Vector.mag(self)self.x=math.cos(n)*l;self.y=math.
- sin(n)*l;return self end;function Vector:lerp(b,c,d,g)if type(b)=='table'then if
- Vector.isVector(b)then return self.lerp(self,b.x,b.y,b.z,c)end;return self.lerp(
- 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;
- self.z=self.z+(d-self.z)*g;return self end;function Vector.fromAngle(h)return
- Vector.new(math.cos(h),math.sin(h))end;function Vector.random2d()local h=math.
- random()*math.pi*2;return Vector.fromAngle(h)end;function Vector.random3d()local
- h=math.random()*math.pi*2;local o=math.sqrt(1-vz^2)*math.cos(h)local p=math.sqrt
- (1-vz^2)*math.sin(h)local vz=math.random()*2-1;return Vector.new(o,p,vz)end;
- function Vector.isVector(self)return getmetatable(self)==getmetatable(Vector)end
- ;function Vector.new(b,c,d)local q={}if type(b)=='table'then if Vector.isVector(
- 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
- =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=
- Vector.copy;q.toString=Vector.toString;q.toArray=Vector.toArray;q.add=Vector.add
- ;q.sub=Vector.sub;q.mul=Vector.mul;q.div=Vector.div;q.eq=Vector.eq;q.lt=Vector.
- lt;q.le=Vector.le;q.mag=Vector.mag;q.magSq=Vector.magSq;q.dist=Vector.dist;q.
- distSq=Vector.distSq;q.cross=Vector.cross;q.dot=Vector.dot;q.norm=Vector.norm;q.
- limit=Vector.limit;q.angle=Vector.angle;q.angleBetween=Vector.angleBetween;q.
- rotate=Vector.rotate;q.lerp=Vector.lerp;setmetatable(q,Vector.mt)return q end;
- setmetatable(Vector,Vector.protomt)
- -- Vector library by mrsimb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement