这个问题解决了我一半的问题 ,因为我的滑动窗口可以移动到表格之外,例如对于 3x3 窗口,窗口的两列可以在表格的左端,而一列将在右端。这些图像显示窗口向左移动
我需要这个滑动窗口的算法,上述问题中的滑动窗口不会移到表格之外。
这个问题解决了我一半的问题 ,因为我的滑动窗口可以移动到表格之外,例如对于 3x3 窗口,窗口的两列可以在表格的左端,而一列将在右端。这些图像显示窗口向左移动
我需要这个滑动窗口的算法,上述问题中的滑动窗口不会移到表格之外。
我会在您的 2D 对象周围创建一个适配器,它拦截请求的窗口位置,咨询底层 2D 对象,并返回一个适当构造的结果。这样,您可以使用任何底层实现(例如您链接到的那个)并获得所需的结果。
考虑以下伪代码:
View getView(int leftX, int topY) {
if (leftX >= 0 and
topY >= 0 and
leftX <= underlying.width() - viewWidth and
topX <= underlying.height() - viewHeight)
{
return underlying.getView(leftX, topY);
}
// else make your own view and populate it
View view = new View()
for (int i = 0; i < viewWidth; ++i)
for (int j = 0; j < viewHeight; ++j)
view.set(i, j) = underlying.get((leftX + i) % underlying.width(), (topY + j) % underlying.height())
}
如果您最终使用此代码,请确保负索引模数得出正结果。如果没有,请使用viewWidth - negative_modulo
获取正确的索引。
您可以使用模运算 ( %
) 来限制索引。
Size arraySize = new Size(20, 15);
Size windowSize = new Size(3, 3);
double[,] array = new double[arraySize.Width, arraySize.Height];
// Set the location of the window
Point windowLocation = new Point(18, 14);
for (int x = 0; x < windowSize.Width; x++) {
for (int y = 0; y < windowSize.Height; y++) {
DoSomethingWith(array[(windowLocation.X + x) % arraySize.Width,
(windowLocation.Y + y) % arraySize.Height]);
}
}