如何限制DTN节点仅在曼哈顿地图指定区域移动?
问题:限制DTN节点在曼哈顿地图指定区域移动
我正尝试将10个名为v1至v10的代理(DTN节点)限制在曼哈顿地图的1/4区域内移动。现有MapBasedMovement方法支持全图移动,需要修改为仅允许在指定坐标范围内移动。
已尝试选取(0, 0)至(700, 700)的坐标范围,筛选该范围内的所有MapNode,让DTNNode仅选择这些节点,但未得到正确结果。
相关代码
public Path getPath() { Path p = new Path(generateSpeed()); MapNode curNode = lastMapNode; MapNode prevNode = lastMapNode; MapNode nextNode = null; List<MapNode> neighbors; Coord nextCoord; assert lastMapNode != null: "Tried to get a path before placement"; // start paths from current node p.addWaypoint(curNode.getLocation()); int pathLength = rng.nextInt(maxPathLength-minPathLength) + minPathLength; for (int i=0; i<pathLength; i++) { // neighbors = curNode.getNeighbors(); neighbors = host.possibleNodes; Vector<MapNode> n2 = new Vector<MapNode>(neighbors); if (!this.backAllowed) { n2.remove(prevNode); // to prevent going back } if (okMapNodeTypes != null) { //remove neighbor nodes that aren't ok for (int j=0; j < n2.size(); ){ if (!n2.get(j).isType(okMapNodeTypes)) { n2.remove(j); } else { j++; } } } if (n2.size() == 0) { // only option is to go back nextNode = prevNode; } else { // choose a random node from remaining neighbors //nextNode = n2.get(rng.nextInt(n2.size())); nextNode = host.possibleNodes.get(rng.nextInt(host.possibleNodes.size())); System.out.println(lastMapNode); List<MapNode> nodePath = pathFinder.getShortestPath(lastMapNode, nextNode); for (MapNode node : nodePath) { // create a Path from the shortest path p.addWaypoint(node.getLocation()); } lastMapNode = nextNode; prevNode = curNode; nextCoord = nextNode.getLocation(); curNode = nextNode; return p; } prevNode = curNode; nextCoord = nextNode.getLocation(); curNode = nextNode; p.addWaypoint(nextCoord); } lastMapNode = curNode; return p; }
注:代码中host.possibleNodes是我自定义的方法,用于筛选指定区域内的MapNode,若需要可提供该方法代码。
内容的提问来源于stack exchange,提问作者Abhay Goyal
相关产品推荐
相关产品推荐

