プログラミング実習 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
お試しあれ
ダウンロード

非線形漸化式のCG(2)