围绕轴和度数旋转 3D 矢量

问题描述 投票:0回答:1

我尝试使用 .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}");
    }
}
c# .net vector quaternions system.numerics
1个回答
0
投票

结果是正确的。您没有得到精确的结果,因为旋转角度本身并不精确。您可以对结果进行四舍五入以消除一些偏差。例如:

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));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.