本文整理汇总了C#中Coordinates.Inside方法的典型用法代码示例。如果您正苦于以下问题:C# Coordinates.Inside方法的具体用法?C# Coordinates.Inside怎么用?C# Coordinates.Inside使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Coordinates
的用法示例。
在下文中一共展示了Coordinates.Inside方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ProcessTest
public IEnumerable<ICell> ProcessTest(
[PexAssumeUnderTest]global::PathfindingAlgorithms.Algorithms.Astar.Astar target,
ICell[,] cells,
Coordinates from,
Coordinates to
)
{
PexAssume.IsNotNull(cells);
PexAssume.IsTrue(cells.GetLength(0)* cells.GetLength(1) > 0);
PexAssume.IsTrue(from.Inside(new Coordinates(cells.GetLength(0) - 1, cells.GetLength(1) - 1)));
PexAssume.IsTrue(to.Inside(new Coordinates(cells.GetLength(0) - 1, cells.GetLength(1) - 1)));
PexAssume.IsTrue(cells.GetLowerBound(0) == 0);
PexAssume.IsTrue(cells.GetLowerBound(1) == 0);
bool f = true;
for (int x = cells.GetLowerBound(0); x <= cells.GetUpperBound(0); x++)
{
for (int y = cells.GetLowerBound(1); y <= cells.GetUpperBound(1); y++)
{
PexAssume.IsNotNull(cells[x, y]);
PexAssume.IsNotNull(cells[x, y].Coordinates);
f &= cells[x, y].Coordinates.Equals(new Coordinates(x, y));
}
}
PexAssume.IsTrue(f);
IEnumerable<ICell> result = target.Process(cells, from, to);
return result;
// TODO: добавление проверочных утверждений в метод AstarTest.ProcessTest(Astar, ICell[,], Coordinates, Coordinates)
}
示例2: Process
public IEnumerable<ICell> Process(ICell[,] cells, Coordinates from, Coordinates to)
{
try
{
Contract.Requires(cells != null);
Contract.Requires(from.Inside(new Coordinates(cells.GetLength(0), cells.GetLength(1))));
Contract.Requires(to.Inside(new Coordinates(cells.GetLength(0), cells.GetLength(1))));
InitData(cells, from, to);
plannedNodes.Add(startCoord);
while (plannedNodes.Count > 0)
{
//находим в запланированных вершину с наименьшей эвристической стоимостью
var cur = TakeMinimalHeuristic();
//если найденная - пункт назначения, то заканчиваем поиск и начинаем сборку пути
if (cur == goalCoord)
break;
CellData curData = data[cur];
curData.processed = true;
//рассматриваем все с ней смежные, необработанные ранее
var adjList = adjacement.Adjacement(grid, cur);
foreach (Coordinates adj in adjList.Where(c => !data[c].processed))
{
//определяем стоимость смежной вершины на основе уже пройденного пути
double score = curData.scoreCalc + Score(grid.At(adj));
//если вершина не была посещена, или в неё можно прийти более коротким путём - обновляем информацию
bool notFound = !plannedNodes.Contains(adj);
CellData adjData = data[adj];
if (notFound || score < adjData.scoreCalc)
{
adjData.cameFrom = cur;
adjData.scoreCalc = score;
adjData.scoreHeur = score + Heuristic(grid.At(adj));
//если вершина ещё не была посещена - запланируем посещение
if (notFound)
plannedNodes.Add(adj);
}
}
}
return AssemblePath();
}
catch (KeyNotFoundException)
{
throw new IndexOutOfRangeException();
}
}
示例3: Process
public IEnumerable<ICell> Process(ICell[,] cellMap, Coordinates start, Coordinates end)
{
Contract.Requires(cellMap != null);
Contract.Requires(start.Inside(new Coordinates(cellMap.GetLength(0), cellMap.GetLength(1))));
Contract.Requires(end.Inside(new Coordinates(cellMap.GetLength(0), cellMap.GetLength(1))));
DNode[,] dist = new DNode[cellMap.GetLength(0), cellMap.GetLength(1)];
int count = cellMap.GetLength(0) * cellMap.GetLength(1);
for (int i = 0; i < cellMap.GetLength(0); ++i)
for (int j = 0; j < cellMap.GetLength(1); ++j)
dist[i, j] = new DNode();
dist[start.X, start.Y].val = 0;
Coordinates? min = null;
do
{
min = FindMin(dist);
if (min.HasValue)
{
CheckForeign(cellMap, dist, min.Value);
dist[min.Value.X, min.Value.Y].visited = true;
}
} while (min.HasValue);
int waylen = 0;
DNode dnode = dist[end.X, end.Y];
while (dnode.prev.HasValue)
{
++waylen;
dnode = dist[dnode.prev.Value.X, dnode.prev.Value.Y];
}
if (waylen > 0)
{
ICell[] res = new ICell[waylen + 1];
res[waylen] = cellMap[end.X, end.Y];
int i = waylen - 1;
dnode = dist[end.X, end.Y];
while (dnode.prev.HasValue)
{
res[i--] = cellMap[dnode.prev.Value.X, dnode.prev.Value.Y];
dnode = dist[dnode.prev.Value.X, dnode.prev.Value.Y];
}
return res;
}
else
{
return new LinkedList<ICell>();
}
}