生成它们之间有差异的随机坐标
Generating random coordinates with differences between them
因此,我寻求在大约 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) );
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 字符串-C++后显示的随机字符
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 将字符随机转换为大写的函数
- 生成它们之间有差异的随机坐标
- 随机坐标中的 cout 向量 n 次
- 随机坐标和禁用下一个随机集的移动
- 生成不同的随机坐标
- 如何创建一个将坐标初始化为随机值的构造函数?
- 战舰游戏-随机坐标c++