うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

リストの全要素を単一のオブジェクトとして生成する方法

モデル課題

(1)4点A(1,1),B(8,1),C(8,8),D(1,8)に対して、四角形ABCDの内部および周に含まれるすべての格子点を、リストオブジェクトとして作成しなさい。

f:id:usiblog:20180410002512g:plain

(2)(1)で作成したリストオブジェクトの1番目の要素である点を、単一の点オブジェクトとして生成しなさい。点の名前は「P1」としなさい。

f:id:usiblog:20180410002723p:plain

(3)(1)で作成したリストオブジェクトの要素であるすべての点を、単一の点オブジェクトとして生成しなさい。点の名前は「P1」、「P2」、...、「P64」としなさい。

f:id:usiblog:20180410002953p:plain

 

解答例

(1)

以下のコマンドを入力バーに入力することで作成できます。

Flatten[Sequence[Sequence[(s, t), s, 1, 8], t, 1, 8]]

 

(2)

(1)で作成したリストオブジェクトの名前が、list1であるとします。

目的のオブジェクトは、以下のコマンドを入力バーに入力することで作成できます。

P1 = Element[list1,1]

 

(3)

目的のオブジェクトは、以下のコマンドを入力バーに入力することで作成できます。

Execute[Sequence["P"+t+"=Element[list1,"+t+"]",t,1,Length[list1]]]

実行したいテキスト"Pt=Element[list1,t]"のリストを、tが1からLength[list1]になるまで作成し、そのリストを実行するコマンド「Execute」を用いて、点を作成しています。

 

解説

Execute[Sequence["<共通名>"+t+"=Element[<リスト>,"+t+"]",t,1,Length[<リスト>]]]

上記コマンドは、リストの全要素を単一のオブジェクトとして返し、各オブジェクトの名前を「共通名」+通し番号とするための公式として利用できます。

 

f:id:usiblog:20180410004533p:plain

例えば、上図の9つの正方形のリストは、

list1 = Flatten[Sequence[Sequence[polygon[(s,t),(s,t+1),(s+1,t+1),(s+1,t)],s,0,2],t,0,2]]

として作成することができますが、上述の公式にあてはめて、

Execute[Sequence["poly"+t+"=Element[list1,"+t+"]",t,1,Length[list1]]]

を実行することによって、リストの全要素の正方形を、単一のオブジェクト(poly1〜poly9)として作成することができます。

f:id:usiblog:20180410004707p:plain

 

リストの要素を単一のオブジェクトとして生成することのメリット

リストオブジェクトは、それ自身で単一のオブジェクトであり、要素ごとに色やハンドラの設定を分けることができません。

上記の正方形の例で言うと、list1の色を変えると、list1の全要素の色がその色に変わるだけで、要素ごとに色を分けることは、(list1だけでは)できません。

f:id:usiblog:20180410005311g:plain

しかし、リストの要素を単一のオブジェクトとして生成すれば、それぞれのオブジェクトに個別の設定を施すことができます。

f:id:usiblog:20180410005514g:plain

 

関連記事

usidesu.hatenablog.com