首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中,如何根据最新的四元数旋转,在3D空间中转换连接到另一个点上的点

在c++中,如何根据最新的四元数旋转,在3D空间中转换连接到另一个点上的点
EN

Stack Overflow用户
提问于 2014-12-18 00:14:59
回答 1查看 249关注 0票数 0

我必须假定,p1和p2,p2与p1相连,不仅与p1的位置有关,而且与它的旋转有关,所以q1是一个四元数,代表p1的旋转。如果q1旋转,则p1的位置也必须相应地围绕p1旋转。我只需要计算p2的位置,而不是轮换,我已经完成了轮换。所以,基本上是一艘太空船停靠在一个空间站,我需要移动和旋转空间站周围,与它对接的飞船。我该怎么做呢?

我为它编写的代码可以工作,只要在对接过程中车站没有旋转:

代码语言:javascript
复制
bool docked[100];
Quaternion quatTarget[100];
double distance_dock[100];

vector3 docking_position(int ship, int station)
{
    if (!docked[ship])
    {
        docked[ship] = true;
        distance_dock[ship] = distances(position[ship], position[station]);
        vector3 direcc = normalized(position[station] - position[ship]);
        quatTarget[ship] = vecToVecRotation(direcc, { 0, 0, 1 });
        QuaternionNormalize(&quatTarget[ship], &quatTarget[ship]);
    }

    Quaternion orientation = total_rotation[station] * quatTarget[ship];

    Matrix docking_place;

    MatrixRotationQuaternion(&docking_place, &orientation);

    vector3 axis_z = { docking_place(0, 2), docking_place(1, 2), docking_place(2, 2) };

    return position[station] + -axis_z * distance_dock[ship];
}

我在这里要做的是,在对接时,取一个四元数从船到站,然后沿着这个方向的负z轴将船的"distance_dock“单元转换,所以船总是相应地移动,但不知怎么的,如果我在空间站已经旋转时停靠船,那么我就把最初的对接位置弄错了,尽管它仍然与空间站完美地旋转。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:03:33

如果我正确理解你,你有两个对象,它们之间有一个严格的转换。问题是你想要计算一个姿势(位置+方向),给出另一个姿势。

假设您有三个框架:空间站框架"S“、车辆框架"V”和全局框架"G“(我假设您的图形环境有一个全局3D笛卡尔框架)。帧S和V之间的转换是完全已知的(平移和定向)和常数,表示为S_p_SV (站的位置,以站帧表示)和SV_q (车辆的四元数方向,以站帧表示)。

如果你没有刚体力学方面的经验,这会让人困惑,在这种情况下,你应该阅读一些关于“刚体力学”的介绍性说明/幻灯片,这在谷歌的结果中非常丰富。

我用乳胶写了这个表达式,但不幸的是,StackOverflow不支持它,所以我把它作为图像附在一起。原来的乳胶可以找到这里。例如,在下面的表示法中,第一行Sp_SVVehicle w.r.t的position。S,用(旋转的)S表示。前缀上标表示旋转框架。例如,对于四元数G_Sq,这表示从G圆框到S符号帧的方向。

关于在C++中实现这一点,我不确定您正在为四元数使用什么库,但是您需要以下函数:

  • 将欧拉转换为四元数-如果要手动指定旋转SVq (车辆轮调w.r.t站)
  • 将四元数转换为DCM -用于乳胶中的第一个方法
  • 四元数乘法-用于乳胶中的第二种方法
  • 四元数共轭-用于乳胶中的第二种方法
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27537160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档