# tes3vector4⚓︎

A set of 4 floating-point numbers.

## Properties⚓︎

### `w`⚓︎

The 1st value in the vector.

Returns:

• `result` (number)

### `x`⚓︎

The 2nd value in the vector.

Returns:

• `result` (number)

### `y`⚓︎

The 3rd value in the vector.

Returns:

• `result` (number)

### `z`⚓︎

The 4th value in the vector.

Returns:

• `result` (number)

## Methods⚓︎

### `__tostring`⚓︎

Converts the vector to a string with 2 decimal places.

``````local result = myObject:__tostring()
``````

Returns:

• `result` (string)

### `copy`⚓︎

Creates a copy of the vector.

``````local result = myObject:copy()
``````

Returns:

### `distance`⚓︎

Calculates the distance to another vector in the standard way, i.e., using the Euclidean distance.

``````local result = myObject:distance(vec)
``````

Parameters:

Returns:

• `result` (number)

### `distanceChebyshev`⚓︎

Calculates the distance to another vector, using the Chebyshev metric, which is defined as

``````math.max(math.abs(v1.x - v2.x), math.abs(v1.y - v2.y), math.abs(v1.z - v2.z), math.abs(v1.w - v2.w))
``````

This is useful for ensuring that the x, y, z, and w coordinates between two vectors are all (independently) within a certain distance from each other.

Here is a geometric description of the difference between the normal distance and the Chebyshev distance for two `tes3vector3`s `v1` and `v2`:

• If `v1:distance(v2) <= 1`, then `v2` is contained in a sphere around `v1` with radius 1 (i.e. diameter 2).
• If `v1:distanceChebyshev(v2) <= 1`, then `v2` is contained within a cube centered around `v1`, where the cube has length 2.
``````local result = myObject:distanceChebyshev(vec)
``````

Parameters:

Returns:

• `result` (number)

### `distanceManhattan`⚓︎

Calculates the distance to another vector, using the Manhattan (i.e. city block) metric. In the two-dimensional case, the Manhattan metric can be thought of as the distance that two taxis will have to travel if they're following a grid system. The formula for the Manhattan distance is

``````math.abs(v1.x - v2.x) + math.abs(v1.y - v2.y) + math.abs(v1.z - v2.z) + math.abs(v1.w - v2.w)
``````

This is useful for checking how far you'd actually have to move if you're only allowed to move along one axis at a time.

``````local result = myObject:distanceManhattan(vec)
``````

Parameters:

Returns:

• `result` (number)

### `length`⚓︎

Calculates the length of the vector.

``````local result = myObject:length()
``````

Returns:

• `result` (number)

## Functions⚓︎

### `new`⚓︎

Creates a new vector. If no parameters are provided, an empty set will be constructed.

``````local vector = tes3vector4.new(x, y, z, w)
``````

Parameters:

• `x` (number): Default: `0`.
• `y` (number): Default: `0`.
• `z` (number): Default: `0`.
• `w` (number): Default: `0`.

Returns:

## Math Operations⚓︎

### Addition (`+`)⚓︎

Left operand type Right operand type Result type Description
tes3vector4 tes3vector4 tes3vector4 Standard vector addition.

### Division (`/`)⚓︎

Left operand type Right operand type Result type Description
tes3vector4 number tes3vector4 Divides the vector by a scalar.

### Length (`#`)⚓︎

Result type Description
number Evaluates to the vector's length in game units.

### Multiplication (`*`)⚓︎

Left operand type Right operand type Result type Description
tes3vector4 tes3vector4 tes3vector4 The per-element multiplication of two vectors, also known as Hadamard product.
tes3vector4 number tes3vector4 Multiplies the vector by a scalar.

### Subtraction (`-`)⚓︎

Left operand type Right operand type Result type Description
tes3vector4 tes3vector4 tes3vector4 Standard vector subtraction.