グリッド要素をステップサイズで繰り返し処理したいと考えています。この問題の楽しい部分は、グリッドが回転することです。私はこれを行うためのアルゴリズムを開発しており、いくつかのケースでは成功しています。下の画像は、問題を特定する:回転したグリッドを反復する方法
問題の条件は、グリッド間隔が(サイドノートとしてグリッドは、矩形であってもよい)、グリッドの長さと幅の因子であるが提供されることです。アルゴリズムは、グリッドを反復して、それがどこにあるかを印刷する必要があります。ここではいくつかのコードと作業それの例は次のとおりです。
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;
}
}
作品と正しく印刷グリッド要素、すなわち上記のコード:
[(0.5, 6), (3, 8.5), (5.5, 1), (8, 3.5)]
:
x and y: 4, 0.5
x and y: 4.5, 1
etc.
しかし境界を持つ矩形をしようとしたとき
とステップサイズ(d)が1である。
矩形境界の外側に反復する。なぜこれが起こっているのか分かりますが、forループのイテレーターの条件には、余分な+ dが含まれているため、それが含まれません。
私の質問は、この問題にアプローチするには良い方法がありますか?
これは以前に実装されていて、いくつかのソースコードがあるかどうかは知っていますか?
助けをお祈りします。私はそれについて行くことになった
ベン
グリッド上のすべての点は整数値か、ここでは「double」値を使用する必要がありますか?これを回転と変形された整数値のx-yグリッドとしてモデル化すると考えましたか?グリッドが入っている変換を表すために行列を使うことができます。次に、その値を出力する前に2次元ベクトルを変換行列に押し込む計算を行います。 – Will
こんにちは、アドバイスをいただき、ありがとうございます。また、この質問は本当に投票の価値がないのでしょうか?私はそれをかなり詳細にして合理的に興味深い質問を提供したと思った? –