c# - 从 2 个 Vector3D 中检索 3 个欧拉角

标签 c# .net vb.net robotics

如何从 2 个 vector3D 检索 3 个欧拉角?

谢谢

塞德雷

dim vector1 = new Vector3D(0, 0, 1);

dim vector2 = new Vector3D(0.33, 0.45, 0.49);


dim myEuler = GetEulerFrom2Vector(vector1,vector2); // ?????

我在直角坐标系中工作,并使用 ZYX 欧拉约定

最佳答案

我们可以假设两个向量彼此垂直vector1.Dot(vector2)==0吗?如果是则求第三个向量构成坐标系

vector1 = vector1.Normalized();
vector2 = vector2.Normalized();
vector3 = VectorCross(vector1,vector2).Normalized();

其中 VectorCross 是 3D 向量叉积,Normalized() 返回单位向量。

现在你的旋转矩阵E

 | vector1.x   vector2.x   vector3.x |
 | vector1.y   vector2.y   vector3.y |
 | vector1.z   vector2.z   vector3.z |

现在您可以使用 instructions here 从旋转矩阵转到欧拉角.

PS。如果 vector2 不垂直于 vector1,您可以在 之后通过 vector2 = CrossProduct(vector3, vector1).Normalized() 使其垂直计算出向量3

这是我用来从两个轴转到旋转矩阵的代码:

    public static mat3 AlignZX(vec3 unit_z, vec3 unit_x)
    {
        unit_x=unit_x.Normalized();
        unit_z=unit_z.Normalized();
        vec3 unit_y=unit_z.Cross(unit_x);
        unit_x=unit_y.Cross(unit_z);
        return mat3.Combine(unit_x, unit_y, unit_z);
    }
    public static mat3 AlignXY(vec3 unit_x, vec3 unit_y)
    {
        unit_x=unit_x.Normalized();
        unit_y=unit_y.Normalized();
        vec3 unit_z=unit_x.Cross(unit_y);
        unit_y=unit_z.Cross(unit_x);
        return mat3.Combine(unit_x, unit_y, unit_z);
    }
    public static mat3 AlignYZ(vec3 unit_y, vec3 unit_z)
    {
        unit_y=unit_y.Normalized();
        unit_z=unit_z.Normalized();
        vec3 unit_x=unit_y.Cross(unit_z);
        unit_z=unit_x.Cross(unit_y);
        return mat3.Combine(unit_x, unit_y, unit_z);
    }

关于c# - 从 2 个 Vector3D 中检索 3 个欧拉角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618304/

相关文章:

c# - 我应该如何在 ASP.NET 中记录异常?

java - VB.net UI(Front end) 可以与 Java Backend 结合吗

c# - 如果用户输入的服务器 IP 地址不正确,则显示错误消息

c# - 如何对文本执行逐行和逐字符差异?

.net - 高效绘制实时波形

c# - C#计算打印页数

c# - 测量代码执行时间

vb.net - 升级到 Office 2016 引用错误 : Microsoft. Office.Interop.Excel

c# - LINQ 子表达式不接受变量值

c# - NHibernate MySQL 映射设置列类型