私は現在私のフリータイムで働いているものに少し問題があります: 私はC++でDSA経由で高さマップを作成したかったのです。しかし、私は計画どおりには機能しません。 私のコードは、(2件の文字のコメントを無視してください)です。ダイヤモンドスクエアアルゴリズムが斜線カットを作成
void DiamondSquareAlgorithm(int x1, int y1, int x2, int y2, float range, unsigned level)
{
//level = size - 1 when called the first time
if (level < 1) return;
float a;
float b;
float c;
float d;
float e;
for (int i = x1; i < x2; i += level)
{
for (int j = y1; j < y2; j += level)
{
//diamond
a = startArr[i + j * (x2 - x1 + 1)]; //lo
b = startArr[(i + level) + j * (x2 - x1 + 1)]; //ro
c = startArr[i + (j + level) * (x2 - x1 + 1)]; //lu
d = startArr[(i + level) + (j + level) * (x2 - x1 + 1)]; //ru
e = startArr[(i + level/2) + (j + level/2) * (x2 - x1 + 1)] = (a + b + c + d)/4;
}
}
for (int i = x1; i < x2; i += level)
{
for (int j = y1; j < y2; j += level)
{
a = startArr[i + j * (x2 - x1 + 1)]; //lo
b = startArr[(i + level) + j * (x2 - x1 + 1)]; //ro
c = startArr[i + (j + level) * (x2 - x1 + 1)]; //lu
d = startArr[(i + level) + (j + level) * (x2 - x1 + 1)]; //ru
e = startArr[(i + level/2) + (j + level/2) * (x2 - x1 + 1)] = (a + b + c + d)/4;
//square
startArr[(i + level/2) + j * (x2 - x1 + 1)] = (a + b + e)/3; //o
startArr[(i + level) + (j + level/2) * (x2 - x1 + 1)] = (b + d + e)/3; //r
startArr[(i + level/2) + (j + level) * (x2 - x1 + 1)] = (d + c + e)/3; //u
startArr[i + (j + level/2) * (x2 - x1 + 1)] = (a + c + e)/3; //l
}
}
DiamondSquareAlgorithm(x1, y1, x2, y2, range/2, (level/2));
};
結果は常にこの線に沿って何かである:
誰かは明らかに重大な間違いを見つける私を助けてください私は自分のコードを作った?
問題の原因がわかりません。コード全体を追加しようとする必要があります。わからないことは、 'startArr'(calc上のオフセット)のサイズとパラメータまたは出力です。あなたはコードを追加することができます:http://ideone.com/? – xsami
11行目から22行目までのコードブロックには何も関係しません。「a、b、c、d、e」に値を代入する – xsami
コードの最後にセミコロンが付いていませんか? (コンパイルしないでください) – xsami