我希望能够以设定的步长遍历网格元素。这个问题的有趣之处在于网格将被旋转。我开发了一种算法来做到这一点,并且在某些情况下它是成功的。下图说明了问题:
问题的条件是,将提供一个网格间距,它是网格长度和宽度的一个因素(作为旁注,网格可以是矩形的)。算法必须遍历网格并打印出它的位置。这是一些代码及其工作示例:
int main() {
vector< vector<double> > bound;
vector<double> point;
point.push_back(0);
point.push_back(4);
bound.push_back(point);
point[0] = 6; point[1] = 10;
bound.push_back(point);
point[0] = 4; point[1] = 0;
bound.push_back(point);
point[0] = 10; point[1] = 6;
bound.push_back(point);
double d = 0.5;
double x, y;
int countx = 0, county = 0;
for (double i = bound[0][0]; i < bound[2][0]; i+=d) {
//std::cout << "I: " << i << std::endl;
for (double j = bound[0][1]; j < bound[1][1]; j+=d) {
//std::cout << "J: " << j << std::endl;
x = i+d+(double)county*d;
y = j-(double)countx*d;
++county;
std::cout << "i, j, x and y: " << i << "\t" << j << "\t" << x << "\t" << y << std::endl;
}
std::cout << "new Row--------------------\n";
++countx;
county = 0;
}
}
上面的代码可以正常工作并正确打印网格元素,即:
x and y: 4, 0.5
x and y: 4.5, 1
etc.
但是,当尝试带边界的矩形时:
[(0.5, 6), (3, 8.5), (5.5, 1), (8, 3.5)]
步长 (d) 为 1
它迭代到矩形边界之外。我可以看到为什么会发生这种情况,for 循环中的迭代器条件不会包含它,因为额外的 +d。
我的问题是,有没有更好的方法来解决这个问题,我将如何解决?
有谁知道这是否已经实现过并且有一些源代码?
为帮助喝彩。
本