如何根据位置数据计算(计数)轨道数?

时间:2016-06-14 12:10:21

标签: algorithm physics discrete-mathematics

我有一个身体的x,y位置,它围绕一个已知的点做出大致圆形的轨道。有没有一种算法可以给我这个身体随着时间的推移而产生的轨道数量,如果我给它一个x,y位置的矢量?我并不关心身体与起源的距离变化"轨道。

编辑1:

到目前为止我的解决方案:

  1. 将身体的x,y坐标移动到轨道原点的x,y位置(即使轨道的原点为[0,0])
  2. 计算身体xy的atan2以获得弧度,然后转换为度
  3. 移位度使0​​为身体的起始位置
  4. 找到度矢量中的所有转折点(找到359-> 0转换)
  5. 将轨道数视为转折点数+余数

1 个答案:

答案 0 :(得分:2)

以下算法假设每个轨道存储的位置超过2个,间距小于180度。

基本上你定义一条"终点线"对于使用第一个位置的轨道,当身体穿过它时增加一个计数,当位置矢量的点积与线法线的符号发生变化时,你可以检测到:

  • 从身体围绕轨道运行的已知点获取向量到系列中的第一个位置,找到垂直于它的向量。在2D中,您可以通过从第一个位置减去中心点,然后交换x和y分量并取消其中一个来完成此操作。此向量定义了"终点线的法线"每个轨道。
  • 将矢量从中心位置移到系列中的第二个位置,并通过乘以分量来找到上面计算的法线的点积。
  • 将轨道计数初始化为零
  • 对于系列中的每个剩余位置:
    • 计算从中心到位置的矢量,以及它与终点线法线的点积。如果点积的符号与第二个位置的符号相同,并且与系列中的先前位置不同,则将计数增加一。

您可以通过计算最后一个位置和第一个位置之间的角度来计算小数部分。