Анимировать сетку слоев радиально от точки

Итак, я пытаюсь найти алгоритм для анимации сетки радиально от выбранной ячейки.

Например, предположим, что у меня есть следующая сетка, и ячейка с буквой «о» выбрана для начала:

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)


person Matt Sich    schedule 20.06.2013    source источник


Ответы (2)


Следующий python-подобный псевдокод выполнит это, хотя он будет переключать некоторые ячейки несколько раз. Итак, пусть switch будет только от x до o, не влияя на ячейки, которые уже находятся в состоянии 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)
person MvG    schedule 20.06.2013

Вы можете просто запустить сетку (эта часть кода может быть оптимизирована) и изменить x на y, если она имеет смежные o. Затем запустите снова и измените все y на o.

Другим решением будет сохранение начального местоположения o (x0, y0) и изменение всех x на o, если abs(x - x0) + abs(y - y0) = i на iй итерации.

person Chechulin    schedule 20.06.2013