C++ 圆内方框外的随机位置
我需要找到一个随机位置在一个盒子外面,但在一个圆里面。 基本上是盒子和圆之间的随机位置 我想做的是在一个圆内对一个位置进行rand(),然后检查该位置是否在框外,基本上是进行碰撞检查C++ 圆内方框外的随机位置,c++,random,C++,Random,我需要找到一个随机位置在一个盒子外面,但在一个圆里面。 基本上是盒子和圆之间的随机位置 我想做的是在一个圆内对一个位置进行rand(),然后检查该位置是否在框外,基本上是进行碰撞检查 有比这种方法更有效的方法吗?假设长方体和圆的中心重合,一种有效的方法是这样做,只需生成两次随机数: 随机化从圆原点投影的角度[0,2pi] 根据在步骤1中生成的角度与长方体相交的圆中心的几何光线的位置,计算可以生成的最小允许半径 生成一个随机数[0,(cirlce的半径-步骤2中的半径)] 这可以使用%或fmod
有比这种方法更有效的方法吗?假设长方体和圆的中心重合,一种有效的方法是这样做,只需生成两次随机数:
- 这可以使用
或%
fmod
希望这有帮助 我会关注这些解决方案的职位分配。例如,如果选择的随机角度具有均匀分布,则沿矩形角附近的直线的结果分布将更加密集,沿矩形边中心附近的直线的结果分布将更加稀疏。请详细说明一下,好吗?如果发现两个交点,这将给出两个可能的线段。你应该选择哪一个,根据它们的长度来衡量可能性。否则,一个伟大的算法。@ PIPScEAK考虑在一些分辨率的角度均匀的样本,让我们简单地说,8个可能的线方向,每100个精确的样本。因此,直线将包含沿线段的100个点,该线段从矩形的边缘延伸到圆的边缘。轴对齐的四条线将把这些点分散在一个较长的段上(从正方形边缘到圆周长的距离较长),而穿过角的线将把这些100点分散在一个较短的段上。因此靠近拐角处的密度会更高。@PipSqueak不,对不起。事实上,要在复杂形状中获得均匀分布,而不从更简单的区域采样,是相当棘手的。如果分布不重要的话,你的解决方案很好,我只是想指出一个可能的限制。请不要关闭这个-这不是一个“为我编写代码”的问题,这是一个算法问题。圆圈和正方形的相对大小是多少?如果圆内的正方形是圆面积的一半,则平均而言,碰撞方法会使操作数加倍