private List<Node> getAdjacent(Node n, Node[][][] matrix) { List<Node> adj = new List<Node> (); int time = 0; var epsilon = new RealExtensions.Epsilon(1E-30); if (speed >= 1.0) time = (int) Math.Floor(speed); if (n.accSpeed.LE(1.0, epsilon)) time++; if (n.t + time >= matrix.Length) return adj; for (int xx = n.x - 3; xx <= n.x +3; xx++) { for (int yy = n.y - 3; yy <= n.y +3; yy++) { if (xx <= n.x + 3 && xx >= 0 && xx < matrix.Length && yy <= n.y + 3 && yy >= 0 && yy < matrix [0].Length) { Node c = matrix [n.t + time] [xx] [yy]; //if (!((Cell)c.cell).blocked) { if (c.cell.safe || !(c.cell.seen || c.cell.blocked)) { adj.Add (c); } } } } //adj.Remove (n); return adj; }
private void acc(Node n) { var epsilon = new RealExtensions.Epsilon(1E-30); if (speed >= 1.0) { n.accSpeed = speed - Math.Abs(speed) + n.parent.accSpeed; if (n.parent.accSpeed.LE(1.0, epsilon)) n.accSpeed -= 1.0; } else { n.accSpeed = n.parent.accSpeed + speed; if (n.parent.accSpeed.LE(1.0, epsilon)) n.accSpeed -= 1.0; } }