在 Qt5 中是否有正确/好的方法将QGyroscopeReading
转换为QVector3D
?
QGyroscopeReading
的 x , y 和 z 值存储为qreal
,而{{1} }使用QVector3D
。
由于不能保证qreal是浮点型的(它的类型是在Qt构建时指定的),因此无警告的幼稚转换看起来真的很丑:
float
肯定有更好的东西吗?
答案 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不同,这些值表示当前角速度,而不是固定旋转。测量单位是度/秒。
因此,从qreal
到float
的转换是您的最小问题,除了您只想将值存储在QVector3D
中(请记住,这不代表点或向量3D空间)。但是,如果是这种情况,那么您的转换就可以了。 (尽管,我不明白为什么不像QGyroscopeReading
那样存储陀螺仪读数。)
如果要将QGyroscodeReading
应用于QVector3D
(例如,显示效果),则可以将旋转应用于预定义的矢量(例如,QVector3D(0, 0, 1)
)。对于累积更新,还需要时间(将角速度转换为角度)。
目前,QGyroscopeReading::timestamp()
可能很有趣(即从当前时间戳记和前一个时间戳记确定持续时间)。虽然,医生。不太令人鼓舞:
请注意,某些平台无法正确传递时间戳。应为可能导致时间戳向后跳的偶然问题准备应用程序。