温度をプログラム中で変更する
このままだと、温度を変更するにはプログラムをいったん停止し、ソースファイルを変更して再実行することが必要です。(計算機実験であればそれで十分ですが。)
ここではプログラム中で温度を自由に変更できるようにしてみましょう。
温度を変更するには、系の目標温度Tobjを外部から制御できるようにしてやればよいわけです。このようなプログラムの使用者(ユーザー)とのデータのやり取り部分をユーザーインターフェイスといいます。方法はいくつかありますが、次のように
マウスで操作できるスライダを用意してみましょう。
このような視覚的な入力方法をGUI (Graphical User Interface) といいます。
(Windows 以前の MS-DOS や、UNIX などのように、マウスを使わないキーボードからの入力をCUI (Character User Interface) といいます。それぞれの利点については Wikipedia の CUI などを参照してください。)
Processingでは、モジュールと呼ばれる追加部品が多数用意されています。ここではcontrolP5というGUIモジュールを利用します。次の手順でインストールします。
ControlP5のインストール
Processing の 上部メニューから [Sketch]-[Import Library…]-[Add Library…]を選択
しばらく待つと、インストールできるモジュールのリストが表示されるので、controlP5を選択し、[Install]
Processing を再起動
これまでのプログラムに、次のような処理を加えます。
import controlP5.*; ControlP5 ctls; float temp = 50; void setup(){ size(400, 400); background(0); smooth(); noStroke(); prepareControlers(); for(int i=0; i < particle_number; i++){ particle[i] = new Particle(i); } } void prepareControlers() { //スイッチ類の設定 ctls = new ControlP5(this); ctls.setColorBackground (0xdd666666); ctls.setColorForeground (0xdd888888); ctls.setColorActive (0xeecccccc); ControllerGroup g = ctls.addGroup("Controls",0,10); ctls.addSlider("temp", 0, 700, 50, 10, 10, 350, 20).setGroup(g); }
- 1,2行目
controlP5呼び出しのための手続きをプログラム冒頭に加えます。
この行でエラーが出る場合には、モジュールのインストールがうまくいっていない可能性があります。モジュールを正しくインストールするか、モジュール込みのzipファイルを使ってProcessngを再度インストールしてください。 - 11行目
setup()中で、GUIの設定のための関数(prepareControlers())を呼び出します。 - 17行目~
prepareControlers()の本体です。- 19行目 controlP5はクラスなので、これを生成して
- 20行目 スライダの右部分、
- 21行目 スライダの左部分、
- 22行目 マウスのポインタが上にあるときのスライダの左部分
の色をそれぞれ設定します。 - 23行目 スライダをグループ化します。
(グループ化すると表示を隠したり(画面上のCONTROLS右の-ボタンを押す)、移動したり(画面上のCONTROLSでAltキーを押しながらドラッグ)できます) - 25行目 スライダの定義本体です。
引数は8つ- “temp” 制御したい変数名を”で囲って指定 (変数は冒頭で定義されているもの(グローバル変数)に限る)
- 0 最小値
- 700 最大値
- 50 初期値(実際の初期値と一致させる)
- 10 スライダのx座標
- 10 スライダのy座標
- 350 スライダの横方向の幅
- 20 スライダの縦方向の高さ
このままだと、スライダをクリックしたときに分子ができてしまうので、
Particleクラスのmove_center() (分子を生成させる処理)中で、
if(keyPressed)を使い、何かキーを押しながらマウスをクリックしたときに分子を生成させるなどの工夫が必要でしょう。
温度を順次変更し、固体→液体→気体などの相転移が起きることを確認してください。
(液体状態が生成するかどうかは未確認)
以下参考
スライダは複数追加することができます。これを利用すると、分子の色などを変えることができます。
他、次のようなGUIが用意されています。
ctls.addToggle("random_size2", false,410, 50, 10, 10).setGroup(g); ctls.addButton("restart",10,10,70,80,20).setGroup(g); Radio r = ctls.addRadio("hist_param", 65, 235); r.setGroup(g); r.add("v",0); r.add("e",1); r.add("vx",2); r.add("vy",3);
- addToggle トグルボタン
ON OFFの切り替えスイッチ。変数はboolean型。(true / false) - addButton 押しボタン
ボタンを押すと、第1引数の名前の関数を実行する。
上記の例だと
void restart(){ }という関数を実行。 - addRadio 選択スイッチ
いくつかの選択肢から値を選ぶ。変数はint型。
上記の例だと
v, e, vx, vyというラベルの付いたボタンが生成し、そのうちの一つをマウスクリックによって選ぶ。例えばe を選ぶと、変数hist_paramに1が代入される。
例題
- 現在の温度や、各粒子の速度などの表示をON, OFFするトグルボタンを追加してください。