众所周知,如果一个人想要布局实数的方形网格(又名矩阵),他可以使用array
行优先顺序。让我们画一些元素 i 的邻域:
...................................
...|i-width-1|i-width|i-width+1|...
...| i-1 | i | i+1 |...
...|i+width-1|i+width|i+width+1|...
...................................
为简单起见,我们假设 i 在方形网格的中间某处,因此没有边界问题。(我们可以%(width*height)
在边界网格上添加和连接)。因此,如果想对第 i 个元素附近的每个元素做某事,则应该这样做:
//function which does something with element at idx
void DoSomethinWithElement(size_t idx);
//left neighbour
DoSomethinWithElement(i-1);
//right neighbour
DoSomethinWithElement(i+1);
//top neighbour
DoSomethinWithElement(i-width);
//bottom neighbour
DoSomethinWithElement(i+width);
我想将此算法推广到任何类型的正多边形网格(即三角形、正方形、五边形、六边形等)。常规意味着它仅由一种类型的多边形(即仅由三角形)构成。
如何概括任何类型的多边形网格: 1. 阵列中其他网格的布局?2. 循环中的这些 N(for square mesh 4) 语句?
问题“如何在多边形网格中找到瓷砖的所有邻居?” 使用图表快速解决。但我想使用数组,这样我就可以用 CUDA 将它们复制到显卡上。
网格示例: