2009-02-05 104 views
1

我依稀记得阅读有关在屏幕上绘制对象的编程练习。如果一个物体的邻居少于2个,那么它就会因为寂寞而死亡,如果它有3个以上的邻居,因为它拥挤。如果邻居的数量是2或3,那么它会产生孩子。总的想法是看看有多少代可以持续。确定对象邻居的算法

无论如何,有人记得这个练习的名字以及算法的名字吗?

+0

这是游戏人生 – 2012-09-28 16:51:11

回答

2

这是生命的游戏。我不相信这个算法有一个特定的名称(除非它是Life的算法,听起来像是你从那些深夜的资讯片中购买的东西)。

+0

+1让我笑了,“除非它是生活中的算法,听起来像是你从那些深夜轻快的电视购物节目中购买的东西” – 2012-12-13 22:22:06

1

它被称为生命游戏,你可以找到更多关于它的信息here。但是,我不知道算法的名称。

2

更一般地,这些被称为细胞自动机。有很多有趣的元胞自动机,包括可以使旋转的分形风格几何图形和其他看似非常聪明的元素。他们也被用来模拟真实生活过程,相当准确,请参阅:http://en.wikipedia.org/wiki/Cellular_automaton

2

确定Conways的邻居游戏的生活是微不足道的。整个元胞自动机只是一个很大的二维数组,所以你可以通过递增/递减坐标查找相邻的项目。细节取决于实现语言,但你可能会拥有类似下面的一些代码...

count := previous[x-1,y] + previous[x+1,y] + previous[x,y-1] + previous[x,y+1]; 
next [x,y] := 1 if ((count >= MIN) and (count <= MAX)) else 0; 

一个问题我已经掩盖了为边界检查 - 确保只有在范围内的坐标被使用。元胞自动机通常是为速度而构建的,因此您可能不会在内部循环中添加检查 - 您需要使用特殊的代码来完成拐角和循环边缘。

这不是我所谓的寻找对象邻居的算法。最近邻居问题的一种方法是根据Voronoi diagram构建索引。