2010-08-09 24 views
1

我有一个矩形和矩形内的一个圆(坐在矩形的中心附近)。我想生成一个随机的2分量矢量落入矩形内,但不是圆。我该怎么做?在矩形内生成一个随机矢量,但不是一个圆?

编辑:我更喜欢一种方法,我可以使用它来生成一个满足这些约束条件的向量。

回答

1
Vector = Rectangle.RandomVector(); 

while (Circle.Contains(Vector)) { 
    Vector = Rectangle.RandomVector(); 
} 

又名,只是蛮力而已。它每次有21.5%的机会出现在圆圈外:)

+1

你是怎么计算出21.5%的?似乎没有足够的来自OP的信息来获得这样的统计信息。 – Ponkadoodle 2010-08-09 23:10:53

+0

并非如此!他描述了一个刻在矩形内的圆圈(并且我假设了一个基于此的正方形)。圆的面积是广场面积的78.5%。因此,有21.5%的机会在广场内,但在圈外。 (如果圆实际上小于矩形,百分比就会上升,但这个想法是一样的) – 2010-08-09 23:39:00

+0

我从来没有说过这个圆出现在圆的任何一个边上;事实上它可能不会。 – RCIX 2010-08-09 23:56:21

0

为矢量的x和y分量生成随机数,例如x < rectangle.width和y < rectangle.heigth。然后检查x^2 + y^2 < circle.radius^2,如果是的话扔掉。

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

+0

我得到了这样的设置,但我宁愿不会丢掉一堆矢量... – RCIX 2010-08-09 23:13:14

+0

不幸的是,这是保持它均匀分布的唯一方法。 :( – corsiKa 2010-08-10 00:01:49

+0

@Glowcoder:我可能不介意非均匀分布,这取决于它是什么。头脑在一个答案中阐述? – RCIX 2010-08-10 00:47:00