【问题标题】:Distance from point to point in a network, anylogic网络中点到点的距离,任意逻辑
【发布时间】:2021-05-05 10:45:06
【问题描述】:

我想使用网络路径计算两个代理之间或代理的两点之间的距离。 我用double d = 0.0;vx = a.getX() vy = a.getY() 尝试了getDistance(Point source, Point target, ShortestPathData<N,P> data) -> getDistance(Point(vx,vy), Point(a.getX(),a.getY()), d);。 vx 和 vy 是第二个代理的坐标。代理人来自同一类型,我们称其为第一类型。我在代理类型二的状态图中输入了代码。 => 问题描述:方法 Point (double, double) 未定义类型二。 我该如何解决这个问题?或者我可以使用其他功能吗?

【问题讨论】:

    标签: networking distance point anylogic agent


    【解决方案1】:

    使用您尝试使用的功能可以做到这一点,但该功能实际上是复杂的内部(未记录)AnyLogic 代码,涉及代理如何“在幕后”跨网络移动(当通过块或 @987654321 要求这样做时) @函数调用)。我不想保证这在未来的版本中会保持不变(并且需要对 Java 有很好的理解)。

    (GIS 空间中的代理有一个distanceByRoute 函数来获取通过 G​​IS 空间到另一个代理的距离,但我知道网络中的代理没有等价物。但通常情况下,您不需要使用路径距离,那么你需要它的确切原因是什么?即使你在哪里,通常只使用直线距离就足够了,你可以通过代理中的getDistance函数获得,而不是网络的 getDistance 函数。)

    也就是说,这可以如下工作......

    您尝试调用的getDistance 函数(Java 方法)仅存在于Network 对象上(其中网络是连接网络中所有节点和路径的“父级”)。另外,您必须创建(实例化)Point 对象(没有Point 函数)获取网络的ShortestPathData 和有问题的起点/终点。 (此最短路径数据表示计算出的两点之间的路线,然后您可以得到该路线上任何一组点之间的距离。)

    所以你会有类似下面的代码,其中agent1agent2 是对你的两个代理的引用,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 将其转换为适当的长度单位,例如 scale.toLengthUnits(distance, METER)。)

    【讨论】:

    • 我注意到您可以跳过 ShortestPathData 计算。以下代码对我来说很好用: Point p1 = new Point(agent1.getX(), agent1.getY());点 p2 = new Point(agent2.getX(), agent2.getY());双距离 = network.getDistance(p1, p2, null);
    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多