【问题标题】:finding angle of rotation from origin to a vector in 3d space threejs在3d空间threejs中找到从原点到向量的旋转角度
【发布时间】:2020-03-19 16:53:40
【问题描述】:

我在三维空间中有一个向量。

有什么方法可以得到每个轴上从原点到这个向量的旋转角度。

也就是说,如果向量在 x=6,y=-10,z=20 上

从原点 x=0, y=0, z=0 在轴 x,y 和 z 上向量的角度。

从现在开始在threejs中尝试解决这个问题。 任何帮助都非常感谢

【问题讨论】:

    标签: javascript unity3d three.js 3d


    【解决方案1】:

    2个向量的角度可以用这个公式找到:v1•v2 = |v1||v2| cos(angle) 要找到角度,您需要 acos 2 个向量的点积。

    根据文档,在 ThreeJS 中你可以找到这样的点积: dotproductV1V2 = V1.dot(V2)

    然后acos求角度的结果:Math.acos(dotproductV1V2)

    编辑:

    获取向量各分量角度的示例:

    var V1x = new THREE.Vector3(1, 0, 0)
    var V1y = new THREE.Vector3(0, 1, 0)
    var V1z = new THREE.Vector3(0, 0, 1)
    
    var V2 = new THREE.Vector3(6, -10, 20)
    
    var V2xz = new THREE.Vector3(V2.x, 0, V2.z)
    var V2xy = new THREE.Vector3(V2.x, V2.y, 0)
    
    //angle in radian between origin X axis and X axis of V2
    var angle_V1V2x = Math.acos(V1x.dot(V2xz.normalize()))
    
    //angle in radian between origin Y axis and Y axis of V2
    var angle_V1V2y = Math.acos(V1y.dot(V2xy.normalize()))
    
    //angle in radian between origin Z axis and Z axis of V2
    var angle_V1V2z = Math.acos(V1z.dot(V2xz.normalize()))
    

    【讨论】:

    • 非常感谢,这会给..每个轴从原点的旋转角度吗?我想得到从每个轴到这一点的角度。
    • 不,您将获得 3D 空间中 2 个向量之间的角度。如果您想从原点在每个轴上进行角度旋转,请将您的矢量投影到平面上:例如V2.y = 0 在 XZ 平面上投影并用 X 轴计算:V1=(1, 0, 0) 这将为您提供 X 轴上的角度。对 Z 轴 (0, 0, 1) 执行相同操作,最后将矢量投影到另一个平面上:例如XY 做V2.z = 0和计算V1=(0, 1, 0)
    • 如果你能给我一个示例代码会很有帮助。我对此很陌生,几乎迷路了
    • 我用我在之前的评论中向您解释的示例编辑了我的答案。希望这对您有所帮助;)
    • 这太棒了.. 非常感谢.. 唯一的问题是点积总是大于 1,所以它总是返回 NAN
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多