1

Qt5中是否有正确/好的转换QGyroscopeReading方法?QVector3D

QGyroscopeReading将其xyz值存储为qreal,而QVector3D使用float

由于 qreal 不能保证是浮点数(它的类型是在 Qt 构建时指定的),所以无警告的天真转换看起来非常难看:

QGyroscopeReading gr;
QVector3D myVec(static_cast<float>(gr.x())
  , static_cast<float>(gr.y())
  , static_cast<float>(gr.z()));

肯定有更好的东西吗?

4

2 回答 2

1

它的设计看起来很丑。它必须提醒你这里有一些危险的代码。

为了防止在项目中传播此类代码,请从 QVector3D 继承您的类并使用qreal参数定义构造函数。

class QRealVector3D: public QVector3D
{
QRealVector3D (qreal x, qreal y, qreal z):
QVector3D (static_cast<float>(x)
  , static_cast<float>(y)
  , static_cast<float>(z)
{}
}
于 2018-08-27T07:47:02.087 回答
1

来自 Qt 文档。QGyroscopeReading 类

QGyroscope读数单元

读数包含 3 个值,以每秒度数为单位,定义了设备围绕 x、y 和 z 轴的移动。与QRotationReading不同,这些值表示当前角速度而不是固定旋转。测量值以度/秒为单位。

因此,转换qrealtofloat是您最少的问题,除非您只想将值存储在 a 中QVector3D(请记住,这并不代表 3D 空间中的点或向量)。但是,如果是这种情况,那么您的转换就可以了。(虽然,我不明白为什么不将陀螺仪读数存储为QGyroscopeReading.)

如果您想应用QGyroscodeReading到 a QVector3D(例如显示效果),那么您可以将旋转应用到预定义的向量(例如QVector3D(0, 0, 1))。对于累积更新,时间也是必要的(将角速度转换为角度)。

就当时而言,这QGyroscopeReading::timestamp()可能很有趣(即从当前时间戳和前一个时间戳确定持续时间)。虽然,医生。不是很令人鼓舞:

请注意,某些平台无法正确传递时间戳。应用程序应该为导致时间戳向后跳转的偶发问题做好准备。

于 2018-08-27T07:50:07.287 回答