简化lua“LookAt”功能

时间:2017-10-11 03:25:52

标签: math vector lua

人们!

我有一个名为“LookAt”的工作函数,用Lua语言编写。

此功能的代码和逻辑没有错误。

但我相信我们可以简化数学逻辑。

function LookAt(target)
  local origin = Vec3.New(Engine.ClientData.Origin) 
  local direction = origin - target

  Engine.Pitch = math.deg(math.atan(direction.Z, math.sqrt((direction.X ^ 2) + (direction.Y ^ 2))))
  Engine.Yaw = math.deg(math.atan(direction.Y, direction.X)) - 180.0
end

1 个答案:

答案 0 :(得分:0)

我不认为你可以做很多事情来简化数学逻辑。你可以利用这里很少的冗余。但你可以把它分成这样的部分:

function atan_deg(y, x)
  return (math.deg(math.atan(y, x)))
end

function hypotenuse(x, y)
  return (math.sqrt(x^2 + y^2))
end

function LookAt(target)
  local origin = Vec3.New(Engine.ClientData.Origin) 
  local direction = origin - target
  local X, Y, Z = direction.X, direction.Y, direction.Z

  Engine.Pitch = atan_deg(Z, hypotenuse(X, Y))
  Engine.Yaw = atan_deg(Y, X) - 180.0
end