Je suis en train de construire un modèle pour les personnes qui marchent sur un certain chemin (plaques de route, couleur = blanc). Le mouvement des agents ne sera limité que sur la zone blanche et lorsqu'ils rencontreront une zone noire, ils tourneront de 180 degrés.Netlogo: comment arrondir en 90 180 270 360 seulement
Le problème que j'ai trouvé était lorsque j'ai essayé de définir le titre des agents. Je veux que le cap de marcher le plus proche tache rouge (destination), mais quand je l'utilise:
ensemble en direction de min-un des patchs avec [pcolor = red] [mes distances] <
les agents ne bougeront pas de leur patch. Il s'est avéré que le "titre" généré par le code ci-dessus a la valeur de -360 à 360 avec des décimales. La procédure de marche que j'ai construite ne permet que le cap avec des multiplications de 90 (-360, -180 ... 90, 180, 270, 360). Ceci est le code complet pour ma procédure de marche:
globals [ flagl flagr ]
ask agents [
;reset flag
set flagr 0
set flagl 0
; check and note if there is a path on the left or the right
ask patch-left-and-ahead 90 1 [if (pcolor = white) [set flagl 1]]
ask patch-right-and-ahead 90 1 [if (pcolor = white) [set flagr 1]
]
;in T-junction, decide to turn left or right (random)
if((flagl = 1) and (flagr = 1))
[
ifelse random 100 > 50
[set heading heading - 90]
[set heading heading + 90]
]
;if it's only applicable to turn right, then turn right
if((flagl = 0) and (flagr = 1)) [set heading heading + 90]
;if it's only applicable to turn left, then turn right
if((flagl = 1) and (flagr = 0)) [set heading heading - 90]
;return if there's no mor path
if [pcolor] of patch-at-heading-and-distance heading 1 = black [rt 180]
;agent movement
**;face min-one-of patches with [pcolor = red ] [ distance myself ]**
fd 1
;stopping procedure
if [pcolor] of patch-here = red [fd 0]
]]
J'ai essayé de contourner le cap généré par # 1 comme ceci:
let direction heading towards min-one-of patches with [pcolor = red ] [ distance myself ]
if direction != mod 90
set direction 90 * round(arah/ 90)
Cependant, il donne un avis d'erreur puisque « laissez "commande ne peut pas prendre ce genre d'entrée.
C'est la capture d'écran de la carte que j'ai construit: Map
Toute aide pour résoudre ce problème est extrêmement apprécié. Je vous remercie!