/vec3d

Primary LanguageLua

vec3d is a class library for 3d vectors.

This mod adds a 3d vector class to Minetest.

Some functions exist in two versions. One version returns a new vector, the other version modifys a vector.

Create a new vector

To create a new vector you have to use the method vec3d()

Example

local v = vec3d()      -- creates the vector {x = 0, y = 0, z = 0}
local v = vec3d(5,3,1) -- creates the vector {x = 5, y = 3, z = 1}

Access the componets

local x = v.x
local y = v.y
local z = v.z

Formatted output

If a vector is printed to the console with the print() command the output is formatted in the order x, y, z

Example

local v1 = vec3d(5, 3, 1)
print(v1)

The output is: (5, 3, 1)

Misc functions

vec3d:clone()

Creates a copy of a vector

local v1 = vec3d(10, 20, 2)
local v2 = v1:clone()
v2.x = 0
print(v1, v2)

Prints the output (10, 20, 2) (0, 20, 2)

vec3d:unpack()

Returns the single componets of the vector

local v1 = vec3d(10, 20, 2)
local x, y, z = v1:unpack()

Direction helpers

vec3d.up

  • returns new unit vector pointing up (+y)

vec3d.down

  • returns new unit vector pointing down (-y)

vec3d.right

  • returns new unit vector pointing right (+x)

vec3d.left

  • returns new unit vector pointing left (-x)

vec3d.forward

  • returns new unit vector pointing forward (+z)

vec3d.backward

  • returns new unit vector pointing backward (-z)

Basic arithmetics

This class has two ways for basic arithmetics.

Operators

The first uses regular math operators +, -, *, /. This way creates a new vector as result. Both operands can be a vector or a number.

Example

local v1 = vec3d(5, 3, 1)
local v2 = vec3d(2, 4, 6)
local v3 = v1 + v2
print(v3)

This prints (7, 7, 7)

local v1 = vec3d(5, 3, 1)
local v2 = v1 * 5
print(v2)

This prints (25, 15, 5)

Methodes

The second way uses a class methode to modify a vector. The class methodes don't create a new vector and is slightly faster.

x can be a vec3d or a number

vec3d:add(x)
vec3d:sub(x)
vec3d:mul(x)
vec3d:div(x)

Example

local v1 = vec3d(5, 3, 1)
local v2 = vec3d(2, 4, 6)
v1:add(v2)
print(v1)

This prints (7, 7, 7)

Comparing vectors

Vectors can be compared with ==

Example

local v1 = vec3d(10, 10, 10)
local v2 = vec3d(20, 20, 20)
print(v1 == v2)

Prints false to the console

Vector functions

vec3d.distance(a, b) vec3d:distance_to(x)

Return the distance between two vectors

Examples
local v1 = vec3d(10, 20, 2)
local v2 = vec3d(20, 30, 5)
print(vec3d.distance(v1, v2))
print(v1:distance_to(v2))

Both functions return 14.456832294801

vec3d:len()

Returns the real lenght of a vector

Examples
local v1 = vec3d(10, 20, 2)
print(v1:len())

Returns 22.449944320644

vec3d:lenSq()

Returns the squared lenght of a vector

Examples
local v1 = vec3d(10, 20, 2)
print(v1:lenSq())

Returns 504

vec3d:normalize() vec3d:normalized()

Normalizes a vector

Example
local v1 = vec3d(10, 20, 2)
v1:normalize()
print(v1)
---------------------------
local v1 = vec3d(10, 20, 2)
local v2 = v1:normalized()
print(v2)

Returns (0.4454354, 0.8908708, 0.08908708)

vec3d:round() vec3d:rounded()

Rounds a vector

Example
local v1 = vec3d(10.3, 20.7, 2.6)
v1:round()
print(v1)
---------------------------------
local v1 = vec3d(10.3, 20.7, 2.6)
local v2 = v1:rounded()
print(v2)

Returns (10, 21, 3)

vec3d:floor() vec3d:floored()

Rounds the vector down

Example
local v1 = vec3d(10.3, 20.7, 2.6)
v1:floor()
print(v1)
--------------------------------
local v1 = vec3d(10.3, 20.7, 2.6)
local v2 = v1:floored()
print(v2)

Returns (10, 20, 2)