提供:Japanese Scratch-Wiki
このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する
メモ:
この記事を理解するには数学知識が必要であり、ない場合は説明が難しい場合があります。
総和とは、ある数からある数までを順番に足していったものである。
例えば、「1」から「10」までの総和は、
1+2+3+4+5+6+7+8+9+10
=55
となる。
また、この総和には以下の性質がある。
この性質を利用して、以下のプログラムを作ることができる。
(((n) * ((n) + (1))) / (2))
応用
- 運転ゲームなどで滑らかな減速をする。
定義 速度計算(最大速度)(初期距離) [速度 v] を [0] にする [停車目標までの残りの距離 v] を (初期距離) にする <(最大速度) < ((速度) + (足される速度))> まで繰り返す//足される速度は、アクセルのレベルによる。 [停車目標までの残りの距離 v] を ((停車目標までの残りの距離) - (引かれる距離)) にする [速度 v] を ((速度) + (足される速度)) にする end <(速度) < [0.1]> まで繰り返す [停車目標までの残りの距離 v] を ((停車目標までの残りの距離) - (引かれる距離)) にする//引かれる距離は速度による。 [速度 v] を ((速度) - (引かれる速度)) にする// ひかれる速度はブレーキのレベルによる。 end もし <(停車目標までの残りの距離) < [0]> なら 速度計算 ((最大速度) - (1))(初期距離) でなければ [最適な速度 v] を (最大速度) にする end
この場合、この計算により一番早くて、一番正確に止まれることができる。
だが、初期速度が120の場合は、とても長い計算になってしまう。
なので、ここで総和を使うと、
定義 速度計算(最大速度)(初期距離) [速度 v] を [0] にする [停車目標までの残りの距離 v] を (初期距離) にする [停車目標までの残りの距離 v] を ((停車目標までの残りの距離) - (((最大速度) * ((最大速度) + (1))) / (2))) にする//1ずつ距離が減るとすると 減っていくのが1ではない場合で、等差数列ならば、「1*距離が減る数」を答えに掛ければよい。 [速度 v] を (((最大速度) * ((最大速度) + (1))) / (2)) にする ...
というようにあらわせる。 一見、あまり変わりないように見えるが、繰り返しの時間をカットできる上、負荷を抑えることができる。