C# 以其他矢量为轴的旋转矢量

C# 以其他矢量为轴的旋转矢量,c#,c++,vector,rotation,quaternions,C#,C++,Vector,Rotation,Quaternions,我在一个项目中,我需要用v2作为轴旋转向量v1,但是我在向量和旋转方面遇到了一些问题。关于这一点有很多解释,但我找不到解决我问题的解释。你能解释一下,如果我是一个五岁的孩子怎么做吗 我试图做的是将一个四元数导出的矩阵与我的“v1”相乘 这样做: angle = (Convert.ToDouble(Console.ReadLine()) * Math.PI / 180); cosA = Math.Cos(angle); sinA = Math.Sin(angle); oneMinusCosA =

我在一个项目中,我需要用v2作为轴旋转向量v1,但是我在向量和旋转方面遇到了一些问题。关于这一点有很多解释,但我找不到解决我问题的解释。你能解释一下,如果我是一个五岁的孩子怎么做吗

我试图做的是将一个四元数导出的矩阵与我的“v1”相乘 这样做:

angle = (Convert.ToDouble(Console.ReadLine()) * Math.PI / 180);
cosA = Math.Cos(angle);
sinA = Math.Sin(angle);
oneMinusCosA = 1 - cosA;

matrix[0, 0] = gravityVector[0] * gravityVector[0] * oneMinusCosA + cosA;
matrix[0, 1] = gravityVector[0] * gravityVector[1] * oneMinusCosA + gravityVector[2] * sinA;
matrix[0, 2] = gravityVector[0] * gravityVector[2] * oneMinusCosA - gravityVector[1] * sinA;

matrix[1, 0] = gravityVector[1] * gravityVector[1] * oneMinusCosA - gravityVector[2] * sinA;
matrix[1, 1] = gravityVector[1] * gravityVector[1] * oneMinusCosA + cosA;
matrix[1, 2] = gravityVector[1] * gravityVector[2] * oneMinusCosA - gravityVector[0] * sinA;

matrix[1, 0] = gravityVector[2] * gravityVector[0] * oneMinusCosA - gravityVector[1] * sinA;
matrix[1, 1] = gravityVector[2] * gravityVector[1] * oneMinusCosA - gravityVector[0] * sinA;
matrix[1, 2] = gravityVector[2] * gravityVector[2] * oneMinusCosA + cosA;

result = new double[3];


for (int i = 0; i < 3; i++)
{
    result[i] = objectRotation[i] * matrix[i, 0] + objectRotation[i] * matrix[i, 1] + objectRotation[i] * matrix[i, 2];
    Console.WriteLine(result[i]);
}
*OBS:我需要将其应用于每个向量和每个角度,而不仅仅是90度(或π/2弧度,无所谓)或我用作示例的向量


*OBS(2):如果你能在C(优选)或C++中发布代码,我会很高兴。

< P>回答我自己的问题,你可以应用这个公式进行旋转:

vf=v1*cosA+(v1.v2)*v2*(1-cosA)+(v2 x v1)*新浪

下面是如何得到公式:

*其中p是v1到v2的投影

p = (v1 . v2) * v2
a = v1 - p = v1 -(v1 . v2) * v2
f = (v2 x v1)/|(v2 x v1)| * |a|
a'= a * cos(θ) + f * sin(θ)
vf = a'+ p

如果您使用适当的数学库,那么应该有一个函数来从轴和角度创建矩阵。把这个矩阵和向量相乘。如果没有,有公式。恐怕所要求的数学不能向一个5岁的孩子解释。尽管这是一个特别漂亮的数学,但它绝不是琐碎的。如果你准备无论如何都要解决这个问题,请查看这篇维基百科文章:这个问题似乎是离题的,因为它无法以提出的方式得到回答。我尝试使用维基百科和其他网站建议的一些矩阵,但似乎没有人起作用。“我一定是做错了什么,但我想不出是什么。”顺便说一句,当我要求别人给我解释的时候,好像是一个5岁的孩子,我的意思是不做任何解释就把答案贴出来。对不起,我弄错了。
p = (v1 . v2) * v2
a = v1 - p = v1 -(v1 . v2) * v2
f = (v2 x v1)/|(v2 x v1)| * |a|
a'= a * cos(θ) + f * sin(θ)
vf = a'+ p