我正在编写一个简单的教程,我想在暗灰色区域内的任何位置随机生成红色和绿色框的位置,但不是在白色区域。有没有特别优雅的算法呢?我有一些非常简单的想法(继续生成,而坐标不在内部矩形之外,等等),但我想知道是否有人提出了一些简洁的解决方案。
感谢您的帮助!
答案 0 :(得分:3)
我个人会选择简单的“保持采样直到你得到一个有效的值”的方法,除非你有一个非常大的白色矩形对着一个不大的灰色矩形。对我来说,更简单几乎总是更好。
另一种方法是计算出可能的像素数,并在该范围内生成一个随机数。然后从左上角到右下角有效地对像素进行编号。确定给定的随机样本是在顶部,底部还是中间(您可以通过查看它是否小于白色矩形顶行上的第一个像素,或者小于第一个像素白色矩形下方的线条)。一旦你完成了这个工作,就可以解决这个行,然后是行中的像素。这并不是很难,但 非常繁琐且容易出错。请注意,这是确定单个随机像素:当您生成大方块时,应考虑方形左上角的有效像素范围,并在 范围内查找样本。
答案 1 :(得分:3)
简单本身就是一种优雅,所以我同意Jon:采取 Monte Carlo approach 并继续抽样,直到获得有效价值。
如果您想保证永远不会在白框内放置红色或绿色方块,可以使用以下简单算法:
确定您要放置的方格的高度 h S 和宽度 w S
将灰色区域划分为8个矩形区域 R = { R 1 , R 2 < / sub> ,... R 8 },由白框定义。 (想象一下在中心有白色方框的井字网格;这定义了周围的八个区域。)
设P( S 放在 R i )= A( R i )/ A( R ),其中A( R i )是 S 可以放置:即区域的区域( h R i - h < sub> S )·( w R i - w S 的)。
根据上述概率选择区域。然后从可用的x坐标和y坐标的均匀分布中选择该区域中的点。
完成!