Sandbox: Lua: Math: Matrix - ov-studio/Vital.sandbox GitHub Wiki
━ What's the Objective?
Matrices are collection of variables represented in tabular format (Rows & Columns). Often we've have to deal with multiple coordinates when either dealing with general or complex mathematics; Matrices do help a lot to make the workflow easier in such scenarios. Moreover they are also widely used in games for representing element's positional/rotational matrix.
If you still have no idea how useful they are or where to apply/utilize them in the right way, then make sure to read: https://personalpages.manchester.ac.uk/staff/ctdodson/matrices.pdf
━ Operations
Addition
local cMatrix1, cMatrix2 = math.matrix({1, 1, 1, 1}, {1, 1, 1, 1}), math.matrix({2, 2, 2, 2}, {2, 2, 2, 2})
local resultant = cMatrix1 + cMatrix2
Subtraction
local cMatrix1, cMatrix2 = math.matrix({1, 1, 1, 1}, {1, 1, 1, 1}), math.matrix({2, 2, 2, 2}, {2, 2, 2, 2})
local resultant = cMatrix1 - cMatrix2
Multiplication
local cMatrix1, cMatrix2 = math.matrix({1, 1, 1, 1}, {1, 1, 1, 1}), math.matrix({2, 2, 2, 2}, {2, 2, 2, 2})
local resultant = cMatrix1 * cMatrix2
Division
local cMatrix1, cMatrix2 = math.matrix({1, 1, 1, 1}, {1, 1, 1, 1}), math.matrix({2, 2, 2, 2}, {2, 2, 2, 2})
local resultant = cMatrix1 / cMatrix2
━ APIs
━ math.matrix:getType() (Shared)
@Objective: Retrieve's instance's type.
local string: type = self:getType()
━ math.matrix() (Shared)
@Objective: Creates a matrix instance.
local matrix: cMatrix = math.matrix(
~: ...{~float: ...values}
)
━ math.matrix:destroy() (Shared)
@Objective: Destroys an existing matrix.
local bool: result = self:destroy()
━ math.matrix:scale() (Shared)
@Objective: Scales matrix w/ specified scale.
local matrix: self = self:scale(
float: scale
)
━ math.matrix:transform() (Shared)
@Objective: Transforms a valid location matrix.
--Note: All coordinates must be offsets, i.e, they must be relative
local matrix: cMatrix = self:transform(
matrix: rotationMatrix,
float: x,
float: y,
float: z
)