# Vectors

Five general functions to assist in the creation and manipulation of vectors are built into FISH.

Vector types can be 2-dimensional, or 3-dimensional.

Vector types can be created with the `vector`

intrinsic (using two or three arguments), or by using `(x,y)`

or `(x,y,z)`

syntax.

Component Access

Vector components can be accessed (for get or set) using parenthesis and a single argument of 1, 2, or 3.

They can also be be accessed using the c -> operator and the accessors `x`

, `y`

, or `z`

, either to retreive or assign a single component of the vector.

```
local a = vector(1.0,2.1,3.0)
local b = (4.5,6.7)
local c = a(2) ; c = 2.1
local d = b->y ; d = 6.7
a(3) = 2.5 ; a = (1.0,2.1,2.5)
a->x = 1.5 ; a = (1.5,2.1,2.5)
```

See Member Access Operator for obtaining components from vector *types* returned from FISH functions.

Mathematical Operations

The mathematical operators /, *, +, - are allowed between two vectors of the same type. Each of these operates on a component-b`y`-component basis. For example, v1 * v2 returns a vector (v1.x * v2.x, v1.y * v2.y, v1.z * v2.z). The * operator is available between a vector and a number (integer or floating-point). The / operator is also available between a vector and a number.

Please see Arithmetic for a complete table of operator support.

A few useful library functions for vectors are: `math.cross`

, `math.dot`

, `math.mag`

, `math.mag2`

, or `math.unit`

.

These are found in the Math Utilities section; and `vector`

is in the Constructors section.

Iteration

Vectors are an iterable type. This means you can use it as the target of a loop foreach statement (see Loop ForEach) and can be split (see Splitting). Each component is iterated through in order.

Was this helpful? ... | PFC © 2021, Itasca | Updated: Feb 25, 2024 |