0

元のコードで同じ結果を生成する 2 番目のバージョンで for ループを作成しようとしていますが、-400、-200、-400 を順番に取得する方法がわかりません。
元のコード:

p->m_p[0] = randFloat(-400.0f, 400.0);
p->m_p[1] = randFloat(-200.0f, 200.0);
p->m_p[2] = randFloat(-400.0f, 400.0);

2 番目のバージョン:

float x = -800;
float y = 800;

for(int i = 0; i < 4; i++)
{
plNew->m_fPosition[i] = randFloat(x / 2,y / 2); 
}
4

5 に答える 5

2

C (または C++11 より前の C++) で動作する必要がある場合は、次のように動作します。

#define NUMBER_OF_VALUES 3

float bounds[NUMBER_OF_VALUES] = { 400.0f, 200.0f, 400.0f };

for (int i = 0; i < NUMBER_OF_VALUES; i++)
{
  plNew->m_fPosition[i] = randFloat(-bounds[i], bounds[i]); 
}

bounds[NUMBER_OF_VALUES]これを拡張して、 のすべてのメンバーを目的の定数で初期化する限り、NUMBER_OF_VALUES を 4 以上にすることができます。これの優れた機能は、定数のシーケンスが、400、200、400 またはその他の規則的なシーケンスの交互に限定されず、好きなようにできることです。

于 2015-01-09T22:49:35.733 に答える
1

このようなもの?

for (int i = 0; i < 4; i++) {
    float x, y;

    if (i % 2) {
        x = -400.0f;
        y = 400.0f;
    } else {
        x = -200.0f;
        y = 200.0f;
    }

    p->m_p[i] = randFloat(x, y);
}
于 2015-01-09T22:38:03.397 に答える
0

どうですか?

float x = -800;
float y = 800;

for(int i = 0; i < 4; i++)
{
    float z = 2.0 * ((float)((i + 1) % 2 + 1));
    plNew->m_fPosition[i] = randFloat(x / z, y / z); 
}
于 2015-01-09T22:40:42.697 に答える