プロが教えるわが家の防犯対策術!

C++でBuffonの針についてのプログラムを書けと言われました。
始めに私が考えたプログラムは却下。
πを求めるプログラムなのに、πを使ってしまった私が愚かなのですが…(-_-;)
しかし、sinなどは使ってほしいようで、πを使わずにどう作っていいのか分かりません。
C++自体が初心者よりは少し出来るかなぐらい、数学も長年遠ざかっていたので自分の考えを却下されてしまうと次の考え…というように柔軟にいきません。
Buffonの針についてのC++プログラムを教えていただけるととてもありがたいです!
よろしくお願い致しますm(._.)m

A 回答 (3件)

ちょっと思いついたのですが円周率を使わずに直接sinの値を求めます


2個の乱数で座標を求めます
その値からsin(θ)の値を直接求めます
double rand_sin(void)
{
double px, py;
px = (double)rand() / RAND_MAX;
py = (double)rand() / RAND_MAX;
return py / sqrt(px * px + py * py);
}
試しにこれでプログラムしてみましたが3.09にしかならないので間違ってるかもしれません
    • good
    • 0

乱数で角度の範囲を決めるのに円周率が必要ですよね( 0 <= rad < 2π)


他の方法でやるのでしょうか
思いつきません
    • good
    • 0

プログラムまで書けというのはちとナニなので、


πを使わない式ということなら次のページにある
判定式を使えばいいのではないですか?
sinは使ってますし。

Buffon's needle
http://www.mist.i.u-tokyo.ac.jp/answertoquestion …

> 針が直線と交わるのは,X < 1/2 sin(Y) か
> X > 1-1/2 sin(Y)のいずれかが成立する場合です.
> したがって,針が直線と交わる確率は,
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!