値を更新 ってところコーディングします。
さて、これ、がんばれば短縮できますが、
コードを見やすくするために、やっぱり変数を追加しましょう。
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座標の距離になる ってことです。
うーん、
これ、二点間の距離をとる公式みたいなもので、
ピタゴラスの定理を知ってるものとして説明すると
ピタゴラスの定理の証明はグーグル先生に聞けばいいと思う
さて、距離がわかったら、
その距離から円の判定になるのはなぜかというと、
「円周上のどの点をとっても、円の中心との距離は等しい」
ってのは円の定義から考えればわかりますよね。
言い換えてるだけ。
で、それをひっくり返せば
「円の中心との距離が半径と等しい位置に点を打てば、そこは円周上である」
ってなるわけで、すすめれば
「円の中心との距離が半径より小さければ、
それはその円より小さい半径の円周上の点になるから、
半径が小さい円は、大きい円と中心が同じなら全て含まれるので、
その点は円の内側である」
みたいなー?(適当です
if Distance<=128 then begin
Erai:=Erai+1;
end;
まぁ、半径は128ですから、Distanceが128以下なら内側で、
偉いゴマが一個増える わけですよ。
<= ってのは、左辺が右辺以下 ならば真を返す 比較演算子です。
左辺が右辺以下 っって場合は、 >= となります。
=> とか =< って演算子は無いので注意
これで偉いゴマを計測したら、
全てのゴマも追加するので
Goma:=Goma+1;
ってわけです。続きはまたこんど
コンテンツ
最新の12件
2023-06-12
2021-02-15
2013-06-19
2012-07-14
2012-02-04
2012-01-06
2011-03-31
2010-08-26
2010-03-15
2009-10-21
2009-02-12
2008-11-18
メニュー編集
- counter: 894
- today: 1
- yesterday: 0
- online: 2