設定されたステップサイズでグリッド要素を反復処理できるようにしたいと思います。この問題の楽しい部分は、グリッドが回転することです。私はこれを行うためのアルゴリズムを開発しましたが、場合によっては成功します。次の画像は問題を示しています。
問題の条件は、グリッドの長さと幅の要素であるグリッド間隔が提供されることです(補足として、グリッドは長方形にすることができます)。アルゴリズムはグリッドを反復処理し、グリッドがどこにあるかを出力する必要があります。以下にいくつかのコードとその動作例を示します。
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
長方形の境界の外側まで繰り返します。これが発生している理由がわかります。余分な+dがあるため、forループのイテレータ条件には含まれていません。
私の質問は、この問題に取り組むためのより良い方法はありますか、そして私はそれをどのように解決しますか?
これが以前に実装されていて、ソースコードがあるかどうか誰かが知っていますか?
助けてくれてありがとう。
ベン