Luaレッスン10「図形数をさらに発展させる」和訳

原典:

http://compasstech.com.au/TNS_Authoring/Scripting/script_tut10.html

レッスン10「図形数をさらに発展させる」

レッスン9では、図形数をうまく視覚化するためのドキュメントを作成しました。今回のレッスンでは、すでに学んだ技術をもっと使って、このドキュメントをさらに発展させます。図形数の各要素の数を増やしたり減らしたりできるようにすることで、表示オプションの選択肢を増やし、ドキュメントの操作を改善し、ドキュメントの機能を強化します。

今回はグリッド線を使わずに円で図形数を表示してみます。どうすればよいでしょうか? サンプル・ファイルでは、スライダーを使って表示を切り替えています。別に難しくはありません(変数の呼び出し、およびif条件の使い方に関する練習になります)。では、グリッドを円に置き換えてみます。 

すでに作成したスクリプトを少し変えるだけで、図形数をグリッド・パターンから円パターンへ変更できます。ひとつの方法は、作成済みのdrawArray函数をコピーしてdrawLineのところをdrawArcに変えることです。実際、グリッド・ラインよりも円を使ったほうがあらゆる点で簡単です。もうひとつの方法は、3種類の図形数のそれぞれを描くfor endループをコピー・アンド・ペーストしてから、このレッスンのコード例に示したように、いくつかのdrawLineコマンドを別のコマンドに置き換えることです。

k、mの各ループがグリッド・ラインのときよりも1回少ないことに気づきましたか? 理由はわかりますか? コードをよく見て理解に努めてください。実行してからいろいろ変更を加え、どうなるのかを確かめてください。

見た目が派手になるので、drawArcよりもfillArcのほうがお勧めです。

最終的には、drawCircles(num, x, y, xval, yval, gc)のようなコマンド行をon.paint函数に追加します。

 

--drawCircles函数を作る

function drawCircles(number, x, y, length, height, gc)

     types = (var.recall("type") or 1)

     if types == 1 then --正方数の場合

          for k = 0, number - 1 do

               for m = 0, number - 1 do

                    gc:fillArc(x + length * m, y + height *k,

                               length        , height,

                               0, 360)

               end

          end

     elseif types == 2 then --矩形数の場合

          for k = 0, number - 1 do

               for m = 0, number do

                    gc:fillArc(x + length * m, y + height * k,

                                   length    , height,

                                   0, 360)

               end

          end

     else --三角数の場合

          for k = 0, number - 1 do

               for m = k, number - 1 do

                    gc:fillArc(x + length * m, y + height * k,

                               length        , height,

                               0, 360)

               end

          end

     end

end

 

上記のようにすれば、drawArrayは置き換えることもできるし、drawArrayを追加すれば、グリッドの中に円を配置することもできます。

------------------------------------------------------------------

(訳註)今回の実行例

f:id:ti-nspire:20141017135007g:plain