MAS コミュニティ
artisoc質問用掲示板(アーカイブ)
  
質問掲示板は移転しました。新掲示板はこちら

質問  (回答受付中)

[artisocモデル] ルールを守りながら目的地を変える方法
質問者: shunさん , 質問日時: 2019/01/16 17:45
100*100のスケールで船舶が避難するモデルを考えています。
船舶ははじめ画面上部に並んでおり、一斉にMy.Direction = getdirection(my.X, my.Y, 50, 20)に向かって一定速度でぶつからないように(ターミナル駅の通勤客の流れを参考に他のエージェントを認識したら20°向きを変える)しながら向かいます。
そしてmy.Y<21になると目的地を変更して
My.Direction = getdirection(my.X, my.Y, 50, 10, universe.terminal)
に向かうように設定して、my.Y<=10 となるとエージェントは画面から消えるように設定しています。
そこで、船のルール(最大20°しか方向転換できない)を優先させて、目的地を変更する場合に急な方向転換をさせないようにするにはどのようにすればよろしいでしょうか。
連投すみませんが、よろしくお願いします。



▼ 全ての回答


わかりにくい文章なので回答が難しいですが、
ただ単にIF文を使い、20度以上のなる場合は、20度にすれば良いだけではないでしょうか。
次のステップにおいて、もう一度方向を変えれば良いだけです。

回答者: igaguri さん , 回答日時: 2019/01/16 18:42
苦戦しています.現在のコードです.

dim directionchange as double
universe.terminal.direction=gethistory(my.Direction,1)
directionchange = my.Direction - universe.terminal.direction
if directionchange>20 then
my.Direction=my.Direction + 20
else
My.Direction = getdirection(my.X, my.Y, 50, 10, universe.terminal)
end if
if directionchange <-20 then
my.Direction=my.Direction-20
else
My.Direction = getdirection(my.X, my.Y, 50, 10, universe.terminal)
end if

左右どちらかに20°以上方向を変えるようなら20°になるように設定しているつもりなのですが、おかしい点はありますか。

回答者: shun さん , 回答日時: 2019/01/23 22:04
shunさん
デバッグの方法ですが、以下のような手順で進めると良いと思います。
・変数の値を出力して、想定と違う場所を特定する
・なぜ想定と違うのか検討する

動作が想定と異なるとすれば、どこかで想定外の値を入れていると思います。

回答者: ObiWan さん , 回答日時: 2019/01/24 09:33



Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
( 会社情報 情報セキュリティ・個人情報について )