我需要在框外但在圆圈内找到一个随机位置。 基本上是框和圆之间的随机位置。
我想做的是只 rand() 一个圆圈内的位置并检查该位置是否在框外,基本上是进行碰撞检查。
有没有比这个方法更高效的方法?
最佳答案
假设方框和圆的中心重合,执行此操作的一种有效方法是,您只需生成一个随机数两次:
- 随机化从圆的原点 [0, 2pi] 投影的角度
- 根据第 1 步中生成的角度从圆心发出的几何射线与框相交的位置,计算您可以生成的最小允许半径。
- 生成一个随机数 [0, (cirlce's radius - radius from step 2)]
- 这可以使用
%
或fmod
完成
- 这可以使用
如果形状中心不重合,您可以通过将第 2 步分成 2 个步骤来稍微修改一下:
- 计算与框的第一个交点(如果存在)
- 计算与框的第二个交点(如果存在)
并将步骤 3 分为 2 步
如果找到 2 个交点,则生成一个随机数 [0,1] 以选择第一个或第二个有效范围(中心到第一个交点或第二个交点到圆的边缘)
生成所选范围内的随机数。
希望这对您有所帮助!
关于c++ - 圆内框外的随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425762/