Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector 如何在Unity 3D中计算相对于旋转坐标系的四元数?_Vector_Rotation_Unity3d_Quaternions_Rotational Matrices - Fatal编程技术网

Vector 如何在Unity 3D中计算相对于旋转坐标系的四元数?

Vector 如何在Unity 3D中计算相对于旋转坐标系的四元数?,vector,rotation,unity3d,quaternions,rotational-matrices,Vector,Rotation,Unity3d,Quaternions,Rotational Matrices,我试图用四元数旋转一个向量,它是用四元数构造的。Euler(x,y,z)它按预期工作,但问题是,旋转是相对于世界坐标系完成的,而我想相对于向量本身旋转 所以我想把坐标系作为 z = vector's direction, x = vector's perpendicular (any) y = world y. 所以我的代码是: myVector = euler * myVector; 但是我需要 myVector = localEuler * myVector; 所以我需要

我试图用四元数旋转一个向量,它是用四元数构造的。Euler(x,y,z)它按预期工作,但问题是,旋转是相对于世界坐标系完成的,而我想相对于向量本身旋转

所以我想把坐标系作为

z = vector's direction,     
x = vector's perpendicular (any)  
y = world y.
所以我的代码是:

myVector = euler * myVector;
但是我需要

myVector = localEuler * myVector;
所以我需要计算
localEuler
作为
euler
myVector
的函数

我该怎么做

谢谢你的帮助

我试过: 它不起作用。我猜这是点积

附笔。 我认为这有一个用于
转换的内置代码:
转换.RotateAround()
,但我需要使用
向量3
,而不是
转换
,我解决了我的问题

我的解决办法是:

  • 使用四元数。轴角度(角度:浮点,旋转轴:矢量3)
例如,要围绕“局部”x旋转,
rotationAxis
应该是myVector的垂线,计算如下:

var rotationAxis : Vector3 = Quaternion.Euler(0,90,0) * myVector;
rotationAxis.y = 0;
var localEuler:Quaternion = Quaternion.AngleAxis(euler.x , rotationAxis);
然后新的四元数计算如下:

var rotationAxis : Vector3 = Quaternion.Euler(0,90,0) * myVector;
rotationAxis.y = 0;
var localEuler:Quaternion = Quaternion.AngleAxis(euler.x , rotationAxis);
然后正确旋转矢量:

myVector = localEuler * myVector;

嗨,我不明白你的答案。旋转轴垂直于myVector的哪个方向。毕竟是3D空间。@Boon是的,这句话并没有完全定义垂直线,但下面的方程式解释了它的含义。你可以用它做实验,看看你得到了哪个垂线。