Anylogic - прямой видимости - PullRequest
0 голосов
/ 12 ноября 2018

Есть ли способ проверить, существует ли линия обзора между двумя агентами, предполагающими некоторые здания и разметку презентации? (Имеется в виду функция, которая проверяет, могут ли два агента видеть друг друга, предполагая здания и стены)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вот как я это делал однажды в прошлом.Единственная проблема заключается в том, что это может быть медленным, если вам нужно делать этот расчет тысячи раз в секунду.И это только в 2D.Если вам нужно 3D, идея не так уж отличается.

1) добавьте все ваши строительные узлы и все, что может быть препятствием между двумя агентами в коллекцию.Возможно, вы захотите поместить прямоугольный узел вокруг ваших зданий, чтобы хранить все в одной коллекции (при условии, что вы используете разметку пространства с узлами)

2) сгенерировать дельту расстояния дельта (например, равную 1) и найтиугол линии, проходящей через обоих агентов.

3) Сделайте петлю от положения agent1 до положения agent2.Это будет что-то вроде этого:

L=delta;
while(L<LThatReachesSecondAgent){
    x1 = agent1.getX() + L*cos(angle);
    y1 = agent1.getY() + L*sin(angle);
    for(Node n : yourCollectionOfNodes){
         If(n.contains(x1,y1))
             return false
    }
/*This can also work maybe faster
//int numNodesInTheWay=count(yourCollectionOfNodes,n->n.contains(x1,y1));
//if(numNodesInTheWay>0) return false
*/
    L+=delta;
}
return true
0 голосов
/ 12 ноября 2018

добро пожаловать в SOF.

Нет, встроенной функции нет, афаик.Вам нужно будет что-то кодировать вручную, что возможно, но не прямо.Если вам нужна помощь в этом, вам нужно предоставить более подробную информацию об особенностях.

...