对于上下文:我正在开发一个内置有加速度计的嵌入式系统。此设备已连接至智能手机并传输数据(包括加速度计值)。现在,该设备可以以任何方向连接到车辆/自行车/ ...
问题:当我从设备接收到加速度计数据时,我想将其转换为“车辆空间”。我到目前为止所发现的是需要的:
我在应用程序中同时计算了这两个向量,但是现在我对数学/实现部分有些困惑。
我发现可能是一种解决方案的是Change of Basis,但是我没能
我不想为这样的“小”任务包括一个繁琐的数学库,而是希望自己理解它背后的数学。
我脑海中的当前解决方案是基于我对大学数学的长期记忆,我没有以下证据:(伪代码)
val nfv = normalize(forwardVector)
val ndv = normalize(downwardVector)
val fxd = cross(nfv, ndv)
val rotationMatrix = (
m11: fxd.x, m12: fxd.y, m13: fxd.z,
m21: ndv.x, m22: ndv.y, m23: ndv.z,
m31: nfv.x, m32: nfv.y, m33: nfv.z
)
// Then for each "incoming" vector
val transformedVector = rawVector * rotationMatrix
问题:这是正确的方法吗?