计算一维存储中的二维数组边界

时间:2015-10-08 00:26:51

标签: arrays math edge

我有一个如下数组:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

它表示为一个字符流(abcdef...),我知道每个字符的位置(01234...)。我需要找到数组中边缘的位置,这样我就不会超出界限。考虑到有八个方向,我提出了以下内容:

//n is numerical position, ie. n = row+(col*width)
//for the above 5x5 array, width = 5, height = 5
if n - width - 1 < 0 it's top-left corner
if n - width < 0 it's top edge
if n - width + 1 < 0 it's top-right corner
if (n - 1) % width = 0 it's left edge
if (n + 1) % width = 0 it's right edge

但我不确定如何推断底边和底角。

我最好的猜测是:

if n + width - 1 < height*width it's bottom-left corner
if n + width < height*width it's bottom edge
if n + width + 1 < height*width it's bottom-right corner

2 个答案:

答案 0 :(得分:1)

底行将来自:

( height*width - width <"u"> ) [to] ( height*width - 1 <"y"> )

之间的所有项目都是底行,而height*width - width的边缘位于左下角,height*width - 1位于右下角。

答案 1 :(得分:1)

您可以使用n = x + y * widthx = n % widthy = n / width来推断角色的确切位置。现在只测试各自的边缘情况:

  • x == 0(左)
  • x == width - 1(右)
  • y == 0(上)
  • y == height - 1(下)