第2回授業報告(2008.06.06)
今回の授業は、新たに文学部や法学部の1年生の参加となった。自然現象のアルゴリズムを見いだし、シミュレーションを構築することで、自然の原理を解明していこうという方向性を最初に提示した。
ボールの運動を記述するのに、座標軸の導入が必要となるが、との必然性をデカルトが、どのように「ここはどこ? いまはいつ?」という問いに答えようとしたかという逸話を紹介した。ここという場所を指し示すのに、基準となる場所が必要になる。この基準を原点とよび、座標軸を自然界に導入したことこそが、自然い対して人が見方を提示した瞬間である。この座標軸によって速度の定義など、他の物理量の定義が可能となる。
さて、ビリヤードの玉が壁にぶつかって反射していく世界を予測しよう!というのが課題である。
プログラムの実行文である等式、x=x+1;がこの瞬間と未来のつなぐ式であることを理解するとは、右辺のxは今のこの瞬間を表し、左辺のxは、未来の玉の位置を表していることを理解することである。
for文が繰り返される中で、xという変数に入る値が変わっていく。授業では数字がはいる箱という意味で、ブラックボックスという言い方をした。forループという繰り返しの中で、xという値がワンステップ毎に更新されていき、玉の運動が記述される。
玉が壁にぶつかる瞬間になにがおこるのか?「運動の向きがかわる」という意見がでてきたが、向きが変わるとは、どういう意味なのか?速度が方向性を持ち、方向性が導入した座標のプラス方向か、マイナス方向かで、符号がきまる。まず、ここで全員が立ち止まって考えた。
次にプログラム上で、速度の方向がどのように変化を書き表すことが必要となる。衝突が起こった瞬間におこる、過去と未来をつなぐ式を、過去を表す右辺、未来を表す左辺で表すにはどのようにしたらいいのだろうか?
C言語のプログラミングにおける課題としては、プログラム上におけるイコール=の意味は、数学の等式とは異なっているので、授業ではこのプログラム上のイコールという概念を構築するのに時間をかけた。
アルゴリズムを構築するさいに、繰り返し計算と条件分岐の理解が必要となるが、ボールが壁にぶつかるという瞬間をどのように条件とするのか、さらにボールが壁にぶつかる瞬間に「真」、ぶつからないならば「偽」という判定がなされる。
以上、「ボールが跳ね返るということは、どういうことか?」のアルゴリズムを繰り返し計算と条件分岐で構築した。
衝突するボールのプログラミング
for ループによる繰り返し計算 { x=x+Vx;//ボールの位置を更新する if(衝突の条件判定) { ーVx=Vx;//衝突の前後のワンステップにおこる現象を捉える } }