生成随机坐标,它们之间存在差异

时间:2014-02-19 10:42:44

标签: c++ visual-studio-2010 algorithm

所以我试图在大约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分是绝对巨大的数字(以百万计),而只有第一点在所需的范围内?

1 个答案:

答案 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) );