繁体   English   中英

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

[英]What is correct way to convert QGyroscopeReading to QVector3D?

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

QGyroscopeReadingxyz值存储为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继承您的类,并使用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 doc。 QGyroscopeReading类别

Q陀螺仪读取单元

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM