前回、TI-Nspire CX CASでLuaスクリプトを作成し実行させる手順を説明しました。
前回のサンプルでは、リサージュの周波数はプログラム固定でした。
今回は、UIを通じて変更する方法を紹介します。
[doc]→[5:Page Layout]→[1:Custom Split]でPageレイアウトを追加します。
追加したPageレイアウトを適当なサイズにします。
追加したレイアウトに[3:Add Geometry]で図形のページを追加します。
[menu]→[1:Actions]→[A:Insert Slider]でスライダーを追加します。
Slider Settingsのダイアログが表示されますので、Variableに f1 と入力します。
x方向を狭くするために、Style をVerticalにします。
スライダーが選択された状態で、[ctrl],[menu]を押して、スライダーのプロパティを表示させ、[3:Minimize]を選択します。(上のダイアログでも設定できます。)
同様に、ph1, f2のスライダーを追加します。
Luaスクリプトを修正します。
同一のProblem内では変数はグローバル変数になりますので、スライダーで設定した値はLuaスクリプトから参照することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
ws = 312/2 hs = 210/2 ofx = ws -40 ofy = hs x0 = ws y0 = hs local fr1 = var.recall("f1") or 1 local fr2 = var.recall("f2") or 1 local ph1 = var.recall("ph1") or 1 local pi = math.pi function lissajous(ft, fr1, fr2, ph1) x = 100 * math.sin(fr1 * ft + pi*2*ph1/360.0) y = 100 * math.sin(fr2 * ft) return x + ofx, ofy - y end function on.paint(gc) local lf = 0 fr1 = var.recall("f1") or 1 fr2 = var.recall("f2") or 1 ph1 = var.recall("ph1") or 0 for t = 0, pi * 4, 0.001 do x, y = lissajous(t, fr1, fr2, ph1) if lf == 0 then lf = 1 else gc:drawLine(x0, y0, x, y) end x0 = x y0 = y end end |
スライダーf1, ph1, f2の値を取得し、fr1, ph1, fr2に代入しています。
25 26 27 |
fr1 = var.recall("f1") or 1 fr2 = var.recall("f2") or 1 ph1 = var.recall("ph1") or 0 |
TI-Nspireの数学関数を利用するには、以下のようにします。利用できる関数はマニュアルに記載されています。
1 2 |
math.sin() math.pi |