ページ 11

回転の処理

Posted: 2011年5月09日(月) 20:03
by dic
DxLibを使って回転の処理をしようとしています

コード:

	// 適当な値を Vect1 に代入
	Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;

	// Y軸回転行列を Matrix に代入( 45度回転する行列 )
	Matrix = MGetRotY( PHI_F / 4.0f ) ;

	// Vect1 を Matrix を使用して変換した値を Vect2 に代入
	Vect2 = VTransform( Vect1, Matrix ) ;
上のサンプルで、y軸に対して回転する方法はわかりました
そして、基本軸以外を軸として回転したい場合が出てきたので MGetRotAxis関数を使って
軸を変動にして、回転をおこなおうとしているところです

コード:

	// 適当な値を Vect1 に代入
	Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;

	// MGetRotAxis を使用して敢えてY軸回転行列を Matrix に代入( 45度回転する行列 )
	Matrix = MGetRotAxis( VGet( 0.0f, 1.0f, 0.0f ), PHI_F / 4.0f ) ;

	// Vect1 を Matrix を使用して変換した値を Vect2 に代入
	Vect2 = VTransform( Vect1, Matrix ) ;
そこで、上のサンプルがあるのですが、MGetRotAxis( VGet( x, y, z ), PHI_F / 4.0f );
のx,y,zの部分をいじるのはわかっていますが、どのような値にすればいいのかがわかりません

画像のように、ちょっと斜めに傾いた状態で、傾いたy軸を中心に回転をさせたいのです
この場合、x,y,zの値はどのような値になるのでしょうか?

Re: 回転の処理

Posted: 2011年5月09日(月) 20:19
by h2so5
画像だと、三角形の中心を通っている矢印の直線のベクトルを指定すればいいので
x = -1.0,y = 1.0,z = 0.0
でいいと思います。

Re: 回転の処理

Posted: 2011年5月09日(月) 21:28
by GRAM
3次元における回転というものをどうとらえるか?という質問に置き換えられるでしょう。
3次元では二次元と違い回転軸というものが一意に定められません。
結局のところ、これを回避するためにたとえばx,y,z軸それぞれで何度回転させるのか?
もしくはもっと直観的に、回転軸はどっちをむいていて何度回転させるのか?
といったものを取ることになります。

この場合は後者の手法です。回転軸の方向ベクトルを指定してください、
ただし、「方向ベクトル」です。指定した方向の矢の先から見たとき、どっち周りになるかで決まります
方向を逆向きに指定してしまうと回転方向も逆になるためご注意を。
まぁこれは、確かめれば一発なわけですが・・・

Re: 回転の処理

Posted: 2011年5月10日(火) 11:33
by dic
x, y, z は方向ベクトルとのことで
x = 1.0 y = 1.0 z = 0.0
だということですが、この画像の場合のように
0.0 ~ 1.0 の微妙な角度を指定する方法として
x = sin(r) y = sin(r+90) z =0.0
とやってみたのですが、うまくいきません
0.0 - 1.0 の間の小数点を方向ベクトルにしようすることはできるのでしょうか?
もしくは なんらか勘違いしてます?

Re: 回転の処理

Posted: 2011年5月10日(火) 18:51
by dic
計算方法を変更するので、トピックをとりさげ・・・れないんでしたね
もう少しわかりやすく説明できるほど、計算方法を考えようと思います
結構時間かかりそうなので、解決を押させてもらいます