コラム / パイパイモンテカルロたん / 9



値を更新 ってところコーディングします。
さて、これ、がんばれば短縮できますが、
コードを見やすくするために、やっぱり変数を追加しましょう。
var
   Goma:Integer;
   Erai:Integer;
   Pai:Single;
   NewX,NewY:Integer;
   Distance:single;
Distance。距離。
特に他に説明することもないと思います。
それじゃぁコードを書きましょう。
   //値を更新
   Distance:=sqrt(sqr(NewX-128)+sqr(NewY-128));
   if Distance<=128 then begin
       Erai:=Erai+1;
   end;
   Goma:=Goma+1;
Distanceに計算結果を代入していますね。
で、その式ですが、複雑なことになっています。
外回りずつ見ていきましょう。
sqrt(式);
sqrtは、平方根を返す関数です。
ピタゴラスの定理で最後にルートに入れるやつですね。
sqr(式)+sqr(式)
sqrは、平方(二乗)を返す関数です。
ピタゴラスの定理で、ルートに入れる前に、 a^2+b^2をするところで出てきますね。
NewX-128
引き算の結果は「差」って言いますね。
128は0-256の真ん中にあるので、中心の点のX座標です。 
それと、ゴマのX座標と引き算すれば、
「差」が出るので、それがX座標の距離になる ってことです。
うーん、
これ、二点間の距離をとる公式みたいなもので、
ピタゴラスの定理を知ってるものとして説明すると

pita.png

ピタゴラスの定理の証明はグーグル先生に聞けばいいと思う
さて、距離がわかったら、
その距離から円の判定になるのはなぜかというと、
「円周上のどの点をとっても、円の中心との距離は等しい」
ってのは円の定義から考えればわかりますよね。
言い換えてるだけ。
で、それをひっくり返せば
「円の中心との距離が半径と等しい位置に点を打てば、そこは円周上である」
ってなるわけで、すすめれば
「円の中心との距離が半径より小さければ、
 それはその円より小さい半径の円周上の点になるから、
 半径が小さい円は、大きい円と中心が同じなら全て含まれるので、
 その点は円の内側である」
みたいなー?(適当です
   if Distance<=128 then begin
       Erai:=Erai+1;
   end;
まぁ、半径は128ですから、Distanceが128以下なら内側で、
偉いゴマが一個増える わけですよ。
<= ってのは、左辺が右辺以下 ならば真を返す 比較演算子です。
左辺が右辺以下 っって場合は、 >= となります。
=> とか =< って演算子は無いので注意
これで偉いゴマを計測したら、
全てのゴマも追加するので
   Goma:=Goma+1;
ってわけです。続きはまたこんど