我正在尝试在第二个版本中编写一个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);
}发布于 2015-01-10 06:49:36
如果你需要它在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-10 06:38:03
像这样的东西?
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-10 06:40:43
关于?
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);
}https://stackoverflow.com/questions/27870326
复制相似问题