首页 > 解决方案 > Lua 新手 - 获取两个 3D 矢量之间的角度

问题描述

我正在尝试计算抛出对象的角度,如何在 Lua 中应用公式。

我有这些价值观:

x1,y1,z1 = 1491, 1560, 11

x2,y2,z2 = 1491, 1560, 150

我基于这个视频:https ://www.youtube.com/watch?v=QWIZXRjMspI

我正在尝试:公式:cos(0)=a*b/|a||b|

标签: mathlua

解决方案


如果你的问题是,如何在 Lua 中编写这个公式,那么:

根据您的环境,您可能已经有一些内置数据类型可以提供帮助。例如,在Codea中,有预定义的 vec3 类型和相关的方法(点、长度等)可以帮助:

local a = vec3(4, -3, 5)
local b = vec3(9, 7, -10)

local ans = math.acos(a:dot(b) / (a:len() * b:len()))
print(math.deg(ans))

如果您使用的是纯 Lua,那么您可以使用表格来表示 3D 向量,并为点积和幅度编写自己的函数。Lua 数学库在所有情况下都有帮助:

local c = {4, -3, 5}
local d = {9, 7, -10}

local ansAgain = math.acos(myDot(c, d) / (myMag(c) * myMag(d)))
print(math.deg(ansAgain))
function myDot(a, b)
    return (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3])
end

function myMag(a)
    return math.sqrt((a[1] * a[1]) + (a[2] * a[2]) + (a[3] * a[3]))
end

推荐阅读