首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QGyroscopeReading转换为QVector3D的正确方法是什么?

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

Stack Overflow用户
提问于 2018-08-26 21:09:42
回答 2查看 159关注 0票数 1

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

QGyroscopeReadingxyz值存储为qreal,而QVector3D使用float

由于不能保证qreal是浮动的(它的类型是在Qt构建时指定的),所以没有警告的朴素转换看起来很难看:

代码语言:javascript
复制
QGyroscopeReading gr;
QVector3D myVec(static_cast<float>(gr.x())
  , static_cast<float>(gr.y())
  , static_cast<float>(gr.z()));

肯定有更好的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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()可能很有趣(即从当前时间戳和前一个时间戳确定持续时间)。不过,医生。不是很鼓舞人心:

注意,有些平台没有正确交付时间戳。应用程序应该为偶尔导致时间戳向后跳的问题做好准备。

票数 1
EN

Stack Overflow用户

发布于 2018-08-27 07:47:02

它看起来很丑。它必须提醒你这里有一些危险的代码。

为了防止此类代码在项目中传播,从QVector3D继承类,并使用qreal参数定义构造函数。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52030285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档