Вот как я это делал однажды в прошлом.Единственная проблема заключается в том, что это может быть медленным, если вам нужно делать этот расчет тысячи раз в секунду.И это только в 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