将QGyroscopeReading转换为QVector3D的正确方法是什么?

时间:2018-08-26 21:09:43

标签: c++ qt qt5 qvector3d qgyroscopereading

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

QGyroscopeReading x y z 值存储为qreal,而{{1} }使用QVector3D

由于不能保证qreal是浮点型的(它的类型是在Qt构建时指定的),因此无警告的幼稚转换看起来真的很丑:

float

肯定有更好的东西吗?

2 个答案:

答案 0 :(得分: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)
{}
}

答案 1 :(得分:1)

来自Qt文档。 QGyroscopeReading Class

  

QGyroscope读取单元

     

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

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

如果要将QGyroscodeReading应用于QVector3D(例如,显示效果),则可以将旋转应用于预定义的矢量(例如,QVector3D(0, 0, 1))。对于累积更新,还需要时间(将角速度转换为角度)。

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

  

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

相关问题