取消代理而不重置透视图

时间:2014-04-02 21:43:31

标签: watch netlogo

我正在“观察”代理,现在想要以编程方式“解开”代理(以便不会监视代理)。我正在使用3D视图运行模型(在NetLogo 5.0.4中)。从用户手册中可以看出,取消观看的唯一方法是使用“reset-perspective”,但这会产生在3D视图中重置透视图的不良副作用。是否有一种更好的取消观察方式,不会扰乱观点?

2 个答案:

答案 0 :(得分:2)

据我所知,在没有将观察者返回默认位置的情况下,无法在NetLogo 3D中调用reset-perspective

然而,有一种方法可以解决这个问题:您可以向当前正在观看的subject hatch询问隐藏的"虚拟"乌龟在它的当前位置和watch这个假人而不是你的原始主题继续移动。 (但这并不是无缝的,因为"聚光灯"圆圈留在假人周围。)

以下是一个完整的示例,其中常规海龟有travelers品种,傻瓜有cameras品种:

breed [ travelers traveler ]
breed [ cameras camera ]

to setup
  clear-all
  create-travellers 10
  watch one-of travelers
end

to go
  ask travelers [ fd 0.1 ]
end

to stop-watching
  if subject != nobody [
    ask subject [
      hatch-cameras 1 [
        set hidden? true
        watch-me
        ask other cameras [ die ]
      ]
    ]
  ]
end

这假定从界面按钮调用stop-watching

答案 1 :(得分:1)

支持NetLogo 3D中观察者的程序控制是......参差不齐。

您可以存储__oxcor__oycor__ozcor的值,然后在调用setxyz后使用reset-perspective恢复这些值。

但也有投球和投球。您可以使用__opitch__oroll阅读它们,但在我看来它们无法直接设置。我想你至少可以使用facexyz来恢复音高,但不是滚动? 3D东西让我困惑。

请注意,NetLogo的扩展API可用于编写符合您需要的扩展程序。