diff --git a/doc/ru/8.3 Модуль-Vector2&&Vector3.md b/doc/ru/8.3 Модуль-Vector2&&Vector3.md new file mode 100644 index 00000000..a1ea4d1c --- /dev/null +++ b/doc/ru/8.3 Модуль-Vector2&&Vector3.md @@ -0,0 +1,191 @@ +# Вектора +## Vector2 +### Операции над векторами + + +```lua +function vector2:round(decimals: number) -> round[vec2] +``` +Округление компонентов вектора +```lua +function vector2:len() -> number +``` +Длина вектора + +```lua +function vector2:norm() -> number +``` +Нормализация вектора + +```lua +function vector2:abtw(vector: vec2) -> number +``` +Угол между двумя векторами в радианах + + +```lua +function vector2:proj(vector: vec2) -> vec2 +``` +Проекция вектора + +```lua +function vector2:dot(vector: vec2) -> number +``` +Векторное (внутреннее) произведение + +```lua +function vector2:lerp( + --Целевой вектор + b: vec2, + --Интерполяционный коэффициент (от 0 до 1) + t: number + ) -> vec2 +``` +Линейная интерполяция вектора + +```lua +function vector2:dist(vector: vec2) -> number +``` +Дистанция между двумя векторами + +```lua +function vector2:cross(vector: vec2) -> number +``` +Векторное (внешнее) произведение + +```lua +function vector2:rot( + --Угол поворота вектора на заданный угол (в радианах) + angle: number->rad, + --Вращение вектора относительно осей ("x", "y", "z") + axis: str, + --Если истина, то угол поворота певеодится автоматический из градусы в радианы + convert2deg: bool + ) -> vec2 +``` +Поворот вектора + +### Операции с векторами + +```lua + local vec2 = require("res:vector2") + + local v1 = vec2(5, 10) + local v2 = vec2(10, 15) + + -- vec2 .. vec2 + sum_vectors = v1 + v2 -- (15, 25) + sub_vectors = v1 - v2 -- (-5, -5) + mul_vectors = v1 * v2 -- (50, 150) + div_vectors = v1 / v2 -- (0.5, 0.66667.) + pow_vectors = v1 ^ v2 -- (9765625, 1e+15) + + --vec2 .. scalar + sum_vec2_scalar = v1 + 10 -- (15, 25) + sub_vec2_scalar = v1 - 12 -- (-7, -2) + mul_vec2_scalar = v1 * 20 -- (100, 200) + div_vec2_scalar = v1 / 1 -- (5, 10) + pow_vec2_scalar= v1 ^ 2 -- (25, 100) +``` + + + +## Vector3 +### Операции над векторами + +```lua +function vector3:round(decimals: number) -> round[vec3] +``` +Округление компонентов вектора +```lua +function vector3:len() -> number +``` +Длина вектора + +```lua +function vector3:norm() -> number +``` +Нормализация вектора + +```lua +function vector3:abtw(vector: vec3) -> number +``` +Угол между двумя векторами в радианах + +```lua +function vector3:isParallel(vector: vec3) -> bool +``` +Параллельность вектора к другому вектору + + +```lua +function vector3:proj(vector: vec3) -> vec3 +``` +Проекция вектора +... + +```lua +function vector3:dot(vector: vec3) -> number +``` +Векторное (внутреннее) произведение + +```lua +function vector3:lerp( + --Целевой вектор + b: vec3, + --Интерполяционный коэффициент (от 0 до 1) + t: number + ) -> vec3 +``` +Линейная интерполяция вектора + +```lua +function vector3:dist(vector: vec3) -> number +``` +Дистанция между двумя векторами + +```lua +function vector3:dist2line(point1: vec3, point2: vec3) -> number +``` +Дистанция до линии + +```lua +function vector3:cross(vector: vec3) -> number +``` +Векторное (внешнее) произведение + +```lua +function vector3:rot( + --Угол поворота вектора на заданный угол (в радианах) + angle: number->rad, + --Вращение вектора относительно осей ("x", "y", "z") + axis: str, + --Если истина, то угол поворота певеодится автоматический из градусы в радианы + convert2deg: bool + ) -> vec2 +``` +Поворот вектора + +### Операции с векторами + +```lua + +local vec3 = require("res:vector3") + +local v1 = vec3(1, 2, 3) +local v2 = vec3(4, 5, 6) + +-- vec3.. vec3 +local sum_vectors = v1 + v2 -- (5, 7, 9) +local sub_vectors = v1 - v2 -- (-3, -3, -3) +local mul_vectors = v1 * v2 -- (4, 10, 18) +local div_vectors = v1 / v2 -- (0.25, 0.4, 0.5) +local pow_vectors = v1 ^ v2 -- (1, 32, 216) + +-- vec3.. scalar +local scalar_vector = v1 * 2 -- (2, 4, 6) +local scalar_number = 2 * v1 -- (2, 4, 6) +-- ..etc + +``` + diff --git a/res/modules/vector2.lua b/res/modules/vector2.lua index c0c9ccb8..dad44ee1 100644 --- a/res/modules/vector2.lua +++ b/res/modules/vector2.lua @@ -232,6 +232,28 @@ function vector2.__add(value_1, value_2) end +-- sub vec +function vector2.__sub(value_1, value_2) + if type(value_1) == "number" then + if value_1 == 0 then + return vector2:new(value_2.x, value_2.y) + else + return vector2:new(value_2.x - value_1, value_2.y - value_1) + end + else + if type(value_2) == "number" then + if value_2 == 0 then + return vector2:new(value_1.x, value_1.y) + else + return vector2:new(value_1.x - value_2, value_1.y - value_2) + end + else + return vector2:new(value_1.x - value_2.x, value_1.y - value_2.y) + end + end +end + + -- mul vec function vector2.__mul(value_1, value_2) diff --git a/res/modules/vector3.lua b/res/modules/vector3.lua index a5a731b7..855cac3b 100644 --- a/res/modules/vector3.lua +++ b/res/modules/vector3.lua @@ -161,18 +161,6 @@ function vector3:abtw(vector) end --- exclude vector3 --- @param vector {vec3} --- @return {vec3} -function vector3:vxld(vector) - if type(vector) == "number" then - print("\n(( TypeError : vxld(vec3) ))\nType arg vxld(vec3, vec3)") - error("Invalid input argument. Expected a vector3 object") - end - return vector3:new(self.x - vector.x, self.y - vector.y, self.z - vector.z) -end - - -- rot vec3 -- @param angle {number} -> float || int -- @param axis {string} .. if nil => rot axis z