2016-06-14 75 views
1

我有一个物体的x,y位置,它可以在已知点周围形成大致圆形的轨道。如果我给它一个x,y位置的向量,有没有一种算法可以给我这个身体随时间推移的轨道数?我不关心身体距离轨道“起源”的距离变化。如何从位置数据计算(计数)轨道数量?

EDIT 1:

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

  1. 移在x,由x身体ÿCOORDS,轨道原点的y位置(即使轨道[0的原点, 0])体XY的
  2. 计算ATAN2得到弧度,然后转换为度
  3. 移度,使得0是开始体
  4. 的位置找到度矢量中的所有转点(找到359-> 0转变)
  5. 计数轨道作为转弯点+剩余
+0

x,y的矢量是以任何特定顺序排列的吗? –

+0

是的,它是有序的。 –

+0

是吗? *什么顺序?*我试图让你在你的问题更具体。如果按照增加的“x”值排序,职位列表对我没有任何好处。我*假设*你的意思是按照时间顺序排列,'a [0]'是最早的,'a [n]'是最近的。但是你的问题没有说明,所以你得到的任何解决方案可能都是无效的。 –

回答

2

以下算法假定有每轨道存储2点以上的位置,以小于180度的间隔数。

基本上,您可以使用第一个位置为轨道定义一个“终点线”,并在身体穿过它时增加一个计数,当位置矢量的点积符号与线正常变化时,可以检测到该变化:

  • 将已知点的向量从身体绕着轨道转到系列中的第一个位置,并找到垂直于它的向量。在2D中,只需从第一个位置减去中心点,然后交换x和y分量并取消它们中的一个即可。该向量定义了每个轨道的“终点线”的法线。
  • 将该矢量从中心位置移至该系列中的第二个位置,并通过分量乘以上面计算的正常值来查找点积。
  • 初始化的轨道计数到零
  • 对于系列中的每个剩余位置:
    • 计算从中心到的位置的矢量,和它与精整线正常点积。如果点积的符号与第二个位置的符号相同,并且与该系列中的以前的位置不同,则将计数增加1。

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

+0

通过使用atan函数将x,y坐标转换为位置和中心点之间的角度,可以简化解决方案。 –

+0

迄今为止,我用我的解决方案编辑了我的第一篇文章。 –

+1

@EyalShulman这取决于你所说的“简化”?更容易理解,更容易实施或减少对CPU的操作?在我看来,dot产品在所有3个标准中都更简单(它只是两个乘法和一个加法),但前两个公认是主观的。 – samgak