ゲームパッドのアナログ入力を補正

みんなが作った便利な関数やサンプルを共有するコミュニティです。
[url]http://www.activebasic.com/forum/viewforum.php?f=2]ActiveBasicの「実践コードモジュール」[/url]的な感じでやりましょう。
フォーラム(掲示板)ルール
・投稿するコードはできるだけ一つ、もしくは一つの関数を補助する複数の関数の形式にするか、
それだけをコンパイルして動くソースコード一式の形にしてください。
記事には説明だけを書き、コードは添付ファイルにしてもかまいません。
・使い方などの説明も書いてください。
環境に依存するコードの場合は、対象の環境も書いてください。
・使用条件(ライセンスなど)も書いていただけるとありがたいです。
・C言語、もしくはC++推奨ですが、他の言語でもかまいません。
・コードは正しくcodeタグで囲みましょう。
・一つのスレッドで一つのサンプルが基本です。
関連するサンプルの場合はまとめてもかまいません。
・投稿したサンプルを修正する場合には、スレッドの返信の形で投稿してください。
(新しいスレッドにしないでください。記事の編集でもかまいません)
返信
アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

ゲームパッドのアナログ入力を補正

#1

投稿記事 by みけCAT » 13年前

龍神録プログラミングの館に、斜め移動のときは√2で移動量を割るというテクニックがあります。
同じようなことをアナログ入力でもやってみました。
XとYそれぞれ-1.0から1.0の範囲の四角形の入力を、半径1の円の範囲に補正します。
(x,y)に補正前の入力を渡します。
(hx,hy)に補正後の入力が入ります。

コード:

#define abs2(x) ((x)>=0?(x):(-(x)))

void analoghosei(double* hx,double* hy,double x,double y) {
	double length;
	double max;
	if(x==0 && y==0) {
		*hx=0;
		*hy=0;
		return;
	}
	if(abs2(x)>=abs2(y))max=y/x; else max=x/y;
	length=sqrt(1+max*max);
	*hx=x/length;
	*hy=y/length;
}
Windowsで動くサンプルを添付します。
ゲームパッドを接続してから起動しないとバグります。
自由に使っていただいて構いません。
添付ファイル
gpadanalog.zip
サンプルです。
(18.21 KiB) ダウンロード数: 232 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“サンプルを共有するコミュニティ” へ戻る