【问题标题】:How to create a 3D vector using XYZ angles如何使用 XYZ 角度创建 3D 矢量
【发布时间】:2021-09-07 01:39:39
【问题描述】:

所以我发现了如何仅使用一个角度在 2D 中创建 vector2,但现在我需要使用两个或三个角度的 vector3

我用来获取二维向量的代码:

function V2ToForce(Angle,Force)
    local Force = Force or 1
    local X,Y = math.cos(Angle)*Force,math.sin(Angle)*Force 
    return X,Y
end

任何伪代码都会有所帮助。

编辑: 我找到了这个公式,但也不起作用

function Test(X,Y,Force)    
    local x = math.cos(X) * math.cos(Y);    
    local z = math.sin(X) * math.cos(Y);    
    local y = math.sin(Y);  
    return x*Force,y*Force,z*Force 
end

【问题讨论】:

  • dosent work - 你为什么这么认为?你有输入和正确输出的例子来检查你的计算是否正确吗?
  • 如果所有的角度都是0,那么向量应该是什么? (1,0,0)?您所要做的就是围绕每个轴旋转该向量。顺序由您决定。 (另请注意,如果您首先围绕 x 轴旋转该矢量,则它没有效果)此外,您只需要两个角度即可生成任何 3d 矢量。你可以先绕 Y 轴旋转它,然后是 X。(就像你在 fps 中的样子)(因此这个公式只需要 x 和 y)
  • 如果所有角度都为 0,则在任何坐标中都可以是从 0 到 1
  • @EgorSkriptunoff 我在 Lua 中测试了它,当 X 从 0 到 360(弧度)时它可以工作,但是当 Y 改变时,Vector3 Y 总是 -1 到 5 而不是 0-1 btw 力不是问题
  • 您确实应该在问题中添加适当的代码,以显示问题所在。您编辑的公式是众所周知的,我非常怀疑math.sin 在正常输入时会返回错误。

标签: math vector lua trigonometry


【解决方案1】:

评论的人得到了它的工作,仍然有一些错误,但没有什么是 if 语句无法解决的。

对于遇到同样问题的人来说,这就是我最终的结果

function Test1(X,Y,Force)
    local X1 = math.cos(Y)*Force
    local Y1 = (math.sin(Y)*math.sin(X))*Force
    local Z1 = (-math.sin(Y)*math.cos(X))*Force
    return X1,Y1,Z1
end
function Test2(X,Y,Force)
    local X1 = math.cos(X) * math.cos(Y)
    local Z1 = -math.sin(X) * math.cos(Y)
    local Y1 = math.sin(Y)
    return X*Force,Y*Force,Z1*Force 
end

对不起我的英语不好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多