将 QGyroscopeReading 转换为 QVector3D 的正确方法是什么?
What is correct way to convert QGyroscopeReading to QVector3D?
在Qt5中是否有correct/good将QGyroscopeReading
转换为QVector3D
的方法?
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()));
肯定有更好的东西吗?
它的设计看起来很丑。不得不提醒你,这里有一些危险的代码。
为了防止在项目中传播此类代码,请从 QVector3D 继承您的 class 并使用 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)
{}
}
来自 Qt 文档。 QGyroscopeReading Class:
QGyroscopeReading Units
The reading contains 3 values, measured in degrees per second that define the movement of the device around the x, y and z axes. Unlike QRotationReading, the values represent the current angular velocity rather than a fixed rotation. The measurements are in degrees per second.
所以,将 qreal
转换为 float
是你最不关心的问题,除了你只想将值存储在 QVector3D
中(记住这并不代表一个点或3D 向量 space)。但是,如果是这种情况,那么您的转换就可以了。 (虽然,我不明白为什么不像QGyroscopeReading
一样存储陀螺仪读数。)
如果您想将 QGyroscodeReading
应用到 QVector3D
(例如显示效果),则可以将旋转应用到预定义矢量(例如 QVector3D(0, 0, 1)
)。对于累积更新,时间也是必要的(将 angular 速度转换为角度)。
目前,QGyroscopeReading::timestamp()
可能很有趣(即根据当前时间戳和前一个时间戳确定持续时间)。虽然,医生。不是很鼓舞人心:
Note that some platforms do not deliver timestamps correctly. Applications should be prepared for occasional issues that cause timestamps to jump backwards.
在Qt5中是否有correct/good将QGyroscopeReading
转换为QVector3D
的方法?
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()));
肯定有更好的东西吗?
它的设计看起来很丑。不得不提醒你,这里有一些危险的代码。
为了防止在项目中传播此类代码,请从 QVector3D 继承您的 class 并使用 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)
{}
}
来自 Qt 文档。 QGyroscopeReading Class:
QGyroscopeReading Units
The reading contains 3 values, measured in degrees per second that define the movement of the device around the x, y and z axes. Unlike QRotationReading, the values represent the current angular velocity rather than a fixed rotation. The measurements are in degrees per second.
所以,将 qreal
转换为 float
是你最不关心的问题,除了你只想将值存储在 QVector3D
中(记住这并不代表一个点或3D 向量 space)。但是,如果是这种情况,那么您的转换就可以了。 (虽然,我不明白为什么不像QGyroscopeReading
一样存储陀螺仪读数。)
如果您想将 QGyroscodeReading
应用到 QVector3D
(例如显示效果),则可以将旋转应用到预定义矢量(例如 QVector3D(0, 0, 1)
)。对于累积更新,时间也是必要的(将 angular 速度转换为角度)。
目前,QGyroscopeReading::timestamp()
可能很有趣(即根据当前时间戳和前一个时间戳确定持续时间)。虽然,医生。不是很鼓舞人心:
Note that some platforms do not deliver timestamps correctly. Applications should be prepared for occasional issues that cause timestamps to jump backwards.