0

我正在尝试使用加速度计读数即时计算关于初始位置的腿的角度。

当我接近这个时,我决定我需要记录一个平均重力矢量并计算我当前读数和那个之间的某个角度。

从理论上讲,这似乎是合理的:腿部的每个位置的重力读数都不同,因此在静止位置,读数应该收敛到一个向量,我可以用它来找到腿的角位移,相对于开始时的读数。

但是,我尝试了几种组合:两个向量之间的角度仅使用 Z 和 Y 分量(使用this);计算重力和电流之间的差向量,并执行 atan2(dY,SQRT(dX^2+dZ^2)); 计算 atan2(dY,dz)...(其中 dY 和 dZ 分别是 Y 和 Z 分量的当前和重力矢量的减法)

这些解决方案似乎都不起作用,所以我想知道我是否可以做到这一点。

有人对此有解决方案吗?

4

1 回答 1

1

假设设备绑在腿上,屏幕朝向与用户相同的方向,那么您可以计算出屏幕表面与东西向平面之间的角度。我只是在这里给你一个想法,你必须做更多的工作才能知道角度是低于还是高于东西向平面。角度可以计算为

Math.acos(event.values[3] / norm of event.values[3]);  

因此,如果用户站立,则角度将为 90 或 -90,具体取决于您的约定。当腿向上移动时,角度的绝对值将减小。一个大腿平行于东西平面,即屏幕平放,腿向上移动,你会得到与腿向下移动相同的角度,所以你需要使用更多的信息来解决这个问题。
如果屏幕与用户面对的方向正交,那么您必须计算东西向平面与与屏幕正交的平面之间的角度。我让你弄清楚这一点,它可能是上面的等式,event.values 0 or 1具体取决于设备是纵向还是横向。

于 2013-03-29T19:54:34.550 回答