2010-08-09 29 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