“下降线”的方向和加速度的大小都由引力矢量在平面上的投影决定。如果平面具有法向量n,则投影算子为P ( n ) = 1 - nn,其中1是恒等算子,nn是法向量与自身的外(张量)积。引力矢量g的投影就是g ' = P ( n )。g = ( 1 - nn ) g = g- ( n . g ) n,其中点表示内(点)积。现在您只需要选择一个合适的正交参考系(ex , ey , ez),其中ei是沿i方向的单位向量。在此参考框架中:
n = nx ex + ny ey + nz ez
g = gx ex + gy ey + gz ez
点积n。g是:
ñ。g = nx * gx + ny * gy + nz * gz
一个非常合适的参考系选择是ez与n共线的参考系。那么 nx = 0 和 ny = 0 和 nz = || n || = 1,因为法线向量是单位长度的。在这个框架中n。g就是 gz。那么g的投影的分量是:
g'x = gx
g'y = gy
g'z = 0
g ' 在 XY 平面上的方向可以由正交参考系中的点积a来确定。乙= || 一个|| || 乙|| cos( a , b ),其中 || 一个|| 表示 a 的范数(长度),cos( a , b ) 是a和b之间夹角的余弦值。如果从 X 方向测量角度,则:
克'。ex = (gx ex + gy ey ) 。ex = gx = || 克'|| || 前|| cos( g ', ex ) = g' cos( g ', ex )
其中 g' = || 克'|| = sqrt(gx^2 + gy^2)。角度就是 arccos(gx/g'),即重力牵引矢量的 X 分量与其投影到 XY 平面上的大小之间的比率的反余弦:
角度 = arccos[gx / sqrt(gx^2 + gy^2)]
加速度的大小与g '的大小成正比,即(再次):
g' = || 克'|| = sqrt(gx^2 + gy^2)
现在的好处是,所有加速度计都在参考框架中测量重力场的分量,通常ex与设备的高度(或宽度)对齐,ex与设备的宽度(或高度)对齐ez垂直于设备表面,与参考系完全匹配,其中ez与平面法线共线。如果您的 Arduino 设备不是这种情况,只需旋转加速度计并根据需要对齐即可。