2016-06-21 34 views
1

我正在嘗試使代理移動通過導航節點。這是我的設置:通過導航節點移動的代理

  1. 代理(比方說人/人)隨機位於空間中。
  2. 節點(只是另一種代理)也隨機位於空間中。
  3. 每個人都定義了一個目標節點。一個人應該通過導航節點移動到該目標節點。

這就是我想做的事:

  1. 每個代理向目標節點旋轉。
  2. 如果代理程序未找到任何要移動的導航節點,則每個代理程序的視覺範圍都會增加。

  • 每個代理移動到最近的導航節點,並重新開始搜索過程。

  • 當最近的導航節點是目標節點時,代理停止。然後,代理已經到了!

  • 我的問題:

    1. 我設置使用代理的旋轉:

      double r = Math.atan2(targetNode.getY() - this.getY(), 
           targetNode.getX() - this.getX()); 
      
      this.setRotation(r); 
      
    2. 我不知道如何在AnyLogic的視野範圍內進行編程。有任何想法嗎?

    回答

    1

    我在博士學位期間做了類似的事情。

    使用視圖區域的初始大小和形狀將多邊形節點對象myViewArea添加到您的代理。

    然後,您可以讓代理檢查,如果他使用myViewArea.contains()方法和檢查「看到」一個導航節點,對模型中的所有導航節點。

    如果他沒有找到任何,你可以改變你的myViewArea編程(爲請參閱Java API)

    希望這有助於。

    +0

    這裏的一個例子:http://agiltools.com/blogsp/2016/06/ – sdaza

    +0

    由於某些原因,該方法包含()不起作用。我的代理不斷旋轉,所以在定義相對座標時可能會出錯。 – sdaza

    +0

    我試圖實現您的視覺範圍解決方案,但我仍然遇到了導航節點的問題。我正在使用此代碼獲取多段線內的節點(agentVision):這裏是一個示例:http://dl.getdropbox.com/u/18116710/ExampleVisionPolyLine.alp – sdaza