3Dでの三角関数の使い方

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

3Dでの三角関数の使い方

#1

投稿記事 by c_jack » 10年前

3Dのアクションゲームを作っているのですが、
キャラクタの移動方向やカメラの位置を求める際に利用する、
三角関数の使い方が理解できず質問させていただきます。

キャラクタを入力した方向に進める際に

player.px = 移動量 x sinf( ToRadian(y軸の角) );
player.pz = 移動量 x cosf( ToRadian(y軸の角) );

で求めているのですが、
なぜx座標をsinfで,y座標をcosfで求められるのかが理解できずに困っています。

2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。

みなさんよろしくお願いします。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 3Dでの三角関数の使い方

#2

投稿記事 by usao » 10年前

そういうことは,
あなたが用いている座標系や角度の定義次第なので,他人にはわかりません.

例えば,
>y軸の角
というのは何なのか.
これは何らかの方向(playerが移動する方向?)を決めているのだと思いますが
・この値が0のとき,「方向」の(x,y,z)はそれぞれどうなるべきなのか ( (0,0,1) になっているとかいう話かな? )
・この値が1[degree]のときはどうなるのか
等の仕様に依存します.

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

Re: 3Dでの三角関数の使い方

#3

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

そうですね。
> 2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。
それは思い込みですね。

例えば2Dの場合、画面右がXのプラス方向で、画面下がYのプラス方向とは限らないんです。
X方向は右がプラスが多いですが、Y方向は逆がありえます。数学的には、こちらの方が馴染み深いも知れません。
3Dの場合は、Zのプラス方向がOpenGLとDirectXでは逆になります。
なぜこうなのかというと、そう言う風にルールを定めたからとしか言えません。
なので、usaoさんの言われるように利用グラフィックAPIやフレームワークの仕様に依存するのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

c_jack

Re: 3Dでの三角関数の使い方

#4

投稿記事 by c_jack » 10年前

すみません、説明不足でした。
DirectXで学内ライブラリを用いてアクションゲームを製作しています。

PlayerのY軸を回転軸として
上、下キーでY軸の角度に前進、後退
左、右キーでY軸を左回転、右回転

ご指摘から少し考え直したところ、自己解決出来そうなので解決とさせて頂きます。
ありがとうございました。

閉鎖

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