Table of Contents

Class Algorithms

Namespace
Gamelogic.Grids
Assembly
Assembly-CSharp.dll

This class provide generic functions for common grid operations, such as finding a shortest path or connected shapes.

[Version(1, 0, 0)]
public static class Algorithms
Inheritance
Algorithms
Inherited Members

Methods

AStar2<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint, Func<TPoint, TPoint, float>, Func<TPoint, bool>, Func<TPoint, TPoint, float>)

public static IEnumerable<TPoint> AStar2<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, TPoint goal, Func<TPoint, TPoint, float> heuristicCostEstimate, Func<TPoint, bool> isAccessible, Func<TPoint, TPoint, float> neighborToNeighborCost) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
start TPoint
goal TPoint
heuristicCostEstimate Func<TPoint, TPoint, float>
isAccessible Func<TPoint, bool>
neighborToNeighborCost Func<TPoint, TPoint, float>

Returns

IEnumerable<TPoint>

Type Parameters

TCell
TPoint

AStar<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint)

Find the shortest path between a start and goal node.

The distance between nodes(as defined by TPoint.DistanceFrom) are used as the heuristic and actual cost between nodes.In some cases the result may be unintuitive, and an overload specifying a different cost should be used.

See AStar<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint, Func<TPoint, TPoint, float>, Func<TCell, bool>, Func<TPoint, TPoint, float>)

public static IEnumerable<TPoint> AStar<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, TPoint goal) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
start TPoint
goal TPoint

Returns

IEnumerable<TPoint>

The list of nodes on the path in order.If no path is possible, null is returned.

Type Parameters

TCell
TPoint

AStar<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint, Func<TPoint, TPoint, float>, Func<TCell, bool>)

Find the shortest path between a start and goal node.

The distance between nodes(as defined by TPoint.DistanceFrom) are used as the actual cost between nodes.In some cases the result may be unintuitive, and an overload specifying a different cost should be used.

Using an overload with an appropriate distance function can solve the issue.

See AStar<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint, Func<TPoint, TPoint, float>, Func<TCell, bool>, Func<TPoint, TPoint, float>)

[Obsolete("Use the overload instead that allows you to specify the cost in addition to the cost heuristic")]
public static IEnumerable<TPoint> AStar<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, TPoint goal, Func<TPoint, TPoint, float> heuristicCostEstimate, Func<TCell, bool> isAccessible) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
start TPoint
goal TPoint
heuristicCostEstimate Func<TPoint, TPoint, float>
isAccessible Func<TCell, bool>

Returns

IEnumerable<TPoint>

Type Parameters

TCell
TPoint

AStar<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint, Func<TPoint, TPoint, float>, Func<TCell, bool>, Func<TPoint, TPoint, float>)

public static IEnumerable<TPoint> AStar<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, TPoint goal, Func<TPoint, TPoint, float> heuristicCostEstimate, Func<TCell, bool> isAccessible, Func<TPoint, TPoint, float> neighborToNeighborCost) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
start TPoint
goal TPoint
heuristicCostEstimate Func<TPoint, TPoint, float>
isAccessible Func<TCell, bool>
neighborToNeighborCost Func<TPoint, TPoint, float>

Returns

IEnumerable<TPoint>

Type Parameters

TCell
TPoint

AggregateNeighborhood<TCell, TPoint>(IGrid<TCell, TPoint>, Func<TPoint, IEnumerable<TPoint>, TCell>)

public static void AggregateNeighborhood<TCell, TPoint>(IGrid<TCell, TPoint> grid, Func<TPoint, IEnumerable<TPoint>, TCell> aggregator) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
aggregator Func<TPoint, IEnumerable<TPoint>, TCell>

Type Parameters

TCell
TPoint

AggregateNeighborhood<TCell, TPoint, TResultGrid, TResultCell>(IGrid<TCell, TPoint>, Func<TPoint, IEnumerable<TPoint>, TResultCell>)

public static TResultGrid AggregateNeighborhood<TCell, TPoint, TResultGrid, TResultCell>(IGrid<TCell, TPoint> grid, Func<TPoint, IEnumerable<TPoint>, TResultCell> aggregator) where TPoint : IGridPoint<TPoint> where TResultGrid : IGrid<TResultCell, TPoint>

Parameters

grid IGrid<TCell, TPoint>
aggregator Func<TPoint, IEnumerable<TPoint>, TResultCell>

Returns

TResultGrid

Type Parameters

TCell
TPoint
TResultGrid
TResultCell

Contains<TPoint>(IEnumerable<TPoint>, IEnumerable<TPoint>)

public static bool Contains<TPoint>(IEnumerable<TPoint> bigShape, IEnumerable<TPoint> smallShape) where TPoint : IGridPoint<TPoint>

Parameters

bigShape IEnumerable<TPoint>
smallShape IEnumerable<TPoint>

Returns

bool

Type Parameters

TPoint

GetBiggestShape<TPoint>(IEnumerable<IEnumerable<TPoint>>)

Gets the biggest shape (by number of points) in the given list.

public static IEnumerable<TPoint> GetBiggestShape<TPoint>(IEnumerable<IEnumerable<TPoint>> shapes) where TPoint : IGridPoint<TPoint>

Parameters

shapes IEnumerable<IEnumerable<TPoint>>

Each shape is represented as a list of points.

Returns

IEnumerable<TPoint>

Type Parameters

TPoint

The type of point of the shapes.

GetConnectedLines<TCell, TPoint, TBasePoint>(IEvenGrid<TCell, TPoint, TBasePoint>, TPoint, Func<TPoint, TPoint, bool>)

Gets the longest line of connected points that contains this point. GetConnectedRays<TCell, TPoint>(AbstractUniformGrid<TCell, TPoint>, TPoint, Func<TPoint, TPoint, bool>)

public static IEnumerable<IEnumerable<TPoint>> GetConnectedLines<TCell, TPoint, TBasePoint>(IEvenGrid<TCell, TPoint, TBasePoint> grid, TPoint point, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : ISplicedVectorPoint<TPoint, TBasePoint>, IGridPoint<TPoint> where TBasePoint : IVectorPoint<TBasePoint>, IGridPoint<TBasePoint>

Parameters

grid IEvenGrid<TCell, TPoint, TBasePoint>
point TPoint
isNeighborsConnected Func<TPoint, TPoint, bool>

Returns

IEnumerable<IEnumerable<TPoint>>

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

TBasePoint

The base type of the point.

GetConnectedRays<TCell, TPoint>(AbstractUniformGrid<TCell, TPoint>, TPoint, Func<TPoint, TPoint, bool>)

Returns a list containing lines connected to the given points. A line is a list of points. Only returns correct results for square or hex grids.

public static IEnumerable<IEnumerable<TPoint>> GetConnectedRays<TCell, TPoint>(AbstractUniformGrid<TCell, TPoint> grid, TPoint point, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : IVectorPoint<TPoint>, IGridPoint<TPoint>

Parameters

grid AbstractUniformGrid<TCell, TPoint>
point TPoint
isNeighborsConnected Func<TPoint, TPoint, bool>

A functions that returns true or false, depending on whether two points can be considered connected when they are neighbors.For example, if you want rays of points that refer to cells of the same color, you can pass in a functions that compares the DefaultColors of cells.

Returns

IEnumerable<IEnumerable<TPoint>>

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

Examples

private bool IsSameColour(point1, point2)
{
	return grid[point1].Color == grid[point2].Color;
}

private SomeMethod()
{
	...
	var rays = GetConnectedRays<ColourCell, PointyHexPoint, PointyHexNeighborIndex>(
		grid, point, IsSameColour);
	...
}

You can of course also use a lambda expression, like this:

//The following code returns all lines that radiate from the given point 
GetConnectedRays<ColourCell, PointyHexPoint, PointyHexNeighborIndex>(
	grid, point, (x, y) => grid[x].Color == grid[y].Color);

GetConnectedSet<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, Func<TPoint, TPoint, bool>)

public static HashSet<TPoint> GetConnectedSet<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint point, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
point TPoint
isNeighborsConnected Func<TPoint, TPoint, bool>

The function to use to check whether two neighbors are connected

Returns

HashSet<TPoint>

Returns a list of points connected to the given point.

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

GetLongestConnectedLine<TCell, TPoint, TBasePoint>(IEvenGrid<TCell, TPoint, TBasePoint>, TPoint, Func<TPoint, TPoint, bool>)

Get the longest line of points connected to the given point

public static IEnumerable<TPoint> GetLongestConnectedLine<TCell, TPoint, TBasePoint>(IEvenGrid<TCell, TPoint, TBasePoint> grid, TPoint point, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : ISplicedVectorPoint<TPoint, TBasePoint>, IGridPoint<TPoint> where TBasePoint : IVectorPoint<TBasePoint>, IGridPoint<TBasePoint>

Parameters

grid IEvenGrid<TCell, TPoint, TBasePoint>
point TPoint
isNeighborsConnected Func<TPoint, TPoint, bool>

Returns

IEnumerable<TPoint>

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

TBasePoint

The base type of the point.

GetLongestConnectedRay<TCell, TPoint>(AbstractUniformGrid<TCell, TPoint>, TPoint, Func<TPoint, TPoint, bool>)

public static IEnumerable<TPoint> GetLongestConnectedRay<TCell, TPoint>(AbstractUniformGrid<TCell, TPoint> grid, TPoint point, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : IVectorPoint<TPoint>, IGridPoint<TPoint>

Parameters

grid AbstractUniformGrid<TCell, TPoint>
point TPoint
isNeighborsConnected Func<TPoint, TPoint, bool>

Returns

IEnumerable<TPoint>

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

GetLongestConnected<TCell, TPoint, TBasePoint>(IEvenGrid<TCell, TPoint, TBasePoint>, TPoint, Func<TPoint, TPoint, bool>)

[Obsolete("Use GetLongestConnectedLine instead. Will be removed in a future version.")]
public static IEnumerable<TPoint> GetLongestConnected<TCell, TPoint, TBasePoint>(IEvenGrid<TCell, TPoint, TBasePoint> grid, TPoint point, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : ISplicedVectorPoint<TPoint, TBasePoint>, IGridPoint<TPoint> where TBasePoint : IVectorPoint<TBasePoint>, IGridPoint<TBasePoint>

Parameters

grid IEvenGrid<TCell, TPoint, TBasePoint>
point TPoint
isNeighborsConnected Func<TPoint, TPoint, bool>

Returns

IEnumerable<TPoint>

Type Parameters

TCell
TPoint
TBasePoint

GetPointsInRangeCost<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, Func<TCell, bool>, Func<TPoint, TPoint, int>, int)

public static Dictionary<TPoint, int> GetPointsInRangeCost<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, Func<TCell, bool> isAcessible, Func<TPoint, TPoint, int> getCellMoveCost, int moveRange) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
start TPoint
isAcessible Func<TCell, bool>
getCellMoveCost Func<TPoint, TPoint, int>
moveRange int

Returns

Dictionary<TPoint, int>

Type Parameters

TCell
TPoint

GetPointsInRangeCost<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, Func<TCell, bool>, Func<TPoint, TPoint, float>, float)

A generic function that returns the points in range based on a given start point, moveRange, and a function that returns the cost of moving between neighboring cells.

author Justin Kivak

[Version(1, 10, 0)]
public static Dictionary<TPoint, float> GetPointsInRangeCost<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, Func<TCell, bool> isAcessible, Func<TPoint, TPoint, float> getCellMoveCost, float moveRange) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>

The grid to use for the calculations

start TPoint

The starting point for the range calculation

isAcessible Func<TCell, bool>
getCellMoveCost Func<TPoint, TPoint, float>

A function that returns the move cost given a cell

moveRange float

The range from which to return cells

Returns

Dictionary<TPoint, float>

Type Parameters

TCell
TPoint

Examples

Example usage:

var costs = Algorithms.GetPointsInRangeCost(
	grid,
	start,
	tile1, tile2 => DistanceBetween(tile1, tile2),
	5f);

GetPointsInRange<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, Func<TCell, bool>, Func<TPoint, TPoint, int>, int)

public static IEnumerable<TPoint> GetPointsInRange<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, Func<TCell, bool> isAcessible, Func<TPoint, TPoint, int> getCellMoveCost, int moveRange) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>
start TPoint
isAcessible Func<TCell, bool>
getCellMoveCost Func<TPoint, TPoint, int>
moveRange int

Returns

IEnumerable<TPoint>

Type Parameters

TCell
TPoint

GetPointsInRange<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, Func<TCell, bool>, Func<TPoint, TPoint, float>, float)

A generic function that returns the points in range based on a given start point, moveRange, and a function that returns the cost of moving between neighboring cells.

author Justin Kivak

[Version(1, 10, 0)]
public static IEnumerable<TPoint> GetPointsInRange<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint start, Func<TCell, bool> isAcessible, Func<TPoint, TPoint, float> getCellMoveCost, float moveRange) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>

The grid to use for the calculations

start TPoint

The starting point for the range calculation

isAcessible Func<TCell, bool>

Whether the given cell can be reached

getCellMoveCost Func<TPoint, TPoint, float>

A function that returns the move cost given a cell

moveRange float

The range from which to return cells

Returns

IEnumerable<TPoint>

Type Parameters

TCell
TPoint

Examples

Example usage:

var tilesInRange = Algorithms.GetPointsInRange(
	grid,
	start,
	tile1, tile2 => DistanceBetween(tile1, tile2),
	5f);

IsConnected<TCell, TPoint>(IGrid<TCell, TPoint>, IEnumerable<TPoint>, Func<TPoint, TPoint, bool>)

The set is connected if the set of points are neighbor-connected, and isNeighborsConnected return true for each two neighbors in the set.Two points are connected if they are neighbors, or one point has a neighbor that is neighbor-connected with the other point.

public static bool IsConnected<TCell, TPoint>(IGrid<TCell, TPoint> grid, IEnumerable<TPoint> points, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>

The grid on which to do the check

points IEnumerable<TPoint>

The set of points to check. It is assumed all points are in the grid.

isNeighborsConnected Func<TPoint, TPoint, bool>

The function to use to check whether two neighbors are connected

Returns

bool

Returns true if the collection of points are connected.

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

Examples

checks whether the list of points are connected by color.

IsConnected(grid, points, (p, q) => grid[p].Color == grid[q].Color)

IsConnected<TCell, TPoint>(IGrid<TCell, TPoint>, TPoint, TPoint, Func<TPoint, TPoint, bool>)

The set is connected if the set of points are neighbor-connected, and isNeighborsConnected return true for each two neighbors in the set.Two points are connected if they are neighbors, or one point has

a neighbor that is neighbor-connected with the other point.

Another way to put this is, this function returns true if there is a set that connects point1 to point2.

public static bool IsConnected<TCell, TPoint>(IGrid<TCell, TPoint> grid, TPoint point1, TPoint point2, Func<TPoint, TPoint, bool> isNeighborsConnected) where TPoint : IGridPoint<TPoint>

Parameters

grid IGrid<TCell, TPoint>

The grid on which to do the check

point1 TPoint

The first point to check.

point2 TPoint

The second point to check.

isNeighborsConnected Func<TPoint, TPoint, bool>

The function to use to check whether two neighbors are connected.

Returns

bool

Returns true if the two points are in a connected set.

Type Parameters

TCell

The type of cell of the grid that this algorithm takes.

TPoint

The type of point of the grid that this algorithm takes.

Examples

checks whether the two points are connected by color.

IsConnected(grid, p1, p2, (p, q) => grid[p].Color == grid[q].Color)

IsEquivalentUnderTransformsAndTranslation<TPoint>(IEnumerable<TPoint>, IEnumerable<TPoint>, IEnumerable<Func<TPoint, TPoint>>, Func<IEnumerable<TPoint>, IEnumerable<TPoint>>)

public static bool IsEquivalentUnderTransformsAndTranslation<TPoint>(IEnumerable<TPoint> shape1, IEnumerable<TPoint> shape2, IEnumerable<Func<TPoint, TPoint>> pointTransformations, Func<IEnumerable<TPoint>, IEnumerable<TPoint>> toCanonicalPosition) where TPoint : IGridPoint<TPoint>

Parameters

shape1 IEnumerable<TPoint>
shape2 IEnumerable<TPoint>
pointTransformations IEnumerable<Func<TPoint, TPoint>>
toCanonicalPosition Func<IEnumerable<TPoint>, IEnumerable<TPoint>>

Returns

bool

Type Parameters

TPoint

IsEquivalentUnderTranslation<TPoint>(IEnumerable<TPoint>, IEnumerable<TPoint>, Func<IEnumerable<TPoint>, IEnumerable<TPoint>>)

public static bool IsEquivalentUnderTranslation<TPoint>(IEnumerable<TPoint> shape1, IEnumerable<TPoint> shape2, Func<IEnumerable<TPoint>, IEnumerable<TPoint>> toCanonicalPosition) where TPoint : IGridPoint<TPoint>

Parameters

shape1 IEnumerable<TPoint>
shape2 IEnumerable<TPoint>
toCanonicalPosition Func<IEnumerable<TPoint>, IEnumerable<TPoint>>

Returns

bool

Type Parameters

TPoint

IsEquivalent<TPoint>(IEnumerable<TPoint>, IEnumerable<TPoint>)

public static bool IsEquivalent<TPoint>(IEnumerable<TPoint> shape1, IEnumerable<TPoint> shape2) where TPoint : IGridPoint<TPoint>

Parameters

shape1 IEnumerable<TPoint>
shape2 IEnumerable<TPoint>

Returns

bool

Type Parameters

TPoint

Rotate120About(IEnumerable<FlatHexPoint>, FlatHexPoint, FlatHexPoint, FlatHexPoint)

Rotates a shape 120 degrees around the vertice shared by the three given points.

The three points must form a close triangle (they must share a vertex).

public static IEnumerable<FlatHexPoint> Rotate120About(IEnumerable<FlatHexPoint> shape, FlatHexPoint p1, FlatHexPoint p2, FlatHexPoint p3)

Parameters

shape IEnumerable<FlatHexPoint>
p1 FlatHexPoint
p2 FlatHexPoint
p3 FlatHexPoint

Returns

IEnumerable<FlatHexPoint>

Rotate120About(IEnumerable<PointyHexPoint>, PointyHexPoint, PointyHexPoint, PointyHexPoint)

Rotates a shape 120 degrees around the vertice shared by the three given points.

The three points must form a close triangle (they must share a vertex).

public static IEnumerable<PointyHexPoint> Rotate120About(IEnumerable<PointyHexPoint> shape, PointyHexPoint p1, PointyHexPoint p2, PointyHexPoint p3)

Parameters

shape IEnumerable<PointyHexPoint>
p1 PointyHexPoint
p2 PointyHexPoint
p3 PointyHexPoint

Returns

IEnumerable<PointyHexPoint>

Rotate180About(IEnumerable<FlatHexPoint>, FlatHexPoint, FlatHexPoint)

Rotates a shape 180 degrees around the edge shared by the two given points.

The two points must be neighbors.

public static IEnumerable<FlatHexPoint> Rotate180About(IEnumerable<FlatHexPoint> shape, FlatHexPoint p1, FlatHexPoint p2)

Parameters

shape IEnumerable<FlatHexPoint>
p1 FlatHexPoint
p2 FlatHexPoint

Returns

IEnumerable<FlatHexPoint>

Rotate180About(IEnumerable<PointyHexPoint>, PointyHexPoint, PointyHexPoint)

Rotates a shape 180 degrees around the edge shared by the two given points.

The two points must be neighbors.

public static IEnumerable<PointyHexPoint> Rotate180About(IEnumerable<PointyHexPoint> shape, PointyHexPoint p1, PointyHexPoint p2)

Parameters

shape IEnumerable<PointyHexPoint>
p1 PointyHexPoint
p2 PointyHexPoint

Returns

IEnumerable<PointyHexPoint>

Rotate240About(IEnumerable<FlatHexPoint>, FlatHexPoint, FlatHexPoint, FlatHexPoint)

Rotates a shape 240 degrees around the vertice shared by the three given points.

The three points must form a close triangle (they must share a vertex).

public static IEnumerable<FlatHexPoint> Rotate240About(IEnumerable<FlatHexPoint> shape, FlatHexPoint p1, FlatHexPoint p2, FlatHexPoint p3)

Parameters

shape IEnumerable<FlatHexPoint>
p1 FlatHexPoint
p2 FlatHexPoint
p3 FlatHexPoint

Returns

IEnumerable<FlatHexPoint>

Rotate240About(IEnumerable<PointyHexPoint>, PointyHexPoint, PointyHexPoint, PointyHexPoint)

Rotates a shape 240 degrees around the vertice shared by the three given points.

The three points must form a close triangle (they must share a vertex).

public static IEnumerable<PointyHexPoint> Rotate240About(IEnumerable<PointyHexPoint> shape, PointyHexPoint p1, PointyHexPoint p2, PointyHexPoint p3)

Parameters

shape IEnumerable<PointyHexPoint>
p1 PointyHexPoint
p2 PointyHexPoint
p3 PointyHexPoint

Returns

IEnumerable<PointyHexPoint>

TransformShape<TPoint>(IEnumerable<TPoint>, Func<TPoint, TPoint>)

Transform each point in the list with the give point transformation.

public static IEnumerable<TPoint> TransformShape<TPoint>(IEnumerable<TPoint> shape, Func<TPoint, TPoint> pointTransformation) where TPoint : IGridPoint<TPoint>

Parameters

shape IEnumerable<TPoint>
pointTransformation Func<TPoint, TPoint>

Returns

IEnumerable<TPoint>

Type Parameters

TPoint