No.07683 長方形内に均等に乱数を発生する方法  【GrowHair】 2008/09/20(Sat) 17:55

[0, 1] 区間に実数値の一様乱数を生成する関数 nrand() が用意されているとして,これを用いて
幅 w0,高さ h0 の長方形内に「均等」に分布する点 (x, y) を生成するにはどうしたらいいので
しょうか。単純に,
  x = w0 * nrand()
  y = h0 * nrand()
としたのでは,w0 と h0 が異なる値のとき,X 方向と Y 方向とで「密度」が異なってきてしまう
ような気がするのですが。

こういう場合の「均等」とか「密度」をどう定義したらいいかもよく分かっていない状態なので,
質問自体が漠然としていて申し訳ないのですが。お知恵を拝借できれば。

No.07684 Re: 長方形内に均等に乱数を発生する方法  【ひの】 2008/09/21(Sun) 00:01


 あなたのおっしゃるような意味でX,Y方向の密度が等しくなるよう7にするには,X座標だけあってY座標を持たない点とか,Y座標だけあってX座標を持たない点とかを発生させる必要がありますが,そんなことできないでしょう。

 発生させた点の数だけX座標もY座標も発生させなきゃならないんですから,あなたのいう「密度の違い」はいたしかたのないことすです。

No.07685 Re: 長方形内に均等に乱数を発生する方法  【GrowHair】 2008/09/21(Sun) 02:17

ひのさま,どうもありがとうございます。

何か勘違いをしていたかもしれないという自覚は芽生えてきました。
自力で抜け出せそうな感じもしなくもないですが...。

ドットを十分たくさん打った後で,X 軸へ投影したヒストグラムと,Y 軸へ投影したヒストグラムとを考えると,ドットの個数は同じで,全体の長さが違うのだから,単位長さあたりのドットの個数は同じになりようがないですね。それは確かにその通りなのですが...。

別の角度から質問しなおさせて下さい。
(やっぱり表現は感覚的で申し訳ないのですが。)

いま,a という長さを,元の長方形の幅 w0 と高さ h0 のうち大きいほう,つまり,
  a = max(w0, h0)
とします。
幅,高さともに a の正方形の中に,
  x = a * nrand()
  y = a * nrand()
にしたがって,十分たくさんのドットを打ちます。
そこから,幅 w0,高さ h0 の長方形を切り出してきます。

一方,当初のように,最初から長方形内に
  x = w0 * nrand()
  y = h0 * nrand()
にしたがって,十分たくさんのドットを打ちます。

両者は「景色」が違うように感じていたのですが,そんなことはないですね?

● 「統計学関連なんでもあり」の過去ログ--- 042 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る