我希望使用网络路径计算两个代理之间的距离或代理的两个点之间的距离。我试过getDistance(Point source, Point target, ShortestPathData<N,P> data) -> getDistance(Point(vx,vy), Point(a.getX(),a.getY()), d);和double d = 0.0;,vx = a.getX()和vy = a.getY()。vx和常春藤是第二代理的坐标。代理来自同一类型,我们称之为第一类型。我在代理类型2的状态图中输入了代码。=>问题-描述:方法点(double,double)对于第二类没有定义。我该如何解决这个问题?或者还有别的功能我可以用吗?
发布于 2021-02-02 12:25:42
使用您试图使用的函数是可行的,但是该函数实际上是复杂的内部(无文档的) AnyLogic代码,涉及到代理如何“在幕后”移动(当被要求通过块或moveTo函数调用这样做时)。我不想保证在将来的版本中,这将保持不变(并且需要对Java有一个很好的理解)。
(地理信息系统空间中的代理有一个distanceByRoute函数,用于通过地理信息系统空间与另一个代理之间的距离,但在我所知道的网络中,没有对应的代理。但是,通常情况下,您不需要使用路径的距离,那么您需要它的确切原因是什么?即使在您这样做的地方,使用直线距离也很好,您可以通过代理中的getDistance函数,而不是网络中的getDistance函数来获得这种距离。)
也就是说,这可以按以下方式工作..。
您要调用的getDistance函数(Java )只存在于一个Network对象上(在该对象中,网络是连接网络中所有节点和路径的“父”)。此外,您还必须创建(实例化) Point对象(没有Point函数),并为网络获取ShortestPathData和从/到所讨论的点。(这个最短路径数据表示两个点之间的计算路径,然后您可以得到该路径上任意一组点之间的距离。)
因此,您将有如下代码,其中agent1和agent2是对两个代理的引用,network是节点/路径网络(假设此代码位于包含该网络的代理中):
Point p1 = new Point(agent1.getX(), agent1.getY());
Point p2 = new Point(agent2.getX(), agent2.getY());
ShortestPathData<Node, Path> pathData = network.getPathData(p1, p2, null);
double distance = network.getDistance(p1, p2, pathData);(由于距离以像素为单位返回,您可能希望使用包含网络的代理的当前比例尺,通过类似于scale.toLengthUnits(distance, METER)的方法将其转换为适当的长度单位。)
https://stackoverflow.com/questions/65989627
复制相似问题