Garry's Mod Wiki

Vector

List of all possible functions to manipulate vectors.

Created by Vector.

Type Name Description
number x or 1 The X component of the vector.
number y or 2 The Y component of the vector.
number z or 3 The Z component of the vector.
Metamethod Second Operand Description
__add Vector Returns new Vector with the result of addition.
__div number or Vector Returns new Vector with the result of division.
__eq any Compares 2 operands, if they both are Vector, compares each individual component.
__index number or string Gets the component of the Vector. Returns a number.
__mul number or Vector Returns new Vector with the result of multiplication.
__newindex number or string Sets the component of the Vector. Accepts number and string.
__sub Vector Returns new Vector with the result of subtraction.
__tostring Returns x y z.
__unm Returns new Vector with the result of negation.

Methods

Vector:Add( Vector vector )
Adds the values of the argument vector to the original vector. This function is the same as vector1 + vector2 without creating a new vector object, skipping object construction and garbage collection.
Angle Vector:Angle()
Returns an angle representing the normal of the vector.
Angle Vector:AngleEx( Vector up )
Returns the angle of this vector (normalized), but instead of assuming that up is Vector( 0, 0, 1 ) (Like Vector:Angle does) you can specify which direction is 'up' for the angle.
Vector Vector:Cross( Vector otherVector )
Calculates the cross product of this vector and the passed one. The cross product of two vectors is a 3-dimensional vector with a direction perpendicular (at right angles) to both of them (according to the right-hand rule), and magnitude equal to the area of parallelogram they span. This is defined as the product of the magnitudes, the sine of the angle between them, and unit (normal) vector n defined by the right-hand rule: :a × b = |a| |b| sin(θ) n̂ where a and b are vectors, and n̂ is a unit vector (magnitude of 1) perpendicular to both.
number Vector:Distance( Vector otherVector )
Returns the Euclidean distance between the vector and the other vector. This function is more expensive than Vector:DistToSqr. However, please see the notes for Vector:DistToSqr before using it as squared distances are not the same as euclidean distances.
number Vector:Distance2D( Vector otherVector )
Returns the Euclidean distance between the vector and the other vector in 2D space. The Z axis is ignored. This function is more expensive than Vector:Distance2DSqr. However, please see the notes for Vector:Distance2DSqr before using it as squared distances are not the same as Euclidean distances.
number Vector:Distance2DSqr( Vector otherVec )
Returns the squared distance between 2 vectors in 2D space, ignoring the Z axis. This is faster than Vector:Distance2D as calculating the square root is an expensive process. Squared distances should not be summed. If you need to sum distances, use Vector:Distance2D. When performing a distance check, ensure the distance being checked against is squared.
number Vector:DistToSqr( Vector otherVec )
Returns the squared distance of 2 vectors, this is quicker to call than Vector:Distance as DistToSqr does not need to calculate the square root, which is an expensive process. Squared distances should not be summed. If you need to sum distances, use Vector:Distance. When performing a distance check, ensure the distance being checked against is squared. See example code below.
Vector:Div( number divisor )
Divide the vector by the given number, that means x, y and z are divided by that value. This will change the value of the original vector, see example 2 for division without changing the value.
number Vector:Dot( Vector otherVector )
Returns the dot product of this vector and the passed one. The dot product of two vectors is the product of their magnitudes (lengths), and the cosine of the angle between them: a · b = |a| |b| cos(θ) where a and b are vectors. See Vector:Length for obtaining magnitudes. A dot product returns just the cosine of the angle if both vectors are normalized, and zero if the vectors are at right angles to each other.
number Vector:DotProduct( Vector Vector )
We advise against using this. It may be changed or removed in a future update. This is an alias of Vector:Dot. Use that instead. Returns the dot product of the two vectors.
Returns the negative version of this vector, i. e. a vector with every component to the negative value of itself. See also Vector:Negate.
Vector Vector:GetNormal()
We advise against using this. It may be changed or removed in a future update. Use Vector:GetNormalized instead. Returns a normalized version of the vector. This is a alias of Vector:GetNormalized.
Returns a normalized version of the vector. Normalized means vector with same direction but with length of 1. This does not affect the vector you call it on; to do this, use Vector:Normalize.
boolean Vector:IsEqualTol( Vector compare, number tolerance )
Returns if the vector is equal to another vector with the given tolerance.
boolean Vector:IsZero()
Checks whenever all fields of the vector are 0.
number Vector:Length()
Returns the Euclidean length of the vector: √(x² + y² + z²). This is a relatively expensive process since it uses the square root. It is recommended that you use Vector:LengthSqr whenever possible.
number Vector:Length2D()
Returns the length of the vector in two dimensions, without the Z axis. This is a relatively expensive process since it uses the square root. It is recommended that you use Vector:Length2DSqr whenever possible.
Returns the squared length of the vectors x and y value, x² + y². This is faster than Vector:Length2D as calculating the square root is an expensive process.
number Vector:LengthSqr()
Returns the squared length of the vector, x² + y² + z². This is faster than Vector:Length as calculating the square root is an expensive process.
Vector:Mul( number multiplier )
Scales the vector by the given number (that means x, y and z are multiplied by that value), a Vector (X, Y, and Z of each vector are multiplied) or a VMatrix (Transforms the vector by the matrix's rotation/translation).
Vector:Negate()
Negates this vector, i. e. sets every component to the negative value of itself. Same as Vector( -vec. x, -vec. y, -vec. z )
Vector:Normalize()
Normalizes the given vector. This changes the vector you call it on, if you want to return a normalized copy without affecting the original, use Vector:GetNormalized.
Vector:Random( number min = -1, number max = 1 )
Randomizes each element of this Vector object.
Vector:Rotate( Angle rotation )
Rotates a vector by the given angle. Doesn't return anything, but rather changes the original vector.
Vector:Set( Vector vector )
Copies the values from the second vector to the first vector.
Vector:SetUnpacked( number x, number y, number z )
Sets the x, y, and z of the vector.
Vector:Sub( Vector vector )
Substracts the values of the second vector from the orignal vector, this function can be used to avoid garbage collection.
table Vector:ToColor()
Translates the Vector (values ranging from 0 to 1) into a Color. This will also range the values from 0 - 1 to 0 - 255. x * 255 -> r y * 255 -> g z * 255 -> b This is the opposite of Color:ToVector
table Vector:ToScreen()
Returns where on the screen the specified position vector would appear. A related function is gui. ScreenToVector, which converts a 2D coordinate to a 3D direction. Should be called from a 3D rendering environment or after cam. Start3D or it may not work correctly. Errors in a render hook can make this value incorrect until the player restarts their game. Issue Tracker: 462cam. Start3D or 3D context cam. Start with non-default parameters incorrectly sets the reference FOV for this function, causing incorrect return values. This can be fixed by creating and ending a default 3D context (cam. Start3D with no arguments). Issue Tracker: 1404
table Vector:ToTable()
Returns the vector as a table with three elements.
Returns the x, y, and z of the vector.
boolean Vector:WithinAABox( Vector boxStart, Vector boxEnd )
Returns whenever the given vector is in a box created by the 2 other vectors.
Vector:Zero()
Sets x, y and z to 0.

Example

Indexing by named component.

local v = Vector( 1, 2, 3 ) print( v.x, v.y, v.z )
Output: 1 2 3

Example

Indexing by number (most efficient!).

local v = Vector( 1, 2, 3 ) print( v[1], v[2], v[3] )
Output: 1 2 3