c++ - 圆内框外的随机位置

标签 c++ random

我需要在框外但在圆圈内找到一个随机位置。 基本上是框和圆之间的随机位置。

我想做的是只 rand() 一个圆圈内的位置并检查该位置是否在框外,基本上是进行碰撞检查。

有没有比这个方法更高效的方法?

最佳答案

假设方框和圆的中心重合,执行此操作的一种有效方法是,您只需生成一个随机数两次:

  1. 随机化从圆的原点 [0, 2pi] 投影的角度
  2. 根据第 1 步中生成的角度从圆心发出的几何射线与框相交的位置,计算您可以生成的最小允许半径。
  3. 生成一个随机数 [0, (cirlce's radius - radius from step 2)]
    • 这可以使用 %fmod 完成

如果形状中心不重合,您可以通过将第 2 步分成 2 个步骤来稍微修改一下:

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

并将步骤 3 分为 2 步

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

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

希望这对您有所帮助!

关于c++ - 圆内框外的随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425762/

相关文章:

c++ - 函数调用中创建的对象和传入的对象有什么区别

c++ - 如何在 C++ 中按字母顺序排序

c++ - text_multifile_backend 如何为文件名设置动态日期

c++ - 制作可移植代码

c++ - 没有匹配调用 employee::employee() 的函数

PHP MySQL - 如何每周随机选择项目?

haskell - 通过并发提高仿真性能

C++ 随机数逻辑运算符奇怪的结果

ruby - 在 Ruby 中为正则表达式模式生成字符串

c - 为什么 C 不能正确计算模数,但结果却是正确的?