Personが特定の道路を通った際に速度を低減させる方法
現在、 A star探索アルゴリズムを使って避難シミュレーションを作成しています。その中で高低差のある道路でPerson速度を低減したいと考えています。 ①Personが特定の道路を通ったことを判別する方法 ②上る方向で特定の道路を通るか下る方向で特定の道路を通るかを判別する方法 ③通った際に速度を低減させる変数をPersonに与える方法 についてご教授お願い致します。 速度を低減させることに関係すると考えたコードを以下に記載します。 ルール:Pointで避難者を発生させるコード Agt_Init{ //避難場所のIDと被ったら0になるIf文 If My.ID==Universe.FinishID then MY.Clear=0 else If My.ID==Universe.FinishID2 then My.Clear=0 else If My.ID==Universe.FinishID3 then my.Clear=0 else If My.ID==Universe.FinishID4 then my.Clear=0 else My.Clear=100 end If end If end If end If Dim personagt As Agt //「Dim 変数指定子 As 変数の型」 Dim PersonAgt2 As Agt Dim i As Integer For i=0 to 2 //next iまでの動作を3回繰り返す(3回以下の操作を繰り返す) //記載しているID(=適当な避難開始地点)からエージェントを出す If My.ID==3375 or My.ID==3387 or My.ID==3389 or My.ID==3390 or My.ID==3393 or My.ID==3392 or My.ID==3391 or My.ID==3399 or My.ID==3398 or My.ID==3397 or My.ID==3401 or My.ID==3402 or My.ID==3403 or My.ID==3426 or My.ID==3425 or My.ID==3424 or My.ID==3423 or My.ID==3422 or My.ID==3421 or My.ID==3429 or My.ID==3435 or My.ID==3439 or My.ID==3441 or My.ID==3433 or My.ID==3436 or My.ID==3437 or My.ID==3438 or My.ID==3440 or My.ID==3509 or My.ID==3510 or My.ID==3505 or My.ID==3497 or My.ID==3496 or My.ID==3443 or My.ID==3511 or My.ID==3508 or My.ID==3507 or My.ID==3506 or My.ID==3499 or My.ID==3498 or My.ID==3512 or My.ID==3504 or My.ID==3503 or My.ID==3502 or My.ID==3501 or My.ID==3500 or My.ID==3538 or My.ID==3539 or My.ID==3540 or My.ID==3551 or My.ID==3552 then PersonAgt=CreateAgt(Universe.Map.Person) PersonAgt.X=My.X PersonAgt.Y=My.Y PersonAgt.area=0 //エージェントの避難開始地点を把握する Universe.Map.Point.iti=My.iti //personAgt.RouteArray=@a_star(My.UniqueID,Cagt(Universe.FinishID+2)) //personAgt.RouteCount=1 PersonAgt.speed= 0.041256250196028 PersonAgt.st=My.ID PersonAgt.SpeedRate=My.SpeedRate=1 end if next i ルール:Personのスピードや距離についてのコード Dim TargetPointAgt As Agt Dim distance As Double if My.RouteCount<CountToken(My.RouteArray) then //TargetpointID=CInt(GetToken(My.RouteArray,My.RouteCount)) TargetPointAgt=Universe.Map.Point(CInt(GetToken(My.RouteArray,My.RouteCount))) //targetPointAgt=Universe.Map.Point(TargetPointID) distance=Pursue(targetPointAgt,My.speed*My.SpeedRate)
現在、 A star探索アルゴリズムを使って避難シミュレーションを作成しています。その中で高低差のある道路でPerson速度を低減したいと考えています。 ①Personが特定の道路を通ったことを判別する方法 ②上る方向で特定の道路を通るか下る方向で特定の道路を通るかを判別する方法 ③通った際に速度を低減させる変数をPersonに与える方法 についてご教授お願い致します。 速度を低減させることに関係すると考えたコードを以下に記載します。 ルール:Pointで避難者を発生させるコード Agt_Init{ //避難場所のIDと被ったら0になるIf文 If My.ID==Universe.FinishID then MY.Clear=0 else If My.ID==Universe.FinishID2 then My.Clear=0 else If My.ID==Universe.FinishID3 then my.Clear=0 else If My.ID==Universe.FinishID4 then my.Clear=0 else My.Clear=100 end If end If end If end If Dim personagt As Agt //「Dim 変数指定子 As 変数の型」 Dim PersonAgt2 As Agt Dim i As Integer For i=0 to 2 //next iまでの動作を3回繰り返す(3回以下の操作を繰り返す) //記載しているID(=適当な避難開始地点)からエージェントを出す If My.ID==3375 or My.ID==3387 or My.ID==3389 or My.ID==3390 or My.ID==3393 or My.ID==3392 or My.ID==3391 or My.ID==3399 or My.ID==3398 or My.ID==3397 or My.ID==3401 or My.ID==3402 or My.ID==3403 or My.ID==3426 or My.ID==3425 or My.ID==3424 or My.ID==3423 or My.ID==3422 or My.ID==3421 or My.ID==3429 or My.ID==3435 or My.ID==3439 or My.ID==3441 or My.ID==3433 or My.ID==3436 or My.ID==3437 or My.ID==3438 or My.ID==3440 or My.ID==3509 or My.ID==3510 or My.ID==3505 or My.ID==3497 or My.ID==3496 or My.ID==3443 or My.ID==3511 or My.ID==3508 or My.ID==3507 or My.ID==3506 or My.ID==3499 or My.ID==3498 or My.ID==3512 or My.ID==3504 or My.ID==3503 or My.ID==3502 or My.ID==3501 or My.ID==3500 or My.ID==3538 or My.ID==3539 or My.ID==3540 or My.ID==3551 or My.ID==3552 then PersonAgt=CreateAgt(Universe.Map.Person) PersonAgt.X=My.X PersonAgt.Y=My.Y PersonAgt.area=0 //エージェントの避難開始地点を把握する Universe.Map.Point.iti=My.iti //personAgt.RouteArray=@a_star(My.UniqueID,Cagt(Universe.FinishID+2)) //personAgt.RouteCount=1 PersonAgt.speed= 0.041256250196028 PersonAgt.st=My.ID PersonAgt.SpeedRate=My.SpeedRate=1 end if next i ルール:Personのスピードや距離についてのコード Dim TargetPointAgt As Agt Dim distance As Double if My.RouteCount<CountToken(My.RouteArray) then //TargetpointID=CInt(GetToken(My.RouteArray,My.RouteCount)) TargetPointAgt=Universe.Map.Point(CInt(GetToken(My.RouteArray,My.RouteCount))) //targetPointAgt=Universe.Map.Point(TargetPointID) distance=Pursue(targetPointAgt,My.speed*My.SpeedRate)
