package { import flash.display.Sprite; public class GridTest extends Sprite { private var _endNode:Node; private var _startNode:Node; private var _straightCost:Number=1.0; private var _diagCost:Number = 1.4; public function GridTest() { var g:Grid=new Grid(5, 5); g.setStartNode(0, 3); g.setEndNode(4, 1); _endNode = g.endNode; _startNode = g.startNode; var c1:Number = manhattan(_startNode);//8 var c2:Number = euclidian(_startNode);//4.47213595499958 var c3:Number = diagonal(_startNode);//4.8 trace(c1,c2,c3); } //曼哈顿估价法 private function manhattan(node:Node):Number { return Math.abs(node.x - _endNode.x) * _straightCost + Math.abs(node.y - _endNode.y) * _straightCost; } //几何估价法 private function euclidian(node:Node):Number { var dx:Number=node.x - _endNode.x; var dy:Number=node.y - _endNode.y; return Math.sqrt(dx * dx + dy * dy) * _straightCost; } //对角线估价法 private function diagonal(node:Node):Number { var dx:Number=Math.abs(node.x - _endNode.x); var dy:Number=Math.abs(node.y - _endNode.y); var diag:Number=Math.min(dx, dy); var straight:Number=dx + dy; return _diagCost * diag + _straightCost * (straight - 2 * diag); } } }