Math 如何使用加速度计确定八面体和十二面体的侧面?

Math 如何使用加速度计确定八面体和十二面体的侧面?,math,arduino,accelerometer,physics,stm32,Math,Arduino,Accelerometer,Physics,Stm32,我有三个图形:立方体,八面体,十二面体 在内部,每个数字都有一个加速计 数字的侧面编号在1和n之间 任务:确定立方体的当前边、八面体、十二面体 对于立方体,我推导了公式: 侧面=圆形((Ax*1/988)+(Ay*2/988)+(Az*3/988)) 变量“side”将给出区间-3和3(不带0)中的值,这意味着立方体的当前边介于1和6之间 现在我需要对八面体和十二面体做同样的处理。救命啊,我该怎么做?我需要额外的传感器或加速计就足够了吗?使用这样的公式非常聪明,但它有一些不需要的特性。首先,当从

我有三个图形:立方体,八面体,十二面体

在内部,每个数字都有一个加速计

数字的侧面编号在1和n之间

任务:确定立方体的当前边、八面体、十二面体

对于立方体,我推导了公式:

侧面=圆形((Ax*1/988)+(Ay*2/988)+(Az*3/988))

变量“side”将给出区间-3和3(不带0)中的值,这意味着立方体的当前边介于1和6之间


现在我需要对八面体和十二面体做同样的处理。救命啊,我该怎么做?我需要额外的传感器或加速计就足够了吗?

使用这样的公式非常聪明,但它有一些不需要的特性。首先,当从一侧移动到另一侧时,它将通过一些中间值,这是由于公式在几何上没有意义。例如,如果您在-3侧并旋转到-1侧,则它必然会穿过-2。其次,它可能对有噪声的加速计数据不具有鲁棒性,例如,在-3和-1边之间的一部分,但接近-1的矢量可能给出-2,而它应该给出-1

另一种方法是存储图形的面法线阵列,然后将加速度计读数的点积与每个面法线一起获取。最接近的匹配(具有最高点积的匹配)是最近的边

e、 g:

float cube_边[6][3]={
{-1, 0, 0},
{0, -1, 0},
{0, 0, -1},
{1, 0, 0},
{0, 1, 0},
{0, 0, 1},
};
整数最近方(浮动轴、浮动Ay、浮动Az)
{
最大浮点数=0;
int seaster_side=-1;//如果向量为零,则返回-1
用于(内部侧=0;侧<6;侧++)
{
浮点数=(立方体_边[边][0]*Ax)+
(立方体[侧面][1]*Ay)+
(立方体[侧面][2]*Az);
如果(点>最大点)
{
最大点=点;
最近的_侧=侧;
}            
}
返回最近的U侧;
}

您可以通过使用八面体和十二面体的曲面法线来扩展八面体和十二面体的曲面法线。不需要额外的传感器。

您需要编写一些代码。就是这样@JarrodRoberson,这里我们不需要代码,我们需要一个数学公式,这不是一个主题问题。这就是我们不是编码服务的要点。阅读如何提出一个好问题。数学也不是主题。@JarrodRoberson,我没有说“为我做”。我只是请求帮助,搜索方向等。幸运的是,我已经收到了答案。谢谢大家的关注!嗯,我刚意识到你的答案和我的一样。。。(我会删除我的,因为你的速度更快)但只需要补充:如果测得的重力距离
9.81[m/s^2]
太远,网格不是静止的,也不是自由下落的,而是加速的,你应该忽略这些读数(假设你在地球表面这么做)@samgak,谢谢你的回答。我对常态知之甚少,但我会学习。小错误,你写
返回最近的_方在for循环中,它应该在for循环之后:)对于多维数据集,它工作得非常出色。非常感谢@Spektre我认为你应该取消删除你的答案,因为它包含的信息不是我的。谁是谁并不重要faster@samgak我加上它作为评论,我想这就足够了。嗨,@samgak,我研究的是法线。我找到了这张照片:[链接]。我需要12个向量在中心?