Vetores 3D & Metatables (em Lua)
unknown
lua
3 years ago
1.3 kB
12
Indexable
-- declarando a função aqui para usar dentro da metatable
function criarVertice(x, y, z) end
-- agora para a metatable
local table_Vertices = {
-- Soma: v_1 + v_2
__add = function(a, b)
return criarVertice(
a.x + b.x,
a.y + b.y,
a.z + b.z
)
end,
-- Subtração: v_1 - v_2
__sub = function(a, b)
return criarVertice(
a.x - b.x,
a.y - b.y,
a.z - b.z
)
end,
-- Multiplicação: v_1 * v_2
__mul = function(a, b)
return (a.x * b.x) + (a.y * b.y) + (a.z * b.z)
end,
}
function criarVertice(x, y, z)
local v = {
x = x or 0,
y = y or 0,
z = z or 0,
}
setmetatable(v, table_Vertices)
-- Dependendo da situação é bom fazer sem passar por referência:
-- local v = setmetatable(v, table_Vertices)
return v
end
os.execute("cls||clear") --Limpa tela em Unix ou Windows
a = criarVertice(10, 5, 15)
b = criarVertice(5, 5)
c = a + b
print(c.x, c.y, c.z)
print("👆️ Soma\n")
c = a - b
print(c.x, c.y, c.z)
print("👆️ Subtração\n")
c = a * b
print(c, "\n👆️ Multiplicação\n")
-- Bem, o que aconteceu?
--
-- Simples, só modificamos a propriedade de '+' (__add, soma), '-'(__sub, subtração) e '*' (__mul, multiplicação) de
-- todas as tables de Vérties.Editor is loading...