2012-10-02 21 views
2

我有,作爲輸入,任意的 「形成」,這是矩形的列表,˚F確定一個點的列表是否符合「形成」?

Formation

而且作爲另一個輸入,2D點的無序列表,P

Input

在這個例子中,我認爲P比賽編隊F,因爲如果P要逆時針旋轉45°,將通過包含一個點來滿足F中的每個矩形。如果在P中有一個不屬於矩形的無關點,也可以認爲是匹配。

地層和點輸入都不具有任何特定的起源,並且兩者之間的比例不需要是相同的,例如,地層可以描述一公里的面積,並且輸入點可以描述一釐米的面積。最後,我需要知道哪個點最終在哪個節點中形成。

我想開發一個滿足所有這些約束的通用算法。它將在每秒鐘對位置信息的大型數據庫執行數百萬次,因此我試圖儘快「失敗」。

我已經考慮過在兩個輸入中的所有點之間的角度,並比較它們,或計算和比較船體,但每種方法似乎都與約束之一分崩離析。

地層中的點也可以很容易地表示爲具有x,y原點和容差半徑的圓,並且這似乎簡化了迄今我嘗試的方法。我會感謝任何堅實的攻擊計劃或A-Ha!見解。

+0

乍一看,這相當聽起來像在點組可能變換的空間的優化問題(縮放,旋轉,平移?),優化匹配的數量和質量(以四/圓心的距離)。 –

回答

2

我又想了一遍 - 這次使用極座標。

的描述是越來越複雜/模糊的,所以here是一些代碼,希望示出的想法。

主旨是表達在極座標中的編隊和點,與地層/點集的中心爲原點。然後變得更容易找到點和地層之間的轉換的旋轉和縮放因子。通過比較點集和地層區集的平均值,可以平均找到平移分量。

請注意,此方法不會將您的地層區域視爲正方形或圓形,而是將其視爲圓形區段。希望這是一個你可以忍受的騙局。

它也不會返回有效映射變換的確切比例和旋轉項。它給你一個地層區域和點之間的映射,以及最終旋轉和縮放因子的良好近似。這種近似可以通過一個簡單的放鬆方案很快被提煉成一個有效的解決方案。它也會很快忽視無效點集。

+0

該應用程序處理各地的極座標,並且我已經計算了質心。出於某種原因,這並沒有發生在我身上。感謝您投入此時間,這聽起來像一個可行的解決方案。 – Mieko

1

一種方法是在相對座標系中表示點集和地層。

對於每個點集和形成:

  1. 確定最相互遙遠一對點,叫他們甲乙
  2. 從通過A和B的線確定最遠的點,它命名爲c 。確保C位於AB行的左側 - 您可能需要交換A和B來完成此操作。
  3. 以A,B和C的形式表示其餘點。這是一個簡單的事情,即通過AB爲每個點尋找最近點D,然後按比例縮放所有距離的距離在A和B之間。從A到D的距離是你的相對x座標,從D到該點的距離是y。

例如,如果發現A和B是十個單位分開,並且C是5個單位遠離AB的中點,則相對座標將是: A:(0,0) B:(1,0) C:(0.5,0。5)

然後,您可以獨立於全局座標系比較點集和地層。請注意,找到匹配的距離公差也必須按照AB的比例進行縮放。

我可以很容易想象問題編隊這種方法,其中A,B和C的選擇是很難做出明確的,但它是一個開始。

+0

這是一個聰明的想法,也是我嘗試過的方法之一。大約一半的輸入地層具有幾乎對稱(在公差範圍內)的凸包,而整個地層則不是。找到一個毫不含糊的最遙遠的部分確實變得混亂。再次,對於這種情況很明顯的編隊(就像所介紹的那樣),對於非匹配點輸入,它確實很快就會失效。我認爲搜索能夠爲A,B和C做出合理選擇的組合是很容易處理的,因爲我的大部分輸入形式和點集最多隻有8個點。 – Mieko

相關問題