メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.554) ヒステリシス2 状態遷移  2005/04/20


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第554回 ヒステリシス2 状態遷移
 発行    2005年4月20日(水曜日)
 発行数   約2600

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。
・セキュリティ突破のため、暗号化された単語があります。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 先日、車のディーラーさんよりお電話がありました。

 どうも、車検が切れるので車を買い換えないか、ということで
あるらしいです。

 前と同じように、動く程度の軽自動車を30万程度で購入しよう
かと、考えましたが、

 ふと、ひらめきました。

 「プリウスありますか?」

{magclick}
/*========================================================*/
 今回のお題  << ヒステリシス2 状態遷移 >>
/*========================================================*/

 ゲームプログラムには欠かせないアルゴリズムの代表格である、
ヒステリシスについて説明します。

 ヒステリシスというと難しい気がするかもしれませんが、しかし
意外に、知らず知らずのうちに使ってしまっているほどの、
ポピュラーなアルゴリズムです。

 たとえば、戦闘シミュレーションゲームの思考ルーチンにおいて
母艦に搭載されて補給を受けている戦闘機について、

「出撃不可」
「出撃可能」

 の2つの状態があるとします。

 それぞれ、

「耐久が25パーセント以下ならば出撃不可とする」
「耐久が50パーセント以上ならば出撃可能とする」

 という条件があるとします。(きびしいなぁ)

 これをプログラムで表現すると、

int hp; // 耐久
int mhp; // 最大耐久

int state; // 出撃不可 or 出撃可能

if( hp <= mhp / 4 ) state = 出撃不可;
else if( hp >= mhp / 2 ) state = 出撃可能;

 という感じになります。

 これを図で表すと、こんな感じになります。

http://ayusya.hp.infoseek.co.jp/Image/Hys_vhys2.jpg

 x1 が25パーセント、x2が50パーセント、

 y1 が出撃不可、y2 が出撃可能、

 という値に対応する感じです。

 前回のコンバートに良く似ています。

 同じように、関数として処理することが可能です。

int vhys2( int old, int d, int x1, int x2, int y1, int y2 )
{
    if( d <= x1 ) return y1;
    if( d >= x2 ) return y2;
    return old;
}

 前回のコンバートと違うのは、斜めのグラフがないために複雑な
計算がないことと、条件に見合わない場合に前回値を返す、という
点です。

 特に、前回の値が今回の結果に影響を与えるという点が重要
です。

 同じ「耐久40パーセント」であっても、グラフを上ってきた
ときと下ってきたときとでは、状態が異なるのです。

 このように前回の計算結果に影響を受ける処理を、

★ヒステリシス

 といいます。

 状態遷移は、遷移条件を満たさない場合に前回の状態を保持する
ので、ヒステリシスで表現することができます。

 特に、今回は状態が2つだけですが、これが何十にもなる複雑
な状態遷移ともなると、手書きでは限界がありますので、配列に
値を並べておいて、関数で一括処理を行うと良い感じです。

/*========================================================*/

 基本的に「現象」はすべてヒステリシスで表現できます。

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 今後の予定表です。

済 CImageサンプルの説明(していなかった?)
済 ヒステリシス1 ヒステリシスとは座標変換
済 ヒステリシス2 ヒステリシスとは状態遷移
第555回 ヒステリシス3 ヒステリシスとはファジィ
第556回 ヒステリシス4 テンプレートで作成しよう
第557回 ヒステリシス5 クラスにまとめよう
第558回 テンプレート木構造1 TreeMasterをテンプレートに
第559回 テンプレート木構造2 クラス設計
第560回 テンプレート木構造3 追加、検索
第561回 テンプレート木構造4 ソート、left検索
第562回 テンプレート木構造5 マクロ定義
第563回 ガベージコレクタ1 テンプレートの隠蔽
第564回 ガベージコレクタ2 ユーザ設計
第565回 ガベージコレクタ3 クラス設計
第566回 ガベージコレクタ4 登録、削除処理
第567回 ガベージコレクタ5 Attach、Detachの処理
第568回 キャラエディッタ1 ソフトの説明

 あくまでも予定です。

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は4月22日(金曜日)に、第555回をお送りします。
 お題は「ヒステリシス3 ファジィ」

 ゲームプログラムに欠かせないアルゴリズムの代表格である
(らしい)、ヒステリシスアルゴリズムについて特集します。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されていますか?
 このメールマガジンの内容に文面の引用はありませんか?
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容の、転用、流用、宣伝、リンク、
まだまだ戦える!。。あっ、やられちゃった なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

ホームページ::あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

まぐまぐ::アイディー
0000020674

まぐまぐ::登録と解除
http://www.mag2.com/m/0000020674.htm

まぐまぐ::バックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

めーらっくす::アイディー
MM3E1AEE285AB4F

めーらっくす::登録と解除
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F 

めーらっくす::バックナンバー★最近のものならこちらが便利★
http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。