Qt使用QQuaternion对空间矢量QVector3D进行旋转

2 篇文章 0 订阅

        空间中的QVector3D既可以代表空间中的点位置,也可以表示空间矢量。为什么要对空间矢量进行旋转呢,比如有一个空间矢量在空间中代表了镜头前进的方向(即第一人称模式),初始时该矢量指向正北方向QVector3D(0,0,1),在镜头前进过程中,镜头旋转了r度,此时镜头前进的的矢量就需要相应的旋转r度,Qt中提供了QQuaternion用于三维空间中的矢量旋转

其中静态函数

[static] QQuaternion QQuaternion::fromEulerAngles(float pitch, float yaw, float roll)

用于设置在不同轴上旋转得到的四元数,从而使用QQuaternion 的矢量旋转函数

QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const

获得新的方向矢量,示例:

    qreal r = 67.6;
    QVector3D v(1,0,0);
    QQuaternion qua = QQuaternion::fromEulerAngles(0,r,0);
    QVector3D vr = quax.rotatedVector(v);//新的旋转所得到的矢量

拓展:四元数

        四元数是简单的超复数。四元数都是由实数加上三个虚数单位 i、j和k 组成,而且它们有如下的关系: i² = j² = k² = -1, iº = jº = kº = 1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi+ cj + dk,其中a、b、c 、d是实数。

       对于i、j和k本身的几何意义可以理解为一种旋转,其中i旋转代表Z轴与Y轴相交平面中Z轴正向向Y轴正向的旋转,j旋转代表X轴与Z轴相交平面中X轴正向向Z轴正向的旋转,k旋转代表Y轴与X轴相交平面中Y轴正向向X轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。

       对于使用Qt做三维空间变换来说,不需要弄懂四元数的概念,只需要知道是用来对三维空间坐标处理的,掌握好相关函数即可。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵喵叫的猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值