从点开始径向地激活网格

时间:2013-06-20 06:47:29

标签: algorithm math grid cartesian-coordinates

所以我试图找到一种算法,用于从所选单元径向动画网格。

例如,假设我有以下网格,带有“o”的单元格是从中选择的网格:

x | x | x | x | x | 
x | x | x | x | x | 
x | x | x | o | x | 
x | x | x | x | x | 
x | x | x | x | x | 

这应该继续这样:

x | x | x | x | x | 
x | x | x | o | x | 
x | x | o | o | o | 
x | x | x | o | x | 
x | x | x | x | x |

x | x | x | o | x | 
x | x | o | o | o | 
x | o | o | o | o | 
x | x | o | o | o | 
x | x | x | o | x |

x | x | o | o | o | 
x | o | o | o | o | 
o | o | o | o | o | 
x | o | o | o | o | 
x | x | o | o | o |

等。所以我基本上需要循环,每次我这样做,我需要新的单元格的坐标需要切换到笛卡尔坐标(即x,y)

2 个答案:

答案 0 :(得分:1)

以下类似python的伪代码将实现此目的,尽管它会多次切换一些单元格。因此,switch只能从xo,而不会对已经处于状态o的单元格产生影响。

for i in 0 .. size: # iteration
  for j in 0 .. i: # both end points are inclusive
    switch(x - i + j, y + j)
    switch(x - i + j, y - j)
    switch(x + i - j, y + j)
    switch(x + i - j, y - j)

答案 1 :(得分:1)

您可以简单地在网格上运行(可以优化此部分代码),如果x具有相邻y,则将o更改为y。然后再次运行并将所有o更改为o

另一种解决方案是保存初始x位置(x0,y0),并在第o次迭代时abs(x - x0) + abs(y - y0) = i更改所有i至{{1}}。