質問 (回答受付中)[artisocモデル] 片側一車線の交差点の交通流モデルについて | |
質問者: ryuheiさん , 質問日時: 2019/07/16 13:59 |
車が前方車両を認識して、赤信号で前方車と衝突することなく、停止と出発をさせたいのですが、車エージェントが動いてくれません。 どうか、教えてください。 よろしくお願い致します。
Agt_Init{
}
Agt_Step{
Dim aroundSignals As AgtSet Dim tmpSignal As Agt Dim frontSignal As Agt Dim isSignal As Boolean Dim isTmpFlag As Boolean Dim distance As Double Dim minDistance As Double Dim CarminDistance As Double Dim SignalminDistance As Double Dim 進距離 As Double
Dim tmpCar As Agt Dim aroundCars As AgtSet Dim isCarFront As Boolean Dim istmpcar As Agt Dim frontCar As Agt
isCarFront = False distance=1000 minDistance = 10 //100m以内の車を取得 MakeOneAgtSetAroundPosition(aroundCars,Universe.マップ, My.X,My.Y ,0,10,Universe.マップ.車)
//100m以内の車から前方車を見つける For Each tmpCar In aroundCars isTmpFlag = False //自分の向いてる方向から、該当しない車(違うライン、後ろの車)を見つけ、フラグをオフ If (My.方向 == 1) And (tmpCar.方向 == 1) And (My.X == tmpCar.X) And (My.Y >= tmpCar.Y) Then isTmpFlag = True End If If (My.方向 == 2) And (tmpCar.方向 == 2) And (My.Y == tmpCar.Y) And (My.X<= tmpCar.X) Then isTmpFlag = True End If If (My.方向 == 3) And (tmpCar.方向 == 3) And (My.X == tmpCar.X) And (My.Y <= tmpCar.Y) Then isTmpFlag = True End If If (My.方向 == 4) And (tmpCar.方向 == 4) And (My.Y == tmpCar.Y) And (My.X >= tmpCar.X) Then isTmpFlag = True End If //該当する車で近いと思われるものがあれば、前方車として登録 If isTmpFlag == True Then distance = Abs( (My.X - tmpCar.X ) + (My.Y - tmpCar.Y ) ) If distance < minDistance Then isCarFront = True CarminDistance = distance frontCar = tmpCar End If End If
Next tmpCar
distance=10000 minDistance=10 isSignal= False //100m以内の信号を取得 MakeOneAgtSetAroundPosition(aroundSignals,Universe.マップ, My.X,My.Y ,0,10,Universe.マップ.信号) //100m以内の車から前方車を見つける For Each tmpSignal In aroundSignals isTmpFlag = False //自分の向いてる方向から、該当しない信号(違うライン、後ろの信号)を見つけ、フラグをオフ If (My.方向 == 1) And (My.X == tmpSignal.X) And (My.Y >= tmpSignal.Y) Then isTmpFlag = True End If If (My.方向 == 2) And (My.Y == tmpSignal.Y) And (My.X <= tmpSignal.X) Then isTmpFlag = True End If If (My.方向 == 3) And (My.X == tmpSignal.X) And (My.Y <= tmpSignal.Y) Then isTmpFlag = True End If If (My.方向 == 4) And (My.Y == tmpSignal.Y) And (My.X >= tmpSignal.X) Then isTmpFlag = True End If //該当する信号で近いと思われるものがあれば、信号として登録 If isTmpFlag == True Then distance = Abs( (My.X - tmpSignal.X ) + (My.Y - tmpSignal.Y ) ) If distance < minDistance Then isSignal = True SignalminDistance = distance frontSignal = tmpSignal End If End If Next tmpSignal
//信号が赤であれば If isSignal == True Then if isCarFront == True Then if CarminDistance>SignalminDistance Then if frontSignal.現在色 == Color_Red Then if SignalminDistance<=1 Then my.chang=0 else my.chang=1 end if else my.chang=1 end if else if CarminDistance<=1 Then my.chang=0 else my.chang=1 end if end if else if frontSignal.現在色 == Color_Red Then if minDistance<=1 Then my.chang=0 else my.chang=1 end if else my.chang=1 end if end if else if isCarFront == True Then if CarminDistance <= 1 Then my.chang=0 else my.chang=1 end if else my.chang=1 end if end if
if my.chang==1 then 進距離=my.chang my.速度=進距離
if my.方向==1 then my.Y = my.Y-進距離 else if my.方向==2 then my.X=my.X+進距離 else if my.方向==3 then my.Y=my.Y+進距離 else if my.方向==4 then my.X=my.X-進距離
else if my.方向==1 then my.Y = my.Y else if my.方向==2 then my.X=my.X else if my.方向==3 then my.Y=my.Y else if my.方向==4 then my.X=my.X end if end if end if end if end if end if end if end if end if
|
|
▼ 全ての回答 まだ回答はありません。
|
|