2016-05-16 33 views
4

我有一個(長)x,y元組列表,它們共同描述了一個路徑(即鼠標活動以恆定速率採樣,儘管速度不恆定)。如何計算沿插入路徑的距離(Python2.7)?

我的目標是以恆定的速度爲該路徑製作動畫。所以我有彎曲的部分和直線部分,並且任何兩點之間的德爾塔-D不能保證是相同的。

鑑於數據等:

[(0,0), (0,2), (4,6).... ]其中該列表的長度爲〜1K-2K點,是否有除了每個點之間蠻力計數線段長度的任何方式,然後指定每第n長度的「幀」?

回答

1

如果您使用Numpy數組來表示您的數據,那麼您可以矢量化計算。這與您將要獲得的效率一樣。

0

我確定有一種優雅的方式可以用熊貓來做到這一點,但在那之前,如果你能忍受一些錯誤,這裏有一個簡單的想法。你可以通過幾種不同的方式來做到這一點,但這裏的要點如下:

將每個元組視爲鏈表中的一個節點。在每個點之間定義所需的長度,D。在列表中移動時,如果下一個節點距離當前節點的距離不是D,則相應地調整其x,y座標(或根據需要插入/刪除節點),使距離當前節點的距離爲D連接節點的線段。

就像我說的,你必須忍受一些錯誤,因爲你的原始點將被調整/刪除。如果您在此之前生成點以創建更多分辨率,則可能會減少錯誤。

+0

嗯,我想這聽起來像你希望避免的「蠻力」方法... –

+0

是的,這就是我所做的;它比我想象的要快得多,所以我不是很擔心,但作爲一個非CS的人,我的感覺是,這可能是一種更有效的方法。 – Jonline

0

如果您要使用近似值來表示點之間的路徑, tuple1和下一個元組,tuple2是一條直線,則:

abs(complex(tuple2[0]-tuple1[0], tuple2[1]-tuple1[1])) 

給你這兩個點之間經過的長度,其總和將是總長度。這除以總時間將給出長度以單位時間遍歷。所以仍然是蠻力,但也許是一個更有效的方法來做到這一點,特別是如果在列表理解和sum函數一起使用。作爲標記s。注意,如果你可以提高採樣分辨率,那麼近似值就會提高。

+0

請參閱上面的評論從我標記s – Jonline