I'm sure there's a clean way to do this, but I'm probably not using the right keywords for find it.
So let's say I have a grid. Starting from a position on the grid, return all of the grid coordinates that fall within a given distance. So I call something like:
getCoordinates( currentPosition, distance )
And for each coordinate, starting from the initial position, add all cardinal directions, and then add the spaces around those and so forth until the distance is reached. I imagine that on a grid this would look like a diamond. The function would return that array of coordinates. Can someone point me to a routine that will do this efficiently ( I'm working in AS3, for what it's worth )?
In the desired output, iteration 1 would be:
.x.
xxx
.x.
Iteration 2 would be:
..x..
.xxx.
xxxxx
.xxx.
..x..
Iteration 3:
...x...
..xxx..
.xxxxx.
xxxxxxx
.xxxxx.
..xxx..
...x...
and so on...
Edit: Updated the algorithm to reflect what the OP wanted.
Iteration 1:
.x.
xxx
.x.
Iteration 2:
..x..
.xxx.
xxxxx
.xxx.
..x..
... Iteration 4:
....x....
...xxx...
..xxxxx..
.xxxxxxx.
xxxxxxxxx
.xxxxxxx.
..xxxxx..
...xxx...
....x....
Clearly, you can determine the coordinates without iterating.
If the starting point is (X, Y), and the iteration is n
for(int i = x - n; i <= x + n; i++)
{
for(int j = y - n; j <= y + n; j++)
{
int dx = abs(i - x);
int dy = abs(j - y);
if(dx + dy <= n) //Produces a diamond, n+1 would produce a diamond with cut corners
{
//The point at (i, j) is within the marked area.
}
}
}