【问题标题】:Switch chirality of a quaternion in code?在代码中切换四元数的手性?
【发布时间】:2016-08-23 10:05:48
【问题描述】:

我有四元数数据,我正试图从右手 Y 向上坐标空间切换到左手 Z 向上坐标空间。通过阅读本文,我需要做的是switch the chirality

我能找到的唯一信息是this

我无法绕开它。

假设我的四元数为:

public static float[] quat= new float[4](0.70711,0.70711,0,0);

在c#代码中,如何切换手性?

我尝试否定轴,并简单地交换 ZY 值。正如该链接中所建议的,我已尝试将四元数乘以另一个等于 90 度的四元数。仍然看到不正确的旋转。

谢谢。

【问题讨论】:

  • 这是离线进程吗?你可以只做 quat -> matrix 然后根据需要交换/否定行/列,然后再做 matrix -> quat 吗?
  • 它是实时的,所以延迟是一个因素。不过我可以试试!您知道 c# 中的示例吗?
  • 我不知道有一个,抱歉。

标签: c# math rotation quaternions


【解决方案1】:

假设您的原始坐标系 A 有 X 向右,Y 向上,Z 到相机。新坐标系 B 的 X 向右,Y 向相机,Z 向上。所以本质上你需要交换 Y 轴和 Z 轴。到此为止吧?你有一个四元数 q,它描述了系统 A 中的一些旋转。你想找到一个描述系统 B 中相同旋转的四元数 r

最好在将角度和轴转换为四元数的背景下考虑这一点。在Wikipedia 中,您可以读到您使用单位方向矢量 (x,y,z) 描述了围绕轴以角度 θ 的旋转

q = cos(θ/2) + sin(θ/2)(xi + yj + zk)

更改坐标系对您的角度和轴有什么影响?好吧,轴坐标与您的点经历相同的坐标交换,并且角度改变了它的符号。所以你有

cos(−θ/2) + sin(−θ/2)(xi + zj + yk)

与上述相比,实部没有变化(因为 cos(x)=cos(−x))但是虚部改变了它们的符号,在除了顺序的变化。由此概括,在旧坐标系中描述旋转的四元数 a + bi + cj + dk 将在新坐标系中转换为 a - bi - dj - ck

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多