メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.555) ヒステリシス3 ファジィ  2005/04/22


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第555回 ヒステリシス3 ファジィ
 発行    2005年4月22日(金曜日)
 発行数   約2600

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

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

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

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

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

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

 ふと、ひらめきました。

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

 というわけでプリウスを探していただいたところ、70万円程度
で手に入るということでした。

 定価が215万円(21世紀Go)なので、その3分の1ですね。

{magclick}
/*========================================================*/
 今回のお題  << ヒステリシス3 ファジィ >>
/*========================================================*/

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

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

 たとえば、ボタンを押してロボットが加速するとき、いきなりは
動きません。

 推進力が上昇するまでに、間があります。

 逆に、ブレーキを掛けても、すぐには推進力が下がりません。

 ファジィ機能、というやつです。

 自然の法則にしたがっているわけです。

 機械的よりも自然的に動いたほうが、人間に優しいのです。

 グラフで表すと、このようになります。

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

 横軸がボタンを押している長さ、

 縦軸が推進力の値という感じでしょうか。

 ボタンを押してもすぐには加速せず、

 ボタンを離してもすぐには減速しない、という感じです。

 これまで紹介してきた、コンバートや状態遷移のグラフと、
似ています。

 やっぱり、関数で書くことができます。

int hys2( old, d, x1dn, x2dn, x1up, x2up, y1, y2 )
{
    int dn = con2( d, x1dn, x2dn, y1, y2 );
    int up = con2( d, x1up, x2up, y1, y2 );
    return mid( old, dn, up );
}

 という感じです。意外に簡単です。(intは省略しました。)

 というのも、先に紹介したコンバートを応用することで、
ヒステリシスが表現できるためです。

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

 最後の mid は、中央値を取っています。

 というのも、

「斜面を上がっている最中にxが減少したら、どないなんねん?」

 という問題があるためです。

 中央値を取ると、横ばいに動きます。一番簡単な解決方法です。

 中央値を取る処理は、こんな感じでしょうか。

int mid( int a, int b, int c )
{
    if( a < b && b < c ) return b;
    if( a < c && c < b ) return c;
    return a;
}

 少し問題がある(判定がダブっている)ソースですが、簡単に
かくならこうでしょう。

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

 逆に、すぐに動いたりするのは、ロボットゲームとしていまいち
です。質量感が感じられなくなります。

 人間の5感というのはすごいもので、感じたものは直ちに処理
されます。

 まれに、間や効果音やエフェクトが不要だと主張する人がいます
が、少し早計です。

 たとえば攻殻で、隠密行動を取る少佐達がなぜ足音を出して
走るのか、というと、

 音を聞いた人間は、無意識のうちに音の材質を解析しているため
ユーザが臨場感を感じ取るのです。

 何事もファジィが大事です。

 ところでファジィってどういう意味ですか?

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

 今後の予定表です。

済 CImageサンプルの説明(していなかった?)
済 ヒステリシス1 ヒステリシスとは座標変換
済 ヒステリシス2 ヒステリシスとは状態遷移
済 ヒステリシス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月25日(月曜日)に、第556回をお送りします。
 お題は「ヒステリシス4 テンプレート版」

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

 お楽しみに!

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

{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

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