1

我尝试使用RoadModel基于 .dot 文件的方法计算到交货地点的距离。但是,使用计算出的距离Point.distance(currPos, destPos)给出的结果似乎不合适。我将其与MoveProgress( RoadModel.moveTo(...)) 的距离进行了比较,发现点距离大约是 100 倍以上。

例如,当使用rinsim-example-4.1.1.jar带有以下Taxi类实现的 Taxi 示例时

class Taxi extends Vehicle implements SimulatorUser {

private RandomGenerator rng;

Taxi(Point startPosition, int capacity) {
    super(VehicleDTO.builder().capacity(capacity).startPosition(startPosition)
                    .speed(1000).build());
}

@Override
public void setSimulator(SimulatorAPI api) {
    rng = api.getRandomGenerator();
}

@Override
protected void tickImpl(TimeLapse time) {
    final RoadModel rm = getRoadModel();

    Point start = rm.getPosition(this);
    MoveProgress mp;

    if (rm.getDestination(this) == null) {
        mp = rm.moveTo(this, rm.getRandomPosition(rng), time);
    }

    if (rm.getPosition(this).equals(rm.getDestination(this)))
        mp = rm.moveTo(this, rm.getRandomPosition(rng), time);
    else
        mp = rm.moveTo(this, rm.getDestination(this), time);

    Point after = rm.getPosition(this);

    System.out.println("Travelled distance");
    System.out.println(mp.distance());
    System.out.println("Straight line distance");
    System.out.println(Point.distance(start, after));
}

那么行进距离约为 0.277,而计算出的直线距离约为 27.7。是否有原因导致 100 倍的差异或其他方式以相同的度量获得两点之间的距离MoveProgress

4

1 回答 1

0

Point.distance(..,..)由和获得的距离差异的原因MoveProgress是后者考虑了任何可用的ConnectionData而前者计算了两点之间的鸟类飞行距离(忽略任何与连接相关的信息)。

事实证明,在 中使用的图TaxiExample有许多连接长度被覆盖的连接。正如你所提到的,这个长度看起来好像相差了 100 倍,但必须更彻底地调查它,看看什么是正确的值。

目前,一种解决方法是简单地忽略所有ConnectionData. 使用以下代码解析图形:

final Graph<LengthData> originalGraph = 
  DotGraphIO.getLengthGraphIO().read(Paths.get("path/to/graph.dot"));

final Graph<LengthData> newGraph = new TableGraph<>();
for (final Connection<LengthData> conn : originalGraph.getConnections()) {
  newGraph.addConnection(conn.from(), conn.to());
}

这将构建一个新图,没有任何连接数据与任何连接相关联。

于 2016-08-16T09:32:47.270 回答