如何在 Repast Simphony 中生成不同的 2D 显示(GUI 或样式代码?)?
How to generate different 2D displays in Repast Simphony (gui or style code?)?
我已经在 repast simphony 中构建了一个 3D 模型,它工作得(相当)好。然而,由于模型的性质,代理往往会形成密集的团块。我想知道是否有一种方法可以通过生成连续更新的 2D 显示或最终状态视图来生成穿过团块中间的 2D 切片或横截面,以查看代理在团块内做什么。
我探索了 gui 中的显示选项并尝试了不同的代理层,但由于密度,其中 none 行得通。有没有办法稍微改变 gui 的这个方面,以在 50x50x50 网格中给出 x=25 处的 yz 平面的二维视图(例如)。
预先感谢您的帮助!
您可以根据代理的可见性属性,通过更改样式 class 中的透明度属性来更改 3D 显示中形状的透明度。例如,您的代理可以检查他们在 3D space 中的当前位置,并且当代理位于您想要可视化的 space 平面时,只有 return isVisible() 为真。这将仅在 3D 显示中显示存在于您定义的平面上的代理,该平面可以是通过 space 的任何 x、y、z 方向。在您的风格 class 中,您需要按如下方式更新 getAppearance(...) 方法中的透明度:
public TaggedAppearance getAppearance(MyAgent agent, TaggedAppearance taggedAppearance, Object shapeID) {
if (taggedAppearance == null) {
taggedAppearance = new TaggedAppearance();
// Customize your agent style here...
AppearanceFactory.setMaterialAppearance(taggedAppearance.getAppearance(), Color.white);
}
if (trans == null) {
trans = new TransparencyAttributes();
trans.setCapability(TransparencyAttributes.ALLOW_VALUE_READ);
trans.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);
trans.setCapability(TransparencyAttributes.ALLOW_MODE_READ);
trans.setCapability(TransparencyAttributes.ALLOW_MODE_WRITE);
trans.setTransparencyMode(TransparencyAttributes.FASTEST);
taggedAppearance.getAppearance().setTransparencyAttributes(trans);
}
if (agent.isVisible())
trans.setTransparency(0.0f);
else
trans.setTransparency(1.0f);
return taggedAppearance;
}
您还可以将透明度值从 0 调整为 1 以提供不同级别的透明度,以便感兴趣的代理完全不透明 (0.0f),而外围代理非常透明 (0.8f)。
我已经在 repast simphony 中构建了一个 3D 模型,它工作得(相当)好。然而,由于模型的性质,代理往往会形成密集的团块。我想知道是否有一种方法可以通过生成连续更新的 2D 显示或最终状态视图来生成穿过团块中间的 2D 切片或横截面,以查看代理在团块内做什么。
我探索了 gui 中的显示选项并尝试了不同的代理层,但由于密度,其中 none 行得通。有没有办法稍微改变 gui 的这个方面,以在 50x50x50 网格中给出 x=25 处的 yz 平面的二维视图(例如)。
预先感谢您的帮助!
您可以根据代理的可见性属性,通过更改样式 class 中的透明度属性来更改 3D 显示中形状的透明度。例如,您的代理可以检查他们在 3D space 中的当前位置,并且当代理位于您想要可视化的 space 平面时,只有 return isVisible() 为真。这将仅在 3D 显示中显示存在于您定义的平面上的代理,该平面可以是通过 space 的任何 x、y、z 方向。在您的风格 class 中,您需要按如下方式更新 getAppearance(...) 方法中的透明度:
public TaggedAppearance getAppearance(MyAgent agent, TaggedAppearance taggedAppearance, Object shapeID) {
if (taggedAppearance == null) {
taggedAppearance = new TaggedAppearance();
// Customize your agent style here...
AppearanceFactory.setMaterialAppearance(taggedAppearance.getAppearance(), Color.white);
}
if (trans == null) {
trans = new TransparencyAttributes();
trans.setCapability(TransparencyAttributes.ALLOW_VALUE_READ);
trans.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);
trans.setCapability(TransparencyAttributes.ALLOW_MODE_READ);
trans.setCapability(TransparencyAttributes.ALLOW_MODE_WRITE);
trans.setTransparencyMode(TransparencyAttributes.FASTEST);
taggedAppearance.getAppearance().setTransparencyAttributes(trans);
}
if (agent.isVisible())
trans.setTransparency(0.0f);
else
trans.setTransparency(1.0f);
return taggedAppearance;
}
您还可以将透明度值从 0 调整为 1 以提供不同级别的透明度,以便感兴趣的代理完全不透明 (0.0f),而外围代理非常透明 (0.8f)。