画面上に設置したジョイスティックからの入力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
節穴

画面上に設置したジョイスティックからの入力

#1

投稿記事 by 節穴 » 7年前

画面上に設置したジョイスティックをマウスで掴んで移動できるようにし、

ジョイスティックの現在位置から8方向で判定したいのですが、

どのようなアルゴリズムを用いたらいいでしょうか?

アイディアをいただけると助かります。

画像

ホヅミ
記事: 110
登録日時: 9年前

Re: 画面上に設置したジョイスティックからの入力

#2

投稿記事 by ホヅミ » 7年前

先ほどの記事なのですが、自分の勘違いで見当違いなことを書いた+再編集しようとしたら誤って削除してしまいました。
マウスでのジョイスティックだったのですね^^;申し訳ございません。

1.図での青○をつかんでいないときは青○を中心に固定させます。
2.青○からの移動量をXY座標で持ってきます。
3.原点と青○XYから角度を計算します。
4.角度からジョイスティックの方向を決定させます(簡単なのは360/8?)

こういった考え方でどうでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 画面上に設置したジョイスティックからの入力

#3

投稿記事 by softya(ソフト屋) » 7年前

中心からの相対座標からatan2で角度を出して、角度で方向を判定すれば良いんじゃないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2648
登録日時: 9年前
連絡を取る:

Re: 画面上に設置したジョイスティックからの入力

#4

投稿記事 by ISLe » 7年前

二次元の外積(※)計算で、現在位置が直線の時計回り方向にあるか反時計回り方向にあるか判定できます。
各直線について計算して挟まれているのが求める場所というふうにできるかと思います。

角度を求めるより計算量は少なくなると思いますがコードは複雑になります。


※正しくは二次元の場合外積ではないのですが、適当な名称がないのでこのように表現します。

usao

Re: 画面上に設置したジョイスティックからの入力

#5

投稿記事 by usao » 7年前

・「角度」をわざわざ算出しなくとも,
 単に 中心→現在位置 ベクトルの傾き(Y/X) が各領域の範囲内にあるかから判定すればよいのではないでしょうか.

・あるいは,傾き計算で0での除算の扱いが嫌な場合は,各方向との内積の値でみるとか.
 例えば「右」なのかを調べたければ
 中心→現在位置 ベクトルを単位ベクトル化したもの と 右方向ベクトル(1,0) との内積の値が cos( 360/8[度] ) 以上かどうかを見る.

アバター
みけCAT
記事: 6297
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 画面上に設置したジョイスティックからの入力

#6

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

ISLe さんが書きました:二次元の外積(※)
※正しくは二次元の場合外積ではないのですが、適当な名称がないのでこのように表現します。
二次元のベクトルをz成分が0である三次元のベクトルとみなした時の外積のz成分のことですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

節穴

Re: 画面上に設置したジョイスティックからの入力

#7

投稿記事 by 節穴 » 7年前

ホヅミさん、softyaさん、ISleさん、usaoさん、みけCATさん

ご教示いただきまして、ありがとうございました。

今回は角度から方向を求めるメソッドを採用したいと思います。

ぺこり

コード:

#include <math.h>

// なんやかんやで原点からの相対座標( y, x )を取得

float angle;

angle = atan2 ( y, x ) / PI * 180.0f;	// 座標から角度を求める

if ( -22.5f <= angle && angle <= 0.0f || 0.0f <= angle && angle <= 22.5f )
{
	printf("「上」方向と判定しました。\n");
}

// …以下、45°ごとに8方向を順々に判定していく

閉鎖

“C言語何でも質問掲示板” へ戻る