実質的に人の認知すべき状態と内部処理で一致しな
ければならない処理は存在しますが、その状態の処理
は人の認知と同じかと言うとそうでもない場合があり
ます。
基本的に、処理には
【 変数として存在し、人が見てそれと一致してなく
てはならない物 】
と【 そうではない処理 】が存在します。例えば、LED
が7つ揃った文字盤で数字を表示する場合、
■ LEDの表示処理
ブーリアン型(0と1)
■ 処理する対象物の数
7つ
となります。とりあえず、その場合ですが、人の目から見た
場合に
【 10新数表記に見える事 】
と言う条件が付くと
■ 入力値
0~9
■ メモリーに格納する数値
0~9
と言う条件が付きます。この条件から、命題によって
■ メモリーに格納される数値と表示は同じ
とも言える訳ですが、この三者の関係性は担保される必
要があります。
しかし、処理を考える場合にその店頭をどう考えたら
いいだろうか?というので複数の思考方法が出てきます。
とりあえず、
な感じのものがあったとして、
との表示が可能な訳ですが、この状態で考えると構造的には
【 その値がメモリーに格納された場合、その対象の
LEGを発光させる 】
と言う条件で片付くので、それぞれの数値に、パターンを記録
させておき、処理する方法をとれば大丈夫という事になります。
配線がつながってる場合だと考え方が少し違うので、プログ
ラムとして考えた場合、
■ 入力用の数値を格納する変数
を用意して、0-9までの数値を入力できるようにします。
ただ、これだけだと数値を入力した処理だけなので、これに
対して
【 各LEDに番号をつけ、それに対しての信号を制御する 】
と考えると、処理の方法が見えてきます。とりあえず、
【 2 】
【 1 】 【 3 】
【 4 】
【 5 】 【 6 】
【 7 】
と言う風に考えた場合、
1:3,6
2:2,3,4,5,7
3:2,3,4,6,7
4:1,3,4,6
5:1,2,4,6,7
6:1,2,4,5,6,7
7:2,3,6
8:1,2,3,4,5,6,7
9:1,2,3,4,6,7
0:1,2,3,4,6,7
と言う条件になります。つまり。この条件に真のパルス
を送信し、送信しない場合には、反応なしにしておけば、
上記の条件が成立します。
では、もう少し考え方を変えてみて、発行体側で判断
してみると
1:456890
(1,2,3以外)
2:23567890
(1,4以外)
3:12347890
(5以外)
4:23456890
(2,7以外)
5:268
(上記の条件)
6:134567890
(2以外)
7:2356890
(1,4以外)
となります。つまり、メモリー格納の数値基準である
場合、
【 入力された変数に対して、8つのセンサーの
複数に対し処理を行うプログラム 】
になるので、処理系が複数発生します。
つまり、変数をi、LEDをa1~a7と仮定すると、
IF i=8
a1=True
a2=True
a4=True
a6=True
のような処理です。それを1~8まで書く感じです。これだと
フツーに誰でも思いつく方法ですよね。
では、LED側を主体に考えてみると、
if i<>5
a3=True
if i<>2
a6=True
のような条件です。複数ある場合は、
(8~0まで)
IF i=8
a1=True
a2=True
a4=True
a6=True
IF i=9
a1=True
a2=True
a4=True
a6=True
IF i=0
a1=True
a2=True
a4=Fauls
a6=True
【 LEDを基準にした場合、 】
if i<>1 or i<>2 or i<>3
a1=Ture
if i<>1 or i<>4
a2=Ture
if i<>5
a3=Ture
if i<>2 or i<>7
a4=Ture
if i=2 or i=6 or i=8
a5=Ture
if i<>2
a6=Ture
if i<>1 or i<>4
a7=Ture
のように圧倒的に簡素になります。 仮に
var i=0;
var a1=Fauls;
var a2=Fauls;
こうした処理がもう少し複雑な事をしてるので、この
辺りの処理が複合的に鳴っただけで無理が来る場合、効
率化というものが解らない場合があるわけですが、基本
的にどういう条件で何が動くのかを考えるのがプログラ
ミングで身につく能力なので、そうした思考も養われて
いくように思います。
ちなみに、BGEだとこの処理はロジックエディタで処
理する事になるのですが、前者の変数の値を基準にした
場合、一つのセンサー(0-9までの9つのセンサーが存
在する)でANDにつないで、1-7のオブジェクトの色を
変える処理を入れる事になるのですが、後者の場合、
【 それぞれのオブジェクトで、変数参照を行い
数値の条件以外だと色を変える処理をする 】
と言うものになります。つまり、センサー入力が複数
でアクチュエイターは一つのみになります。
つまり、先ほどのa1=Trueのような処理と言うの
は、アクチュエイターの処理ですから、条件式の数
値の種類が、センサーの数になります。そうなると、
【 複数のセンサーをorで繋いで、一つのアクチュ
エイターで処理する構造 】
になります。つまり、一つのセンサーで7つのアク
チュエイターを処理するのと比較すれば簡素な仕組み
にできます。
処理をする場合に、【 何がどう動くのか? 】
というのを判断して物を考える事になるのですが、今
回の事例のように
【 確実に決まった法則性(今回のは、異なる条件に
なりようがないですが。)がある場合だと法則性
を利用して、処理方法を考える 】
と言う手法もあります。まぁ、打算的に法則性を口にす
る人間と言う尾は、複雑系辺りに法則性があると言う野
生に返る準備をしてるような固有種ですから相手にする
とロクなことにならないのですが、簡素なモノで見ると、
パターン解析と、そこから考えられる処理方法の最適化
は効果があるのが解ると思います。w
これが8x8のLEDのグリッドになると、表示できるも
のが増えてきますが、これも法則性がある場合、8x8の
64のドットのそれで処理をする方法も扱えますが、
【 16進数で1行ずつその01の数値を指定した
モノを用意してそれを、個別のLEDの値と
して読ませたほうが効率的 】
なので、処理が複雑になると前述の方法だと無理が来る
ので、異なるアプローチを用いる事になります。当然、
これがピクセル数の多い画像とかになると、全く異な
る処理をすることになります。