one模拟器中carmovement的代码分析
程序员文章站
2024-02-11 14:06:07
...
/**
* CarMovement类表示car移动子模型 , carmovement继承了MapBasedMovement这个父类,在接口SwitchableMovement, TransportMovement 中对方法进行声明,在类MapBasedMovement(MapBasedMovement )中对该方法进行实现。
*/
package movement;
import java.util.List;
import movement.map.DijkstraPathFinder;
import movement.map.MapNode;
import core.Coord;
import core.Settings;
public class CarMovement extends MapBasedMovement implements
SwitchableMovement, TransportMovement {
private Coord from;//初始起点
private Coord to;//初始终点
private DijkstraPathFinder pathFinder;//寻找路径的方式
/**
* 汽车运动的构造函数
*/
public CarMovement(Settings settings) {
super(settings); //由配置文件创建对象。
pathFinder = new DijkstraPathFinder(getOkMapNodeTypes());
}
/**
* 从原型构造一个新的CarMovement实例
* @param proto
*/
public CarMovement(CarMovement proto) {
super(proto);
this.pathFinder = proto.pathFinder;
}
/**
* Sets the next route to be taken
* 设置下一个使用的路径,将nodeLocation赋值给from,nodeDestination赋值给to
* @param nodeLocation
* @param nodeDestination
*/
public void setNextRoute(Coord nodeLocation, Coord nodeDestination) {
from = nodeLocation.clone();
to = nodeDestination.clone();
}
/**
* 从from和to变量中获取其在地图上的节点对象MapNode,由pathFinder工具寻找出一条from到to的最短路径,将路径上的节点存入List<MapNode> nodePath,用这个表创建出一条路径。
*/
@Override
public Path getPath() {
Path path = new Path(generateSpeed());
MapNode fromNode = getMap().getNodeByCoord(from);
MapNode toNode = getMap().getNodeByCoord(to);
List<MapNode> nodePath = pathFinder.getShortestPath(fromNode, toNode);
for (MapNode node : nodePath) { // create a Path from the shortest path
path.addWaypoint(node.getLocation());
}
lastMapNode = toNode;
return path;
}
/**
* @see SwitchableMovement
* @return true
*/
public boolean isReady() {
return true;
}
}
上一篇: 网络扫描实验报告
下一篇: 大连理工大学网络综合实验常用命令总结