ホーム » スタッフ » 斉藤徹 » 共用体とグラフィックス基礎

2009年11月
« 10月   12月 »
1234567
891011121314
15161718192021
22232425262728
2930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

共用体とグラフィックス基礎

構造体の演習も終わり、シメのネタということで、共用体と列挙型の説明を行う。 後半は次のグラフィックスの講義の導入として、ディスプレィの構造について説明する。

共用体と列挙型

共用体の説明として、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 』といった説明をすると、こういう時だけ寝ることもなく興味を持って聞いている。毎年ながらだけど…