2010-05-03 36 views
0

我正在研究機器人本地化模擬器,並創建了一個名爲「地標」的類。一個類的動態數組,在另一個單獨的類中?

最終的結果將是一個始終居中且始終面向屏幕頂部的機器人。隨着它轉向,鳥瞰圖將圍繞機器人旋轉。爲了做到這一點,我假設我可以旋轉一個類,並讓所有元素都旋轉。

因此,地標類具有屬性x,y,標籤和半徑。這是假設模擬森林中的樹木位置。

爲了測試一切,我需要「森林數據」,並且我編寫了一個腳本,在100米x 100米範圍內生成100棵樹。該腳本自動生成x,y和radius範圍內的可接受範圍內的值。生成的數據存儲在名爲tempForest的對象中,爲100x3。

理想情況下,我想創建一個名爲「地標」(複數)的類,裏面有100個地標實例。

如何使用隨機生成的數據在地標的一個實例中實例化100個地標的實例?

理想情況下,我只需鍵入treeBeacons = landmarks();並且它會隨着x,y,radius數據隨機填充100個(用戶可定義,在配置文件中設置)實例。

我不知道如何處理「Landmark」類的動態數組,在另一個單獨的類「地標」中。

任何想法?

回答

1

我會創建一個具有屬性'fixedPositions',屬性'viewDirection'和依賴屬性'apparentPositions'的類「地標」。

如果您鍵入treeBeacons=landmarks;,您可以讓構造函數填寫fixedPositions,這是樹的位置列表。然後,您可以將treeBeacons.facing設置爲機器人面向的任何方向,並且您可以將森林相對於機器人作爲treeBeacons.apparentPositions

根據您的描述,我不認爲有必要讓您的樹木成爲物體。然而,如果你的樹真的需要單獨的對象,你可以使用地標的構造函數來創建對象而不是座標,並將它們存儲在fixedPositions(或trees)中。讓我建議您不要同時使用landmarkslandmark作爲不同的變量名稱。至少像我這樣的老百姓很難分辨兩者。

classdef landmarks 
    properties 
     fixedPositions %# positions in a fixed coordinate system. [ x, y, radius ] 
     facing = 0;%# direction in which the robot is facing 
    end 
    properties (Dependent) 
     apparentPositions 
    end 
    methods 
     function obj = landmarks(numberOfTrees) 
      %# set obj.fixedPositions here depending on the number of trees. 
     end 
     function out = get.apparentPositions(obj) 
      %# rotate obj.positions using obj.facing to generate the output 
     end 
     function plotMap(obj,fixedOrApparent) 
      %# plots the map, either using fixed or apparent coordinates (good for testing) 
     end 
    end 
end 
+0

所以固定的位置將是樹生成器的100x3輸出? 如果標題改變,明顯的位置會改變嗎?我假設我只是添加一個事件監聽器到明顯的位置,並且當我改變標題時將它關閉。 – 2010-05-03 04:23:24

+0

@pinnacler:是的,fixedPositions是樹生成器的輸出。由於apparentPositions是一個依賴函數,只要使用最近的'facing'值,就會重新生成它,因此不需要使用事件。 – Jonas 2010-05-03 11:44:37

相關問題