gpt4 book ai didi

c++ - 在矩形qt中生成随机坐标

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:35 24 4
gpt4 key购买 nike

我有一个长 27.5 宽 3.5 的矩形,我应该在这个矩形内生成唯一的坐标,即没有任何重复项。需要生成的坐标数量取决于列表的大小。以下是我到目前为止使用 Qt 所做的事情:

struct coordinates_t{
int x;
int y;
};

QVector<coordinates_t> coordinatesList;
QList<QString> listOfDevices;
//populate listOfDevices

for( int i = 0; i < listOfDevices.count(); i++)
{
coordinatesList.pushback({rand() % 51 + (-25), rand() % 11 + (-5)});
}

现在的问题是,尽管 rand 函数在矩形内生成随机数,但它并没有避免重复。有什么方法可以避免重复并在给定矩形内生成唯一坐标。

最佳答案

解决这个问题的正常方法是打乱一组预定义的坐标。但这在这种情况下是不切实际的。此外,也允许在一个轴上重复。

考虑通过以下方式解决这个问题

  1. 定义 bool operator<(const coordinates_t& other) constbool operator==(const coordinates_t& other) const

  2. 使用 std::set<coordinates_t> .完成 (1) 后,这是可能的。

  3. 将随机坐标插入 set 直到达到集合的所需大小。

  4. 将设置复制到 QVector如果您仍然需要以这种方式存储它们。如果要保留插入顺序(set 将根据您在 (1) 中定义运算符的方式对值进行排序),则保留 QVector ,并且只有在插入到 set 时才将一个点推给它成功了。

将重复项插入 set是一个 O(Log N) 空操作。另请注意 rand()作为线性同余生成器可能会抛出不受欢迎的自相关效应,这些效应在 x、y 图中尤为明显。考虑改用 Mersenne Twister。

关于c++ - 在矩形qt中生成随机坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37811694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com