随机生成多个rect并且不能重叠

potatoli 2007-04-14 11:33:40
要求如下:
1, 背景大小是固定的, 2000 * 2000
2, 在背景上最多可以指定32个rect
3, 每个rect最大不能超过背景大小,最小为100 * 100
4, 每个rect大小可以指定,也可以随机生成
5, 各rect之间不能有重叠的部分,但是边可以重叠

现在假设有10个rect,其中3个已经指定好,并且保证这3个rect没有重叠的部分,另外7个用随机数生成(位置和大小)。

我到现在还没有头绪,因为随机生成一个的话很可能与已有的重叠,如果用无限循环来判断的话很可能进入死循环,麻烦各位提供下思路。
...全文
613 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lailuboy 2007-06-29
  • 打赏
  • 举报
回复
UP
fairyprince 2007-04-19
  • 打赏
  • 举报
回复
1、在内存制造一个 背景大小的矩阵 发果想节省空间可以用 1bit 代表一个点。

2、随机取点检测 该点在矩阵中的是否被占用,如果占用重新执行 2

3、随机取点 该点所构成的矩形,在矩阵中的是否被占用(检测四个点即可),如果占用重新执行 沿对角线缩小(缩小幅度自定,推荐二分之一),直至没有被占用

4 填充这个矩阵,返回2

现在问题是在于 2 只要能保证一定命中率,就可以很快完成计算。
这进可以提个建议:
将 每行上占用点数相加,列上占用点数相加,根据所产生的两个数组(行,列各一个:例,2000*2000 分别就一两个 2000 数组,至于占用点数相加 非常简单,可要根所两个点就可以快速算出,不要说不会呀),检测占用率较少的行和列区间,这个算法,就是微积分了!


potatoli 2007-04-14
  • 打赏
  • 举报
回复
能否提供具体一点的思路。
Rock_And_Roll 2007-04-14
  • 打赏
  • 举报
回复
只能判断了,不要使用同样的随机种子。应该不会出现死循环。
potatoli 2007-04-14
  • 打赏
  • 举报
回复
补充一点要求: 每个rect的width和height都是以100为单位。
不涉及界面操作,只要能得到每个rect的位置的大小就可以了。
「已注销」 2007-04-14
  • 打赏
  • 举报
回复
呵呵,现在我也正在想这个算法,关注一个,我打算用动态规划做做看

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧