如何从位置数据计算(计数)轨道数量?
我有一个物体的x,y位置,它可以在已知点周围形成大致圆形的轨道。如果我给它一个x,y位置的向量,有没有一种算法可以给我这个身体随时间推移的轨道数?我不关心身体距离轨道“起源”的距离变化。如何从位置数据计算(计数)轨道数量?
EDIT 1:
我的解决方案到目前为止:
- 移在x,由x身体ÿCOORDS,轨道原点的y位置(即使轨道[0的原点, 0])体XY的
- 计算ATAN2得到弧度,然后转换为度
- 移度,使得0是开始体
- 的位置找到度矢量中的所有转点(找到359-> 0转变) 个
- 计数轨道作为转弯点+剩余
以下算法假定有每轨道存储2点以上的位置,以小于180度的间隔数。
基本上,您可以使用第一个位置为轨道定义一个“终点线”,并在身体穿过它时增加一个计数,当位置矢量的点积符号与线正常变化时,可以检测到该变化:
- 将已知点的向量从身体绕着轨道转到系列中的第一个位置,并找到垂直于它的向量。在2D中,只需从第一个位置减去中心点,然后交换x和y分量并取消它们中的一个即可。该向量定义了每个轨道的“终点线”的法线。
- 将该矢量从中心位置移至该系列中的第二个位置,并通过分量乘以上面计算的正常值来查找点积。
- 初始化的轨道计数到零
- 对于系列中的每个剩余位置:
- 计算从中心到的位置的矢量,和它与精整线正常点积。如果点积的符号与第二个位置的符号相同,并且与该系列中的以前的位置不同,则将计数增加1。
您可以通过计算最后的位置和第一之间的角度制定出小数部分。
通过使用atan函数将x,y坐标转换为位置和中心点之间的角度,可以简化解决方案。 –
迄今为止,我用我的解决方案编辑了我的第一篇文章。 –
@EyalShulman这取决于你所说的“简化”?更容易理解,更容易实施或减少对CPU的操作?在我看来,dot产品在所有3个标准中都更简单(它只是两个乘法和一个加法),但前两个公认是主观的。 – samgak
x,y的矢量是以任何特定顺序排列的吗? –
是的,它是有序的。 –
是吗? *什么顺序?*我试图让你在你的问题更具体。如果按照增加的“x”值排序,职位列表对我没有任何好处。我*假设*你的意思是按照时间顺序排列,'a [0]'是最早的,'a [n]'是最近的。但是你的问题没有说明,所以你得到的任何解决方案可能都是无效的。 –