生成它们之间有差异的随机坐标

Generating random coordinates with differences between them

本文关键字:随机 坐标 之间      更新时间:2023-10-16

因此,我寻求在大约 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 点绝对是巨大的数字(以百万为单位),而只有第一个在要求的范围内?

您使用未初始化的dist,这可能是问题所在:

double dist;
....
while (dist < 100)

另外,我没有看到你写点数组的地方(除了点数组[1])。不应该

currentx = pointarray[n].x;

成为

pointarray[n].x = currentx;

另外,如果dist大于800,那么什么都不会发生,我们只是转到下一个元素。我想目的是留在循环while而不是。

此外,我们检查到前一个点的距离。我不确定,但可能是目的是检查到所有先前点的距离。在后一种情况下,我们可能需要一个内部循环。但要确保已经放置的点不可能使下一个点无法放置。

另外,也许您不想要第二个srand ( time(NULL) );