从加速度数据可视化运动/手势

时间:2014-08-17 19:18:46

标签: c++ opengl data-visualization gesture

我已经实现了一种手势检测算法,用户可以在其中定义自己的手势。手势由加速度计发送的加速度值定义。

现在我的问题是:是否可以将执行的手势可视化,以便用户可以识别他执行的手势?

我的第一个想法和尝试只是使用Verlet Velocity Integration(如此描述:http://lolengine.net/blog/2011/12/14/understanding-motion-in-games)来计算相应的位置并使用它们在OpenGL中形成一个线条。渲染工作,但结果根本不是执行的手势。

这是我的代码:

    float deltaTime = 0.01;
    PosData null;
    null.x = 0.0f;
    null.y = 0.0f;
    null.z = 0.0f;
    this->vertices.push_back(null);
    float velX = 0.0f;
    float velY = 0.0f;
    float velZ = 0.0f;

    for (int i = 0; i < accData.size(); i++) {
        float oldVelX = velX;
        float oldVelY = velY;
        float oldVelZ = velZ;
        velX = velX + accData[i].x * deltaTime;
        velY = velY + accData[i].y * deltaTime;
        velZ = velZ + accData[i].z * deltaTime;
        PosData newPos;
        newPos.x = vertices[i].x + (oldVelX + velX) * 0.5 * deltaTime;
        newPos.y = vertices[i].y + (oldVelY + velY) * 0.5 * deltaTime;
        newPos.z = vertices[i].z + (oldVelZ + velZ) * 0.5 * deltaTime;
        this->vertices.push_back(newPos);
    }

我使用的deltaTime为0.01,因为我的加速度计每10毫秒发送一次加速度数据。 现在我想知道:我的计算有问题吗?它甚至可以这样工作吗?有没有可以做到这一点的图书馆?还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

作为理论物理学和蒙特卡罗模拟人,我已经考虑过你观察到的差异。你写的是&#34;真实&#34;手势曲线(3D)与所有计算曲线都不相似。您可能想要考虑手头问题的几个方面。首先,我们对&#34;真实&#34;在空间中的手势曲线。我们当然有&#34;一些&#34;考虑到曲线,但这看起来不像是真实的&#34;由一只手执行的曲线。其次,我们对加速度计的质量,准确性,延迟或其他复杂性了解多少?第三点,我们对&#34;测量&#34;加速度数据,它们是否适合&#34;一些&#34;在x-y-plot形状中绘制时,曲线是否平滑?如果该曲线看起来不是非常平滑,则需要对加速度数据进行假设以执行线性或更好的样条拟合。之后,您可以简单地通过分析公式进行整合。 - 您可能会考虑在UPS包裹服务要求时以电子方式签名,您的签名在该垫上的样子是什么?这是你的加速系统可能发生的事情,没有一些&#34;智能&#34;曲率平滑算法。希望我的评论可以以某种方式提供帮助......问候,M。