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