所以我试图在大约640,000个点的区域内生成5个随机坐标,每个轴的值在100到900之间。这些坐标之间的距离必须大于100,以防止重叠。搜索过以前的答案并尝试下面的一段代码:
struct point
{
int x;
int y;
};
point pointarray[6];
srand ( time(NULL) );
pointarray[1].x = 100+(std::rand()% 801);
pointarray[1].y = 100+(std::rand()% 801);
for (int n=2; n <= 5 ; n++)
{
double dist;
int currentx;
int currenty;
double xch;
double ych;
while (dist < 100)
{
srand ( time(NULL) );
currentx = (100+(std::rand()% 801));
currenty = (100+(std::rand()% 801));
xch = (currentx - (pointarray[(n-1)].x));
ych = (currenty - (pointarray[(n-1)].y));
dist = sqrt(xch*xch + ych*ych);
if (dist >= 100 && dist <= 800 )
{
currentx = pointarray[n].x;
currenty = pointarray[n].y;
}
}
}
我不明白为什么最后4分是绝对巨大的数字(以百万计),而只有第一点在所需的范围内?
答案 0 :(得分:1)
您使用未初始化的dist
,可能是问题所在:
double dist;
....
while (dist < 100)
另外,我看不到你写入pointarray的地方(除了pointarray [1])。不应该
currentx = pointarray[n].x;
成为
pointarray[n].x = currentx;
此外,如果dist
大于800
,则没有任何反应,我们只是转到下一个元素。我想这意味着要保持在while
循环中。
另外,我们检查前一点的距离。我不确定,但可能的目的是检查以前所有点的距离。在后一种情况下,我们可能需要一个内循环。但要确保已经放置点的可能性使得无法放置下一个点。
另外,也许你不想要第二个srand ( time(NULL) );