Как заставить 2D или 3D огонь появиться на выходе по вероятности - PullRequest
0 голосов
/ 10 июня 2019

В настоящее время я работаю над проектом пожарной эвакуации и хотел бы, чтобы огонь появлялся на выходе в 2D и 3D, когда я запускаю симуляцию, используя вероятность.

Я заметил, что в anylogic 3D объектах есть трехмерный огненный объект, но я не уверен в коде или методе использования его для моей имитационной модели.Моя текущая модель имеет случайную вероятность помешать выезду (3 разных выхода), когда я запускаю симуляцию, это означает, что пешеходы узнают, что этот выезд недоступен, и найдут альтернативный маршрут, ближайший к ним, беспрепятственный.

Это код вероятности препятствия для выхода при действиях основного агента на

if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine1);
}
if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine2);
}
if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine3);
}

Это макет моего проекта, где targetLine - выходы: enter image description here

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Добавьте 3 экземпляра трехмерного огненного объекта, переместите их в местоположение ваших целевых линий. Назовите их fire1, fire2 и fire3, в соответствии с именами targetLines.

В коде OnStartup на главной странице используйте следующий код, чтобы сделать их невидимыми при запуске модели:

fire1.setVisible(false);
fire2.setVisible(false);
fire3.setVisible(false);

Примечание. Нельзя просто снять флажок «Видимый» в свойствах огня. Хотя это сделает его невидимым, но позже вы не сможете снова сделать его видимым для кода. Поэтому используйте код, чтобы сделать его невидимым при запуске модели.

Чтобы «связать» видимость пожаров и препятствие на выходе, просто расширьте существующий код:

if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine1);
}
else{
    fire1.setVisible(true);
}

if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine2);
}
else{
    fire2.setVisible(true);
}

if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine3);
}
else{
    fire3.setVisible(true);
}

Примечание: 3D-объект fire из AnyLogic не является «действительно» 3D. На самом деле он расширяется только в 2-х измерениях, что означает, что в 2D-виде вы его не видите, а в 3D-режиме только как «плоская» поверхность.

Чтобы избежать этого, возможно, просто используйте обычную форму прямоугольника, добавьте к нему размер z (теперь это трехмерный объем) и присвойте ему красный полупрозрачный цвет. Это, вероятно, выглядит не очень реалистично, но, по крайней мере, это видно со всех сторон.

1 голос
/ 10 июня 2019

Есть несколько способов сделать это.Сейчас я могу думать о 3, но я уверен, что люди могут предложить больше:

Вы можете поместить трехмерный объект огня на выходе и использовать условие для свойства visible объекта ( проверьте этот учебник из AnyLogic)

Вы можете поместить огненный объект на своем выходе, сделать его невидимым и использовать fire.setVisible(true);, чтобы сделать огненный объект видимым случайным образом.

У вас может быть группа пожарных агентов.и при необходимости переместите их в точки выхода.

...