構造体の演習も終わり、シメのネタということで、共用体と列挙型の説明を行う。 後半は次のグラフィックスの講義の導入として、ディスプレィの構造について説明する。
共用体と列挙型
共用体の説明として、1つの変数に異なる型のデータを覚える場合の、 メモリのムダ対策として以下の例を示す。
配列[0]=整数の123; 配列[1]=実数の0.234; 配列[2]=文字の"ABCD";
を覚えたいならば、
struct A { int num ; double real ; char str[ 8 ] ; } ; struct A data[1000] ; data[0].num = 123 ; data[1].real = 0.234 ; strcpy( data[2].str , "ABCD" ) ;
しかしながら、メモリの2/3はムダになる。 共用体を使えば、要素の記憶場所が同じ場所を使うようになる。
union A { int num ; double real ; char str[ 8 ] ; } ; union A data[ 1000 ] ;
列挙型は、プログラム記述時に、定数に名前をつけるときに使う。 例えば、1週間の曜日に応じた処理をプログラムで書く場合は、
#define SUN 0 #define MON 1 #define TUE 2 : #define SAT 6 int week ; for( week = SUN ; week <= SAT ; week++ ) { if ( week == WED ) { 水曜日の処理 ; } }
と書くけど、define文の羅列を記述するのは面倒なので、列挙型を使う。
enum WEEK { SUN , MON , TUE , ... , SAT } ; enum WEEK week ; for( week = SUN ; week <= SAT ; week++ ) if ( week == WED ) { : }
追記:上記のプログラムは、"week++"が警告を吐くかもしれない。列挙型の具体的な数値が、連続と言う保障はないから…。警告が不気味なら、weekの宣言は "int week ;"にしておくべき。
グラフィックス・ディスプレィの構造
ディスプレイの構造として、CRT,液晶,プラズマなどの構造を説明する。
CRT(Cathode Ray Tube:陰極管,ブラウン管)は、 高電圧による電子放出された電子が(電子銃)、 偏向ヨークで電子の軌道を曲げ、蛍光板にぶつかって光る という構造にて説明する。(画像はWikipediaより引用)
上記の構造で、画面上の任意の場所を指定した色で発色することができるが、1画面を構成するために、昔はベクタースキャン方式で一筆書きのような絵を表示していた。 TVなどはラスタースキャン方式で、表示位置を左上から1行ごとに点で光らせ、1画面を構成する。
さすがにくだらないネタも細かく記載されているWikipedia、個人的にはベクタースキャン方式のStarWars のゲーム機の記載が懐かしく思う。
液晶モニタは、バックライト、偏向板、透明電極、液晶、カラーフィルタから構成される。 液晶は、電圧により光の偏向方向を制御できる液体。 自然光は、様々な波の方向を持った光の集まりだけど、偏向板を通り抜けると1方向だけの波になる。偏向板と液晶でバックライトの光の量を調整し、カラーフィルタで色をつける。
2つの方式の利点欠点として、CRTは薄型にすることが困難で大型化すれば重量も問題となる、液晶は画像の時間的な追従性が悪く、色の再現性も低いといった点を説明する。 時間追従性の性能の違いとして、『ゲーマーはシューティングの僅かな遅れも問題とするので、 ゲーマー御用達は CRT 』といった説明をすると、こういう時だけ寝ることもなく興味を持って聞いている。毎年ながらだけど…