如何用一个向量去控制一组向量的旋转或朝向

在研究一个特殊效果,需要用一个向量去控制一组向量的旋转或朝向,

请注意:

1请关注问题本身,不要反问为什么需要这样的功能,也不要问这样的功能用来干什么

2我只想知道可不可以实现

3如果能实现,怎样实现,具体算法是什么

4多少钱可以解决

具体问题:

有归一化向量a(x,y,z),xyz取值在-1到1之间,初始值为(0,0,1)

有一组归一化向量,b、c、d、e等,方向随机

所有向量都只能获取到每个分量的值,并不能获得每个轴向的旋转值

求算法:

假如a向量沿x轴转若干度(向量自发旋转,并不能获得向量旋转的角度,但向量的数值会发生改变,可能需要根据向量的数值反推向量旋转了多少度),使得bcde等向量也沿向量a的x轴做同样旋转。

以下演示图片以旋转45度为例:(实际情况旋转角度未知)

再沿a向量y轴转若干度,bcde等向量也沿向量a的y轴做同样旋转。

以下演示图片以旋转45度为例:(实际情况旋转角度未知)

总是就是向量a怎么转,其他向量也跟着怎么转

 

注意要能处理多个轴向

 

可以解决,有点类似3D模型里面骨架的应用,父关节带动子关节

这种题目如果你学过一点线性代数的话很好做的。
假设一个向量a(Xa,Ya,Za)绕x轴旋转A度,变换矩阵记为Rx,
假设一个向量b(Xb,Yb,Zb)绕y轴旋转B度,变换矩阵记为Ry,
假设一个向量c(Xc,Yc,Zc)绕z轴旋转C度,变换矩阵记为Rz,

那么有

Rx=[[1,        0,            0   ],
    [0,        cos(A),    -sin(A)],
    [0,        sin(A),     cos(A)]]

Ry=[[cos(B),    0,            sin(B)],
    [0,         1,                0],
    [-sin(B),   0,            cos(B)]]

RZ=[[cos(C),    -sin(C),        0],
    [sin(C),      cos(C),        0],
    [0,            0,            1]]

所以如果a旋转之后是b,b旋转之后是c,那么就有公式如下:


Rx*a=b //(这里的*是矩阵运算),
Ry*b=c //
//上面两个式子合并起来就是a->c的变换矩阵
Ry*Rx*a=c 


而如果是
Rz*Rx*Ry *a=c
则a表示先绕y轴旋转,再绕x轴,最后绕z轴旋转,最后变成c

所以你的题目只要把角度带进去就行了,再补充一个矩阵*运算的计算过程

 

只要你的其他向量跟控制向量的关系是可以计算的,那就可以实现。比如相对角度不变、比如是父子关系等等。自己计算的话需要用到矩阵,unity引擎的话就比较简单,内置有各种坐标转换函数可以用。