【问题标题】:Generate a random vector inside a rectangle but not a circle?在矩形内而不是圆形内生成随机向量?
【发布时间】:2010-08-09 23:02:40
【问题描述】:

我有一个矩形,并且在该矩形内有一个圆(位于矩形中心周围)。我想生成一个随机的 2 分量向量,它落在矩形内,而不是圆内。我该怎么做?

编辑:我更喜欢一种方法,我可以使用它来生成满足这些约束的向量,而无需暴力破解它。

【问题讨论】:

    标签: language-agnostic random vector geometry


    【解决方案1】:
    Vector = Rectangle.RandomVector();
    
    while (Circle.Contains(Vector)) {
        Vector = Rectangle.RandomVector();
    }
    

    阿卡,只是蛮力它。它每次都有 21.5% 的机会在圈外:)

    【讨论】:

    • 你是如何计算出 21.5% 的? OP 似乎没有足够的信息来获得这样的统计数据。
    • 不是这样的!他描述了一个内接在一个矩形内的圆(并且,我假设一个基于此的正方形)。圆的面积是正方形面积的78.5%。因此,它有 21.5% 的机会在正方形内,但在圆外。 (如果圆实际上比矩形小,百分比会上升,但思路是一样的)
    • 我从来没有说过圆延伸到圆的任何边缘;实际上很可能不会。
    • 好的。即便如此,我的回答仍然有效。除了调整职位直到找到一个可行的职位之外,真的没有其他实用的方法可以解决这个问题。
    【解决方案2】:

    为向量的 x 和 y 分量生成随机数,使得 x

    更新:另一种生成非均匀分布但不丢弃任何向量的方法如下:在区间 0 到 2*pi 中随机选择一个角度。现在通过从由直线与前一个角度与圆和矩形的中心开始的交点确定的区间中随机选择一个值来确定向量的长度。 当保护到圆圈上时,所得分布将是均匀的。每个角度也将是统一的。但是在飞机上它不会是统一的。

    【讨论】:

    • 我得到了那个设置,但我不想扔掉一堆向量......
    • 不幸的是,这是保持它均匀分布的唯一方法。 :(
    • @Glowcoder:我可能不介意非均匀分布,这取决于它是什么。介意详细回答吗?
    • 您可以通过说...来保留一些向量...切换 x 和 y 坐标并查看该向量是否仍然位于圆圈中。这将允许您减少生成的随机数总数。
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多