圆圈内盒子外面的随机位置

时间:2019-01-29 16:41:29

标签: c++ random

我需要在一个盒子外面找到一个随机的位置,但是在一个圆里面。 基本上是盒子和圆之间的随机位置。

我想做的就是将rand()放在圆内,然后检查该位置是否在盒子外面,基本上是进行碰撞检查。

有没有比这种方法更有效的方法?

1 个答案:

答案 0 :(得分:2)

假设框和圆的中心重合,那么一种有效的方法是,您只需生成两次随机数即可:

  1. 随机化从圆的原点[0,2pi]投射的角度
  2. 根据在步骤1中生成的角度从圆心的几何射线与框相交的位置,计算可以生成的最小允许半径。
  3. 生成随机数[0,(圆弧半径-步骤2的半径)]
    • 可以使用%fmod
    • 完成

如果形状中心不重合,则可以通过将步骤2分为2个步骤来对其进行稍微修改:

  1. 计算与框的第一个交点(如果存在)
  2. 计算第二个与框的交点(如果存在)

并将第3步分为2步

  1. 如果找到2个交点,则生成一个随机数[0,1]以选择第一个或第二个有效范围(从中心到第一个交点或从第二个交点到圆的边缘)

  2. 生成选定范围内的随机数。

希望这会有所帮助!