我尝试使用 .NET 中的 System.Numerics 库绕轴 (Y) (0,1,0) 以特定角度 (90°) 旋转向量 (0,0,-1)
我的问题是我得到了错误的输出,但我没有得到问题所在。 代码的输出是: 原始向量: <0 0 -1> 旋转向量:<-0,99999994 0 -5,9604645E-08>
如果我将向量 (0,0,-1) 绕 (0,1,0) 旋转 990 度,则输出应为 (-1,0,0)
using System.Numerics;
class Program
{
static void Main()
{
Vector3 vector = new Vector3(0,0,-1);
Vector3 rotateAxis = new Vector3(0,1,0);
float angle = 90;
//Create Radians
float radians = (float)(angle *Math.PI/180);
Quaternion rotation = Quaternion.CreateFromAxisAngle(rotateAxis, radians);
// Rotate Vector
Vector3 rotatedVector = Vector3.Transform(vector,rotation);
Console.WriteLine($"Original vector: {vector}");
Console.WriteLine($"rotated vector: {rotatedVector}");
}
}
结果是正确的。您没有得到精确的结果,因为旋转角度本身并不精确。您可以对结果进行四舍五入以消除一些偏差。例如:
rotatedVector = rotatedVector.Round();
public static class Vector3Extension
{
public static Vector3 Round(this Vector3 v, int decimals = 3)
{
return new Vector3(
(float)Math.Round(v.X, decimals),
(float)Math.Round(v.Y, decimals),
(float)Math.Round(v.Z, decimals));
}
}