是否有正确/好的方法将QGyroscopeReading转换为QVector3D in Qt5
QGyroscopeReading的x、y和z值存储为qreal,而QVector3D使用float。
由于不能保证qreal是浮动的(它的类型是在Qt构建时指定的),所以没有警告的朴素转换看起来很难看:
QGyroscopeReading gr;
QVector3D myVec(static_cast<float>(gr.x())
, static_cast<float>(gr.y())
, static_cast<float>(gr.z()));肯定有更好的东西吗?
发布于 2018-08-27 07:50:07
从Qt医生那里。QGyroscopeReading类
QGyroscopeReading单元 该读数包含3个值,以每秒度数为单位,定义设备围绕x、y和z轴的运动。与QRotationReading不同,这些值代表的是当前的角速度,而不是固定的旋转。测量值以每秒度为单位。
因此,将qreal转换为float是您最小的问题,除非您只想将值存储在QVector3D中(记住这并不代表3D空间中的点或向量)。但是如果是这样的话,那么你的转换就没问题了。(不过,我不明白为什么不像QGyroscopeReading那样存储陀螺仪读数。)
如果要将QGyroscodeReading应用于QVector3D (例如显示效果),则可以将旋转应用到预定义的向量(例如QVector3D(0, 0, 1))。对于累积更新,时间也是必要的(将角速度转换为角度)。
此时,QGyroscopeReading::timestamp()可能很有趣(即从当前时间戳和前一个时间戳确定持续时间)。不过,医生。不是很鼓舞人心:
注意,有些平台没有正确交付时间戳。应用程序应该为偶尔导致时间戳向后跳的问题做好准备。
发布于 2018-08-27 07:47:02
它看起来很丑。它必须提醒你这里有一些危险的代码。
为了防止此类代码在项目中传播,从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)
{}
}https://stackoverflow.com/questions/52030285
复制相似问题