2016-06-14 73 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