A table that represents a 4-dimensional vector. Even though the vector has 4 components, it can be used for 2D and 3D vectors as well. Vectors are also used to store colors, Euler rotations, and quaternions.
The .x, .y, .z, .w keys can be used to read and write to the components individually. Alternatively, .r, .g, .b, .a can be used, which makes more sense for Vectors that store color data.
Vectors can be created by using the Vec()
global function. This is equivalent to calling Vector.Create().
Examples:
local pos = Vec()
Creates a vector with all components set to 0
local dir = Vec(0, 0, 1)
Creates a vector by specifying 3 components (4th component set to 0)
Addition, subtraction, multiplication, and division of vectors can be performed by using +
-
*
/
symbols.
Vector equality can be tested by using == and ~= operators.
NOTE: Many of the functions in Vector are written as static non-member functions because it may be easier to think of the operation that way instead of invoking a member function on a Vector instance. However, these functions may be called either way. For instance, you can take the max of two vectors like this max = Vector.Max(a, b)
but you can also do the exact same thing like this max = a:Max(b)
.
Create a new Vector. Instead of passing in individual components, you pass in another Vector instead.
Note: Use the global function Vec()
as a shorthand for Vector.Create()
.
Sig: vector = Vector.Create(x=0, y=0, z=0, w=0)
- Arg:
number x
X component - Arg:
number y
Y component - Arg:
number z
Z component - Arg:
number w
W component - Ret:
Vector vector
Newly created vector
Sig: vector = Vector.Create(src)
- Arg:
Vector src
Source vector to copy - Ret:
Vector vector
Newly created vector
Set the components of this Vector. If a provided component is nil, the vector will keep its original value for that component.
Sig: Vector:Set(x=nil, y=nil, z=nil, w=nil)
- Arg:
number x
X component - Arg:
number y
Y component - Arg:
number z
Z component - Arg:
number w
W component
Sig: Vector:Set(src)
- Arg:
Vector src
Source vector to copy
Make a clone of this vector.
Sig: clone = Vector:Clone()
- Ret:
Vector clone
Newly created clone
Take the dot product between two vectors.
Sig: dot = Vector.Dot(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
number dot
Dot product
Take the dot product between two 3D vectors (ignore the 4th component).
Sig: dot = Vector.Dot3(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
number dot
Dot product
Take the cross product of two 3D vectors.
Sig: cross = Vector.Cross(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
Vector cross
Cross product
Create a new vector by performing a component-wise linear interpolation between two vectors.
Sig: lerped = Vector.Lerp(a, b, alpha)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Arg:
number alpha
Interpolation factor (0 to 1) - Ret:
Vector lerped
Linearly interpolated result
Create a new Vector by taking the maximum of each component of two vectors.
Sig: max = Vector.Max(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
Vector max
Component-wise max
Create a new Vector by taking the minimum of each component of two vectors.
Sig: min = Vector.Min(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
Vector min
Component-wise min
Create a new Vector by clamping this vector between a min and max.
Sig: clamped = Vector:Clamp(min, max)
- Arg:
Vector min
Min vector - Arg:
Vector max
Max vector - Ret:
Vector clamped
Clamped vector
Normalize the vector.
Sig: normal = Vector:Normalize()
- Ret:
Vector normal
Normalized vector
Normalize the vector, ignoring the 4th component.
Sig: normal = Vector:Normalize3()
- Ret:
Vector normal
Normalized vector
Reflect this vector against a normal.
Sig: reflected = Vector:Reflect(normal)
- Arg:
Vector normal
Normal vector - Ret:
Vector reflected
Reflected vector
Smoothly move a source Vector toward a destination Vector. Framerate independent.
Sig: damped = Vector.Damp(source, target, smoothing, deltaTime)
- Arg:
Vector source
Source vector - Arg:
Vector target
Target vector - Arg:
number smoothing
Smoothing factor (0 - 1) Lower values will move slower. Try 0.005. - Arg:
number deltaTime
Delta time - Ret:
Vector damped
Damped vector
Rotate a vector around an axis.
Sig: rotated = Vector:Rotate(angle, axis)
- Arg:
number angle
Angle in degrees - Arg:
Vector axis
Axis of rotation - Ret:
Vector rotated
Rotated vector
Get the length of this Vector.
Alias: Magnitude
Sig: length = Vector:Length()
- Ret:
number length
Vector length/size/magnitude
Get the distance between two vectors.
Sig: dist = Vector.Distance(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
number dist
Distance between the two vectors
Get the squared distance between two vectors.
Sig: dist = Vector.Distance2(a, b)
- Arg:
Vector a
First vector - Arg:
Vector b
Second vector - Ret:
number dist
Squared distance between the two vectors
Get the angle between two vectors.
Sig: angle = Vector.Angle(a, b)
- Arg:
Vector a
First vector (must be normalized) - Arg:
Vector b
Second vector (must be normalized) - Ret:
number angle
Angle in degrees
Get the signed angle between two vectors.
Sig: angle = Vector.SignedAngle(a, b)
- Arg:
Vector a
First vector (must be normalized) - Arg:
Vector b
Second vector (must be normalized) - Ret:
number angle
Signed angle in degrees
Negate this vector. You can use the unary minus operator instead of calling this function (i.e. -myVector).
Sig: negated = Vector:Negate()
- Ret:
Vector negated
The negated vector