gpt4 book ai didi

java - 按给定四元数旋转单位 vector

转载 作者:行者123 更新时间:2023-12-01 23:13:55 25 4
gpt4 key购买 nike

我正在尝试计算从我的 opengl 相机指向的单位 vector 。给定一个旋转四元数 (w,x,y,z),我如何计算单位 vector 围绕该四元数的旋转?

在这种情况下,单位 vector 可以限制为(0,0,-1)。

编辑:最终解决方案

对于 (0,0,1) 的旋转:

vec.x=2*x*z - 2*y*w;
vec.y=2*y*z + 2*x*w;
vec.z=1 - 2*x*x - 2*y*y;

请注意,矩阵需要转置才能与 OpenGL 一起使用。

最佳答案

将四元数转换为 3x3 旋转矩阵,并将此旋转应用于 vector 。

对于单位(w, x, y, z)四元数,该矩阵为:

      ( 1 - 2 * ( y * y + z * z )      2 * ( x * y - z * w )      2 * (x * z + y * w ) )
R = ( 2 * ( x * y + z * w ) 1 - 2 * ( x * x + z * z ) 2 * (y * z - x * w ) )
( 2 * ( x * z - y * w ) 2 * ( y * z + x * w ) 1 - 2 * (x * x + y * y ) )

如果您的 vector 具有(0, 0, -1)这样简单的形式,则无需计算旋转矩阵的所有 9 个系数,因为矩阵 vector 乘法的结果仅使用部分系数(R 的最后一列)。

关于java - 按给定四元数旋转单位 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21515341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com