如何按顺序生成-400,-200,-400

时间:2015-01-09 22:31:30

标签: c for-loop while-loop do-loops

我试图在第二个版本中编写一个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);

第二版:

float x = -800;
float y = 800;

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

5 个答案:

答案 0 :(得分: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或任何其他常规序列。

答案 1 :(得分: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);
}

答案 2 :(得分: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); 
}

答案 3 :(得分:0)

我建议保持简单,使用以下内容:

const float arr3[] = {-400.0f, -200.0f, -400.0f};

for(int i = 0; i < 3; i++)
{
    plNew->m_fPosition[i] = arr3[i]; 
}

答案 4 :(得分:0)

float x = -400;
float y =  400;

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