From cfa086ce467f02489a0243209fae3b3eed6f1020 Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Sat, 26 Jun 2021 15:47:53 +0100 Subject: [PATCH] Vector3: add dot product --- .tests/Vector3/dot.test.lua | 36 ++++++++++++++++++++++++++++ worldeditadditions/utils/vector3.lua | 12 ++++++++++ 2 files changed, 48 insertions(+) create mode 100644 .tests/Vector3/dot.test.lua diff --git a/.tests/Vector3/dot.test.lua b/.tests/Vector3/dot.test.lua new file mode 100644 index 0000000..3f6f6b3 --- /dev/null +++ b/.tests/Vector3/dot.test.lua @@ -0,0 +1,36 @@ +local Vector3 = require("worldeditadditions.utils.vector3") + +describe("Vector3.dot", function() + it("should work with a positive vector", function() + local a = Vector3.new(3, 3, 3) + local b = Vector3.new(4, 5, 6) + assert.are.equal( + 45, + a:dot(b) + ) + end) + it("should work with a negative vector", function() + local a = Vector3.new(-4, -4, -4) + local b = Vector3.new(4, 5, 6) + assert.are.equal( + -60, + a:dot(b) + ) + end) + it("should work with a mixed vector", function() + local a = Vector3.new(-3, 3, -3) + local b = Vector3.new(7, 8, 9) + assert.are.equal( + -24, + a:dot(b) + ) + end) + it("should work with the dot_product alias", function() + local a = Vector3.new(-3, 3, -3) + local b = Vector3.new(7, 8, 9) + assert.are.equal( + -24, + a:dot_product(b) + ) + end) +end) diff --git a/worldeditadditions/utils/vector3.lua b/worldeditadditions/utils/vector3.lua index 7fa33df..a81464c 100644 --- a/worldeditadditions/utils/vector3.lua +++ b/worldeditadditions/utils/vector3.lua @@ -162,6 +162,18 @@ function Vector3.length(a) return math.sqrt(a:length_squared()) end +--- Calculates the dot product of this vector and another vector. +-- @param a Vector3 The first vector to operate on. +-- @param a Vector3 The second vector to operate on. +-- @returns number The dot product of this vector as a scalar value. +function Vector3.dot(a, b) + return a.x * b.x + a.y * b.y + a.z * b.z; +end +--- Alias of Vector3.dot. +function Vector3.dot_product(a, b) + return Vector3.dot(a, b) +end + --- Returns a new vector whose length clamped to the given length. -- The direction in which the vector is pointing is not changed. -- @param a Vector3 The vector to operate on.