From d04c41ad80650822be0ff3d18f253a0dbd570116 Mon Sep 17 00:00:00 2001 From: Paramat Date: Thu, 21 Dec 2017 19:57:42 +0000 Subject: Vector functions: Fix vector.direction() function, improve documentation (#6801) vector.direction() now returns a normalised vector with direction p1 to p2. --- builtin/common/vector.lua | 31 +++++------------------------- doc/lua_api.txt | 48 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua index 0549f9a56..c3d380ed3 100644 --- a/builtin/common/vector.lua +++ b/builtin/common/vector.lua @@ -63,34 +63,13 @@ function vector.distance(a, b) end function vector.direction(pos1, pos2) - local x_raw = pos2.x - pos1.x - local y_raw = pos2.y - pos1.y - local z_raw = pos2.z - pos1.z - local x_abs = math.abs(x_raw) - local y_abs = math.abs(y_raw) - local z_abs = math.abs(z_raw) - if x_abs >= y_abs and - x_abs >= z_abs then - y_raw = y_raw * (1 / x_abs) - z_raw = z_raw * (1 / x_abs) - x_raw = x_raw / x_abs - end - if y_abs >= x_abs and - y_abs >= z_abs then - x_raw = x_raw * (1 / y_abs) - z_raw = z_raw * (1 / y_abs) - y_raw = y_raw / y_abs - end - if z_abs >= y_abs and - z_abs >= x_abs then - x_raw = x_raw * (1 / z_abs) - y_raw = y_raw * (1 / z_abs) - z_raw = z_raw / z_abs - end - return {x=x_raw, y=y_raw, z=z_raw} + return vector.normalize({ + x = pos2.x - pos1.x, + y = pos2.y - pos1.y, + z = pos2.z - pos1.z + }) end - function vector.add(a, b) if type(b) == "table" then return {x = a.x + b.x, diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 7d568b6e1..0637c346b 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2248,25 +2248,43 @@ The following functions provide escape sequences: Spatial Vectors --------------- -* `vector.new(a[, b, c])`: returns a vector: +For the following functions, `v`, `v1`, `v2` are vectors, `p1`, `p2` are positions: + +* `vector.new(a[, b, c])`: + * Returns a vector. * A copy of `a` if `a` is a vector. - * `{x = a, y = b, z = c}`, if all `a, b, c` are defined -* `vector.direction(p1, p2)`: returns a vector -* `vector.distance(p1, p2)`: returns a number -* `vector.length(v)`: returns a number -* `vector.normalize(v)`: returns a vector -* `vector.floor(v)`: returns a vector, each dimension rounded down -* `vector.round(v)`: returns a vector, each dimension rounded to nearest int -* `vector.apply(v, func)`: returns a vector -* `vector.equals(v1, v2)`: returns a boolean -* `vector.sort(v1, v2)`: returns minp, maxp vectors of the cuboid defined by v1 and v2 + * `{x = a, y = b, z = c}`, if all of `a`, `b`, `c` are defined numbers. +* `vector.direction(p1, p2)`: + * Returns a vector of length 1 with direction `p1` to `p2`. + * If `p1` and `p2` are identical, returns `{x = 0, y = 0, z = 0}`. +* `vector.distance(p1, p2)`: + * Returns zero or a positive number, the distance between `p1` and `p2`. +* `vector.length(v)`: + * Returns zero or a positive number, the length of vector `v`. +* `vector.normalize(v)`: + * Returns a vector of length 1 with direction of vector `v`. + * If `v` has zero length, returns `{x = 0, y = 0, z = 0}`. +* `vector.floor(v)`: + * Returns a vector, each dimension rounded down. +* `vector.round(v)`: + * Returns a vector, each dimension rounded to nearest integer. +* `vector.apply(v, func)`: + * Returns a vector where the function `func` has been applied to each component. +* `vector.equals(v1, v2)`: + * Returns a boolean, `true` if the vectors are identical. +* `vector.sort(v1, v2)`: + * Returns in order minp, maxp vectors of the cuboid defined by `v1`, `v2`. For the following functions `x` can be either a vector or a number: -* `vector.add(v, x)`: returns a vector -* `vector.subtract(v, x)`: returns a vector -* `vector.multiply(v, x)`: returns a scaled vector or Schur product -* `vector.divide(v, x)`: returns a scaled vector or Schur quotient +* `vector.add(v, x)`: + * Returns a vector. +* `vector.subtract(v, x)`: + * Returns a vector. +* `vector.multiply(v, x)`: + * Returns a scaled vector or Schur product. +* `vector.divide(v, x)`: + * Returns a scaled vector or Schur quotient. Helper functions ---------------- -- cgit v1.2.3