迭代未与数组轴对齐的子数组

时间:2017-08-11 08:11:25

标签: c++ arrays iterator iteration

我有一个2D图像,表示为线性数组,如果我知道行数和列数,我可以访问像素值。

所以,假设我有一个列主数组,我可以得到像素值:

// image is an unsigned char array
unsigned char getValue(int row, int col)
{
    // Skipping the checks
    return image[row * NumCols + col];
}

现在,我想迭代这个数组的子数组,只要我知道行和列偏移量,这也很简单。

unsigned char getValue(int row, int col, int offsetRow, int offsetCol)
{
     int index = (row + rowOffset) * NumCols + offsetCol + col;
     return image[index];
}

现在,我想迭代一个未与数组轴对齐的子数组,即将其视为原始数组中的旋转子数组。所以,我可以访问这个数组的4个角的位置。为这个旋转的数组创建迭代器的有效方法是什么?

我猜我需要计算四个边界的斜率,并根据我需要检查一个像素是否在这个边界内。我能想到的另一种方法是计算一个边界框掩码,它可以判断一个像素是否在子数组中,并迭代它。

我想知道是否有更有效的方式来做这样的事情,特别是使用一些STL魔术。

0 个答案:

没有答案