過去ログ

uchinyan
#25809への追加:
少し長くなりますが、一応、プログラムを書いておきましょう。
北極点に点 A、経度 0 度の子午線上に点 B、球面の任意の位置に点 C をとって、点 B、C を極座標で表します。なお、球の中心を O とします。
点 B は、経度 0 度上なので、緯度の自由度だけでこれを y とします。点 C は、経度を a、緯度を z にしています。
これら、a, y, z は自由に等確率で与えることができると仮定していますが、さすがに、これは大丈夫でしょう。
次に、球面上の幾何学の知識を使います。私は、今回始めてWebで勉強したので、ひょっとしたら間違っているかもしれません...^^;
さて、球面三角形ABC を考えます。すると、∠A は a になることが分かります。
ただし、球面三角形は、測地線の短い方を取るとしているので、a がπを超える場合は、∠A = 2π - a とします。
さらに、∠B = b、∠C = c とおきます。
球面三角形の各辺は、その辺となる測地線の中心角で表すので、∠AOB = y、∠AOC = z ですが、さらに、∠BOC = x とします。
球面三角法の公式から、
cos(x) = cos(y)cos(z) + sin(x)sin(y)cos(a)
cos(b)sin(x) = cos(y)sin(z) - sin(y)cos(z)cos(a)
cos(c)sin(x) = cos(z)sin(y) - sin(z)cos(y)cos(a)
がいえ、b, c が求まります。
球面三角形の面積 s は、やはり、球面上の幾何学から、s = a + b + c - π と求まります。
後は、この面積を足しあげて、球の表面積を 1 としているので 4πで割って、取ってきた三角形の個数で平均します。
なお、プログラムの限界による桁あふれなどで計算がエラーになることがあるので、それを防ぐための工夫、DO LOOP の辺り、をしています。

2005/09/16 8:00am 頃追加。
RANDOMIZEの位置を少し変えました。この方が、ランダム性が増すようです。

2005/09/16 11:30am 頃追加。
ほとんど不要ですが、安全性を増すために、さらに工夫しました。
とはいえ、計算結果に改善は見られません。まぁ、乱数ですから、当然ですね。むしろ、揺れが大きくなったかなぁ。
100000 : .124803944399878
200000 : .125444581427515
300000 : .125101556380867
400000 : .125008553196104
500000 : .124829641436551
600000 : .125150645416347
700000 : .125171487607043
800000 : .125133544380509
900000 : .124987211093014
1000000 : .125020609081723
しかしいずれにせよ、1/8 = 0.125 の辺りをフラフラしている感じはあります。
以下、プログラムです。

LET n = 1000000
FOR k = 0 TO n STEP 100000
 RANDOMIZE
 LET sum = 0
 FOR i = 1 TO k
  LET x = 0
  LET s = 10
  LET t = 10
  DO WHILE (ABS(s) > 1) OR (ABS(t) > 1)
   DO WHILE SIN(x) = 0
    LET a = 2 * PI * RND
    IF a > PI THEN
     LET a = 2 * PI - a
    END IF
    LET y = PI * RND
    LET z = PI * RND
    LET x = ACOS(COS(y) * COS(z) + SIN(y) * SIN(z) * COS(a))
   LOOP
   LET s = (COS(y) * SIN(z) - SIN(y) * COS(z) * COS(a))/SIN(x)
   LET t = (COS(z) * SIN(y) - SIN(z) * COS(y) * COS(a))/SIN(x)
  LOOP
  LET b = ACOS(s)
  LET c = ACOS(t)
  LET s = a + b + c - PI
  LET sum = sum + s
 NEXT i
 IF k <> 0 THEN
  LET p = sum/(4 * PI)
  LET p = p/k
  PRINT k;":"; p
 END IF
NEXT k
END
ネコの住む家   9月16日(金) 11:28:27   MAIL:uchi@sco.bekkoame.ne.jp   25813

過去問題一覧へ戻る