# Number3

A Number3 contains 3 number values (X, Y & Z). It can represent different things in 3D space (points, vectors, forces).

## Constructors

Number3 ( number x, number y, number z )

Creates a Number3 with values x, y and z.

```local myNumber3 = Number3(1, 2, 3)
```

## Functions

Returns a copy of the Number3.

```local n1 = Number3(1, 0, 0)
local n2 = n1 -- n2 is not a copy but a direct reference to n1
n2.X = 10
print(n1.X) -- now n1.X == 10

-- using Copy:
local n1 = Number3(1, 0, 0)
local n2 = n1:Copy() -- n2 is a copy of n1, they're not the same Number3
n2.X = 10
print(n1.X) -- n1.X is still 1
```

Returns the cross product of both Number3s.

```local n1 = Number3(1, 0, 0)
local n2 = Number3(1, 0, 0)
local n3 = n1:Cross(n2)
```

Returns the dot product of both Number3s.

```local n1 = Number3(1, 0, 0)
local n2 = Number3(1, 0, 0)
local dot = n1:Dot(n2)
```

Normalizes the Number3.
Scales X, Y & Z for the Length to be 1.0.

```local someNumber3 = Number3(10,0,0)

-- NOTE: this also achieves normalization:
```
nil Rotate ( Number3 angles )

Rotates the Number3 using euler angles in parameters (in radians).

```local someNumber3 = Number3(0,0,1)
local pi = 3.1415
-- someNumber3 == Number3(0,0,-1), after a PI rotation around Y axis (180°)
```

## Properties

Number3's length.
Technically, the square root of the sum of X, Y & Z components.

```number3 = Number3(3,4,12)
print(number3.Length) -- prints 13
-- sqrt(3*3 + 4*4 + 12*12) = 13
```

This is the main reason why this attribute is exposed.
It can be used when comparing distances.

```-- compare distances between objects
local d2 = o1.Position - o2.Position
local d3 = o1.Position - o3.Position

if d2.SquaredLength < d3.SquaredLength then
print("o1 is closer to o2")
else
print("o1 is closer to o3")
end
-- Using Length instead of SquaredLength would give the same results,
-- but it would have to internally compute 2 square roots for nothing.
```

X value of the Number3.

```myNumber3.X = 42
print(myNumber3.X)
```

Y value of the Number3.

```myNumber3.Y = 42
print(myNumber3.Y)
```

Z value of the Number3.

```myNumber3.Z = 42
print(myNumber3.Z)
```