Netlogo:如何将标题四舍五入为90 180 270 360

Netlogo:如何将标题四舍五入为90 180 270 360,netlogo,Netlogo,我目前正在为在特定道路上行走的人建立一个模型(道路补丁,颜色=白色)。代理的移动将仅限于白色补丁,当他们遇到黑色补丁时,他们将旋转180度 我发现的问题是当我试图确定特工的头目时。我希望航向走到最近的红色斑块(目的地),但当我使用: 1. 使用[pcolor=red][distance myelf]将标题设置为min-one补丁,这可能会让您开始-通过最少的检查,它似乎可以完成任务,但您可能需要检查异常 cardinal-4reporter接受给定的任何输入,并检查模是否等于0。如果不是,它将检

我目前正在为在特定道路上行走的人建立一个模型(道路补丁,颜色=白色)。代理的移动将仅限于白色补丁,当他们遇到黑色补丁时,他们将旋转180度

我发现的问题是当我试图确定特工的头目时。我希望航向走到最近的红色斑块(目的地),但当我使用:

1.
使用[pcolor=red][distance myelf]将标题设置为min-one补丁,这可能会让您开始-通过最少的检查,它似乎可以完成任务,但您可能需要检查异常

cardinal-4
reporter接受给定的任何输入,并检查模是否等于0。如果不是,它将检查模是否小于/等于45-如果是,则从方向(
dir
)中减去该值。如果模大于45,则从方向上减去模并加90

检查
过程仅打印所列值的报告器输出

to setup
  ca
  reset-ticks
end

to-report cardinal-4 [ heading-input ]
  let dir heading-input
  let remain dir mod 90
  if remain != 0 [
    ifelse remain <= 45 [
      set dir dir - remain
    ]
    [
      set dir dir - remain + 90
    ]
  ]  
  report dir
end
let direction heading towards min-one-of patches with [pcolor = red ] [ distance myself ]
if direction != mod 90
set direction 90 * round(arah/ 90)
to setup
  ca
  reset-ticks
end

to-report cardinal-4 [ heading-input ]
  let dir heading-input
  let remain dir mod 90
  if remain != 0 [
    ifelse remain <= 45 [
      set dir dir - remain
    ]
    [
      set dir dir - remain + 90
    ]
  ]  
  report dir
end
to check
  let testVals [ -361 -359 -271 -269 -181 -179 -91 -89 -1 0 1 89 91 179 181 269 271 359 360 361 ]
  print map [ i -> ( word i " becomes " cardinal-4 i "\n" ) ] testVals
end