Как создать различные 2D-дисплеи в Repast Simphony (графический интерфейс или стиль?)? - PullRequest
0 голосов
/ 19 сентября 2018

Я построил 3D-модель в Repast Simphony, и она работает (довольно) хорошо.Однако из-за характера модели агенты имеют тенденцию образовывать плотные комки.Мне было интересно, есть ли способ создания 2D среза или поперечного сечения в середине группы, чтобы увидеть, что агенты делают внутри групп, путем создания постоянно обновляемого 2D-отображения или представления в конечном состоянии.

Я изучил параметры отображения в графическом интерфейсе и экспериментировал с различными слоями агентов, но из-за плотности ни один из них не работал.Был бы способ немного изменить этот аспект графического интерфейса, чтобы дать 2D-представление (например) плоскости yz при x = 25 в сетке 50x50x50.

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете изменить прозрачность фигур на 3D-дисплее, изменив атрибуты прозрачности в классе стилей на основе атрибута видимости агента.Например, ваши агенты могут проверять свою текущую позицию в трехмерном пространстве и возвращать isVisible () true только тогда, когда агент находится в плоскости пространства, которую вы хотите визуализировать.Это покажет только агенты на 3D-дисплее, которые существуют на заданной вами плоскости, которая может иметь любую ориентацию x, y, z в пространстве.В вашем классе стилей вам потребуется обновить прозрачность в методе 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).

...