同じようなことをアナログ入力でもやってみました。
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;
}
ゲームパッドを接続してから起動しないとバグります。
自由に使っていただいて構いません。