From 2de806521b18807ac218d7a4407443b7e36fe2a9 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sat, 16 Mar 2024 00:20:40 +0300 Subject: [PATCH 1/9] =?UTF-8?q?Create=208.3=20=D0=9C=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8C-Vector2&&Vector3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/8.3 Модуль-Vector2&&Vector3.md | 72 ++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 doc/8.3 Модуль-Vector2&&Vector3.md diff --git a/doc/8.3 Модуль-Vector2&&Vector3.md b/doc/8.3 Модуль-Vector2&&Vector3.md new file mode 100644 index 00000000..f94fc013 --- /dev/null +++ b/doc/8.3 Модуль-Vector2&&Vector3.md @@ -0,0 +1,72 @@ +# Вектора +## Плоскостной вектор vec2(x, y) +### Операции над векторами + + +```lua +function vector2:round(decimals: float|int) -> 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:vxld(vector: vec2) -> vec2 +``` +... + +```lua +function vector2:dot(vector: vec2) -> number +``` + + +```lua +function vector2:lerp(b: vec2, t: number; t∈[0,1]) -> vec2 +``` +Линейная интерполяция вектора + +```lua +function vector2:dist(vector: vec2) -> number +``` +Дистанция между двумя векторами + +```lua +function vector2:cross(vector: vec2) -> number +``` +Векторное произведение + +```lua +function vector2:rot(angle: number->rad, axis: str, convert2deg: bool) -> vec2 +``` +Поворот вектора + +`axis {string} - axis rotate around (x, y, or z)` + +`convert2deg {bool} .. if true => angle: number->deg .. else angle: number->rad` + +### Операции с векторами + +... + +## Пространственный вектор vec3(x, y, z) +### Операции с векторами + + From 5770d156d6c814a7dd23adbf4212d693a3f35392 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sat, 16 Mar 2024 00:23:11 +0300 Subject: [PATCH 2/9] Update vector2.lua --- res/modules/vector2.lua | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/res/modules/vector2.lua b/res/modules/vector2.lua index c0c9ccb8..3fb25023 100644 --- a/res/modules/vector2.lua +++ b/res/modules/vector2.lua @@ -163,21 +163,6 @@ function vector2:dist(vector) return result:len() end --- cross product for vec2 (in 3D space) --- @param {vec2} v - The other vec2 --- @return {number} -> float || integer --- @usage --- local v1 = vec2(10, 15) --- local v2 = vec2(15, 10) --- print(v1:cross(v2)) -- Output: -125 -function vector2:cross(v) - if type(v) == "number" then - print("\n(( TypeError : cross ))\nType arg cross(vec2)") - error("Invalid input argument. Expected a vec2 object.\n") - end - return self.x * v.y - self.y * v.x -end - -- rotate vec2 -- @param angle {number} -- @param axis {string} - axis rotate around (x, y, or z) From 52f38242af955dec046811b036cd3195cd580021 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sat, 16 Mar 2024 00:26:15 +0300 Subject: [PATCH 3/9] Update --- doc/{ => ru}/8.3 Модуль-Vector2&&Vector3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename doc/{ => ru}/8.3 Модуль-Vector2&&Vector3.md (91%) diff --git a/doc/8.3 Модуль-Vector2&&Vector3.md b/doc/ru/8.3 Модуль-Vector2&&Vector3.md similarity index 91% rename from doc/8.3 Модуль-Vector2&&Vector3.md rename to doc/ru/8.3 Модуль-Vector2&&Vector3.md index f94fc013..c4c80efe 100644 --- a/doc/8.3 Модуль-Vector2&&Vector3.md +++ b/doc/ru/8.3 Модуль-Vector2&&Vector3.md @@ -36,7 +36,7 @@ function vector2:vxld(vector: vec2) -> vec2 ```lua function vector2:dot(vector: vec2) -> number ``` - +Векторное (внутреннее) произведение ```lua function vector2:lerp(b: vec2, t: number; t∈[0,1]) -> vec2 @@ -51,7 +51,7 @@ function vector2:dist(vector: vec2) -> number ```lua function vector2:cross(vector: vec2) -> number ``` -Векторное произведение +Векторное (внешнее) произведение ```lua function vector2:rot(angle: number->rad, axis: str, convert2deg: bool) -> vec2 From 3caad4200d21f65a07bc39c7f3a995fd573b0f4e Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sat, 16 Mar 2024 00:31:06 +0300 Subject: [PATCH 4/9] delete vxld() in vector3.lua --- res/modules/vector3.lua | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/res/modules/vector3.lua b/res/modules/vector3.lua index a5a731b7..dab2ac6c 100644 --- a/res/modules/vector3.lua +++ b/res/modules/vector3.lua @@ -160,19 +160,6 @@ function vector3:abtw(vector) return math.acos(dot_prod / len_prod) 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 From 513d6b75ae40cd3e2990f609ec090a55b7d08224 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:47:33 +0300 Subject: [PATCH 5/9] =?UTF-8?q?Update=208.3=20=D0=9C=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8C-Vector2&&Vector3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/ru/8.3 Модуль-Vector2&&Vector3.md | 49 ++++++++++++++++++--------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/doc/ru/8.3 Модуль-Vector2&&Vector3.md b/doc/ru/8.3 Модуль-Vector2&&Vector3.md index c4c80efe..245699f7 100644 --- a/doc/ru/8.3 Модуль-Vector2&&Vector3.md +++ b/doc/ru/8.3 Модуль-Vector2&&Vector3.md @@ -1,10 +1,9 @@ -# Вектора ## Плоскостной вектор vec2(x, y) ### Операции над векторами ```lua -function vector2:round(decimals: float|int) -> round[vec2] +function vector2:round(decimals: number) -> round[vec2] ``` Округление компонентов вектора ```lua @@ -28,18 +27,18 @@ function vector2:proj(vector: vec2) -> vec2 ``` Проекция вектора -```lua -function vector2:vxld(vector: vec2) -> vec2 -``` -... - ```lua function vector2:dot(vector: vec2) -> number ``` Векторное (внутреннее) произведение ```lua -function vector2:lerp(b: vec2, t: number; t∈[0,1]) -> vec2 +function vector2:lerp( + --Целевой вектор + b: vec2, + --Интерполяционный коэффициент (от 0 до 1) + t: number + ) -> vec2 ``` Линейная интерполяция вектора @@ -54,19 +53,37 @@ function vector2:cross(vector: vec2) -> number Векторное (внешнее) произведение ```lua -function vector2:rot(angle: number->rad, axis: str, convert2deg: bool) -> vec2 +function vector2:rot( + --Угол поворота вектора на заданный угол (в радианах) + angle: number->rad, + --Вращение вектора относительно осей ("x", "y", "z") + axis: str, + --Если истина, то угол поворота певеодится автоматический из градусы в радианы + convert2deg: bool + ) -> vec2 ``` Поворот вектора -`axis {string} - axis rotate around (x, y, or z)` - -`convert2deg {bool} .. if true => angle: number->deg .. else angle: number->rad` - ### Операции с векторами -... +```lua + local vec2 = require("res:vector2") -## Пространственный вектор vec3(x, y, z) -### Операции с векторами + 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) +``` From a36e6e8ae81c33702ff98fb9c9c32f4e91ad097a Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:49:47 +0300 Subject: [PATCH 6/9] =?UTF-8?q?Update=208.3=20=D0=9C=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8C-Vector2&&Vector3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/ru/8.3 Модуль-Vector2&&Vector3.md | 104 +++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/doc/ru/8.3 Модуль-Vector2&&Vector3.md b/doc/ru/8.3 Модуль-Vector2&&Vector3.md index 245699f7..d7545c74 100644 --- a/doc/ru/8.3 Модуль-Vector2&&Vector3.md +++ b/doc/ru/8.3 Модуль-Vector2&&Vector3.md @@ -1,4 +1,5 @@ -## Плоскостной вектор vec2(x, y) +# Вектора +## Vector2 ### Операции над векторами @@ -87,3 +88,104 @@ function vector2:rot( 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 + +``` + From 219b440204d429ec06fe74d93f8c154f7f65deb1 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:50:09 +0300 Subject: [PATCH 7/9] =?UTF-8?q?Update=208.3=20=D0=9C=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8C-Vector2&&Vector3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/ru/8.3 Модуль-Vector2&&Vector3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ru/8.3 Модуль-Vector2&&Vector3.md b/doc/ru/8.3 Модуль-Vector2&&Vector3.md index d7545c74..a1ea4d1c 100644 --- a/doc/ru/8.3 Модуль-Vector2&&Vector3.md +++ b/doc/ru/8.3 Модуль-Vector2&&Vector3.md @@ -91,7 +91,7 @@ function vector2:rot( ## Vector3 -### Операции с векторами +### Операции над векторами ```lua function vector3:round(decimals: number) -> round[vec3] From 420ce2bc15daa2675e88bef0a51ba1da25b24957 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:50:36 +0300 Subject: [PATCH 8/9] Update vector2.lua --- res/modules/vector2.lua | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/res/modules/vector2.lua b/res/modules/vector2.lua index 3fb25023..dad44ee1 100644 --- a/res/modules/vector2.lua +++ b/res/modules/vector2.lua @@ -163,6 +163,21 @@ function vector2:dist(vector) return result:len() end +-- cross product for vec2 (in 3D space) +-- @param {vec2} v - The other vec2 +-- @return {number} -> float || integer +-- @usage +-- local v1 = vec2(10, 15) +-- local v2 = vec2(15, 10) +-- print(v1:cross(v2)) -- Output: -125 +function vector2:cross(v) + if type(v) == "number" then + print("\n(( TypeError : cross ))\nType arg cross(vec2)") + error("Invalid input argument. Expected a vec2 object.\n") + end + return self.x * v.y - self.y * v.x +end + -- rotate vec2 -- @param angle {number} -- @param axis {string} - axis rotate around (x, y, or z) @@ -217,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) From 8f6555da7fe9d0004b971dd6db1df19287d7a3a6 Mon Sep 17 00:00:00 2001 From: Cogitary <84321459+DoubleDataStack@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:51:01 +0300 Subject: [PATCH 9/9] Update vector3.lua --- res/modules/vector3.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/res/modules/vector3.lua b/res/modules/vector3.lua index dab2ac6c..855cac3b 100644 --- a/res/modules/vector3.lua +++ b/res/modules/vector3.lua @@ -160,6 +160,7 @@ function vector3:abtw(vector) return math.acos(dot_prod / len_prod) end + -- rot vec3 -- @param angle {number} -> float || int -- @param axis {string} .. if nil => rot axis z