回転の処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

回転の処理

#1

投稿記事 by dic » 14年前

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の値はどのような値になるのでしょうか?
添付ファイル
aaa.JPG
aaa.JPG (16.88 KiB) 閲覧数: 2482 回

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 回転の処理

#2

投稿記事 by h2so5 » 14年前

画像だと、三角形の中心を通っている矢印の直線のベクトルを指定すればいいので
x = -1.0,y = 1.0,z = 0.0
でいいと思います。

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: 回転の処理

#3

投稿記事 by GRAM » 14年前

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

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

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: 回転の処理

#4

投稿記事 by dic » 14年前

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 の間の小数点を方向ベクトルにしようすることはできるのでしょうか?
もしくは なんらか勘違いしてます?

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: 回転の処理

#5

投稿記事 by dic » 14年前

計算方法を変更するので、トピックをとりさげ・・・れないんでしたね
もう少しわかりやすく説明できるほど、計算方法を考えようと思います
結構時間かかりそうなので、解決を押させてもらいます

閉鎖

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