プログラミング実習 1・2 クラス 第8週目 担当教員: 渡邊 直樹 課題 7 ● 非線形漸化式の解が描く軌道をCG動画によって表示 するアプレットプログラムLorenz.javaを作成せよ。 1.sample 9を加工して、軌道を描く色を自由に作成せよ。 2. X-YまたはY-Z平面上への描画を行え。 (sample 9ではX-Z平面上への描画を行っている。) 3.漸化式の係数をアプレット上から入力する仕組みを作れ。 (sample 8参照。Sample 9では8.0、25.0、2.5と設定されている。) 2月20日にもう一つおまけの課題内容を追加する。提出は22日。 課題7の提出について • 提出方法:以下の事項に留意して記述したメールを [email protected] あてに送付。 1.自分のpublic_htmlディレクトリにLorenz.classと Lorenz.htmlを置き、そのURL(http://・・・)を メールの本文に書く。更にプログラムのソースコード (java ファイル)をメールの本文に書く。 どちらか一方だけでは提出とみなさない 2. メールの件名は必ず課題番号:学籍番号:氏名。 例:課題2:2007xxxxx:山田太郎 メール本文の末尾にも名前くらいは入れましょう。 締め切りは 2月22日 (金)、 12:00pm 動画の原理 1枚1枚フィルム(セル画)を映写するような手順 1.アプレット上に描画 sample 9 2.数(ミリ)秒間停止 ↓ 3.新しく描画するために消去・・・残しておくこともできる この繰り返し 一度に複数の処理を(見かけ上)同時に実行するには スレッド機能を使う。(sample 9では各jごとに80回点描し、各々 1000分の5秒停止させているので、「同時」には見えない) 動画を表示するための一般的形式(雛形) Import java.applet.*; Import java.awt.*; public class クラス名 extends Applet implements Runnable; Thread th; // スレッドの定義 public void init() { アプレットロード時の初期化メソッド } public void start() { スレッドの作成と開始 } public void run() { スレッドの実行: sample 9ではプログラム 構造をすっきりさせるため、dynamics(Graphics, g)を別途作成し、 それを呼び出す仕組みにした。ただし、画像の停止時間はここに書く。} public void stop{ スレッドの停止: sample 9ではチェックボックスにそ の機能を記述しているため、書く必要はない。} スレッドとは:実はか~な~りややこしい スレッド(直訳は「糸」、転じて「(論理などの)筋道」): 複数の処理を、見かけ上、同時並行的に実行する仕組み 例:Aがジャンプして、Bが屈むという情景を同時に行っている動画 「Aがジャンプ」、「Bが屈む」という処理を記述するプログラムを、 それぞれ極短時間で実行できる処理の断片の連なり(スレッド) として別々に作成 全体を制御するプログラム(run())で呼び出されたら、Aのジャンプを 少し実行、極短時間の停止、済んだら実行権を返し、Bの屈折を 少し実行、また極短時間の停止 (交互に断片的実行を行う) この繰り返しを行えば、同時並行的に動いているように見える。 sample 9で描かれる力学系 ローレンツ・アトラクター:流体モデルにおけるカオスの生成 (分かりやすく言うと)以下の連立微分方程式の解が描く 軌道の動画 (非線形なので、数値計算する) dx/dt = -8.0x+8.0y dy/dt = -xz+25.0x-y dz/dt = xy-2.5z, t は時間を表す コンピュータは連続系を処理できないので、sample 9ではdtをできるだけ 小さく取って漸化式にしている(オイラーの方法による差分化) エドワード・ローレンツ:気象学者 彼の流体モデルが不規則解を持つことを示した 2度と同じ点を通過しない非周期軌道 sample 9ではY軸方向から見たX-Z平面上への描画なので、軌道が 重なりうるが、3Dだと同じ点を通過していない。短時間で描画を 停止・再開してみて、軌道が重ならないことを確認せよ。それを容易に するために、repaint()をチェックボックスの中に書いた。 1963年:論文刊行(しばらく無視される) 1973年:メリーランド大学のアラン・ファラー(地球物理学者)が同じ 大学のヨーク(数学者)に論文を紹介 → リー・ヨークの定理 (カオスと命名) カオス:シャルコフスキー(キエフ大)の定理 上田(京大)のジャパニーズアトラクター 他には・・・ Rosslerモデル 例 dx/dt = -y-z dy/dt = x+0.36y dz/dt = 0.4y-4.5z+xz お試しあれ
© Copyright 2024 ExpyDoc