feat(relativeCoords): add lib.getRelativeCoords function (#685)

This commit is contained in:
Rafael
2025-01-30 20:23:08 -03:00
committed by GitHub
parent c1ccd767ff
commit 5c0239be06

View File

@@ -0,0 +1,30 @@
local glm_sincos = require 'glm'.sincos
local glm_rad = require 'glm'.rad
---Get the relative coordinates of a vector3 based on a heading and offset
---@overload fun(coords: vector3, heading: number, offset: vector3): vector3
---@overload fun(coords: vector4, offset: vector3): vector4
---@param coords vector3 | vector4
---@param heading number
---@param offset vector3
---@return vector3
function lib.getRelativeCoords(coords, heading, offset)
offset = offset or heading
local x, y, z, w = coords.x, coords.y, coords.z, type(heading) == 'number' and heading or coords.w
local sin, cos = glm_sincos --[[@as fun(n: number): number, number]](glm_rad(w))
local relativeX = offset.x * cos - offset.y * sin
local relativeY = offset.x * sin + offset.y * cos
return coords.w and vec4(
x + relativeX,
y + relativeY,
z + offset.z,
w
) or vec3(
x + relativeX,
y + relativeY,
z + offset.z
)
end
return lib.getRelativeCoords