No. 11≫ No.12 最新レスです
Another World
2006/09/04 23:09
何気に多忙になっている今日この頃
そんな大したコーディングでもないという事と、
ミスがある可能性もあるという事で、ソースを晒します。
=====
For x = 1.1 To 1.3 Step 0.02
lngCount = 0
For i = 1 To lngTotal
'-- 始点決定
px1 = Rnd: py1 = Rnd: pz1 = Rnd
'-- 終点決定
px2 = px1 + (Rnd * x)
pxd = px2 - px1
py2 = py1 + (Rnd * Sqr((x ^ 2) - (pxd ^ 2)))
pyd = py2 - py1
l = Sqr((pxd ^ 2) + (pyd ^ 2))
pz2 = IIf(x - l = 0, pz1, pz1 + Sqr((x ^ 2) - (l ^ 2)))
'-- 座標変換
px2 = Int(px2): py2 = Int(py2): pz2 = Int(pz2)
If (px2 Or py2 Or pz2 = 1) Then
lngCount = lngCount + 1
End If
Next i
'-- 結果出力
Debug.Print x & " : " & Format$(lngCount / lngTotal, "00.0000%")
Next x
=====
変数については、座標関連とxは倍精度浮動小数点です。
寝る前に動かしてサンプルをとるという方法もありますが、
その前に少しずつ範囲を狭める作業があるので、また後日。
もし、可能であれば、どなたかお願いします。
そんな大したコーディングでもないという事と、
ミスがある可能性もあるという事で、ソースを晒します。
=====
For x = 1.1 To 1.3 Step 0.02
lngCount = 0
For i = 1 To lngTotal
'-- 始点決定
px1 = Rnd: py1 = Rnd: pz1 = Rnd
'-- 終点決定
px2 = px1 + (Rnd * x)
pxd = px2 - px1
py2 = py1 + (Rnd * Sqr((x ^ 2) - (pxd ^ 2)))
pyd = py2 - py1
l = Sqr((pxd ^ 2) + (pyd ^ 2))
pz2 = IIf(x - l = 0, pz1, pz1 + Sqr((x ^ 2) - (l ^ 2)))
'-- 座標変換
px2 = Int(px2): py2 = Int(py2): pz2 = Int(pz2)
If (px2 Or py2 Or pz2 = 1) Then
lngCount = lngCount + 1
End If
Next i
'-- 結果出力
Debug.Print x & " : " & Format$(lngCount / lngTotal, "00.0000%")
Next x
=====
変数については、座標関連とxは倍精度浮動小数点です。
寝る前に動かしてサンプルをとるという方法もありますが、
その前に少しずつ範囲を狭める作業があるので、また後日。
もし、可能であれば、どなたかお願いします。