メイン コーダーズルーム【スクリプト系】
アフィン変換で指定した角度へ回転させる | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| ゲスト | Åê¹ÆNo.9306 投稿日時: 2004-7-21 2:31 |
|
アフィン変換で指定した角度へ回転させる こんにちわ。
タイトルの通り、アフィン変換を使って、指定角へ回転させるようとしています。 http://www.gumob.com/3d/3d.html 左側のテキストフィールドに表示される数字ですが、それぞれ pMode 現在のモード(switch文で切り替えています) pX,pY,pZ 現在のXYZ座標 degX,degY,degZ 各XYZ軸に対する角度 tDegX,tDegY,tDegZ ターゲット角度 右下にある四角いボタンをクリックすると、その角度へ回転するようにしています。 が、実際にクリックすると、挙動が怪しい・・・ かれこれ2?3日この状態で、一向に抜け出せません・・・ degX,degY,degZの値は、正常にターゲット角へ収束しているのですが。 全体は、 ターゲット角を指定し、 setTargetDegree(引数x,引数y,引数z) 現在の角度をターゲット角に近ける setAngle(); ラジアン角に変換し degreeToRadian() アフィン変換を行い rotateMe() 更に透視変換を行い persTransform(); 回転各がターゲット角と同じになったらデフォルトモードに(何もしないモード) setRotateModeToDefault (); といった流れになっています。 どなたか原因がお分かりになる方いましたら、ご教授お願いします・・・ 最終的には、テキストが三次元空間に浮いていて、クリックすると、そのテキストが全面に出てきて、他は背面に移動するような物?を考えています。 以下ソースです。長いかな・・・ main.as Point3d.as |
|
| 野中文雄 | Åê¹ÆNo.9309 投稿日時: 2004-7-21 6:43 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: アフィン変換で指定した角度へ回転させる 「意図する」動作が明記されていませんので、どの「挙動が怪しい」のかはっきりとはわかりかねます。
ただ、「正常にターゲット角へ収束している」ということですので、途中経過のイージングの動作を問題にされているものと「推測」します。引用: futchさんは書きました: 長いですね。 角度は基本的にラジアン値で扱うようにした方が、すっきりとするでしょう。必要があれば、入力と表示のみ度数に変換します。引用: 以下ソースです。長いかな・・・ イージングを考えるうえで気になるのは、角度を0から360の範囲に切揃えていることです。そうすると、350度から20 問題を絞込むためにも、たとえばZ軸を中心としたXY座標の回転のみを試されてはいかがでしょうか? |
| ゲスト | Åê¹ÆNo.9351 投稿日時: 2004-7-22 23:20 |
|
Re: アフィン変換で指定した角度へ回転させる レスありがとうございます。
そうです。"挙動不審"の部分は、イージングの動作です。 説明不足ですね・・・申し訳ありません。 引用: ただ、「正常にターゲット角へ収束している」ということですので、途中経過のイージングの動作を問題にされているものと「推測」します。 この判別式はおかしいですね。 ひとまず、この部分は取り除きました。 引用: イージングを考えるうえで気になるのは、角度を0から360の範囲に切揃えていることです。そうすると、350度から10度の時計回りの回転は、表現できないことになります。ちなみに、以下のスクリプトでdegZ == 0または360のときの処理が、ダブっているように思われます(値は変化するようですから、無限ループにはならないでしょうが)。 併せて、角度のイージングはラジアン単位の計算に変更しました。 上記の関数から求まる回転角(radX,radY,radZ)から、アフィン変換を用いて各座標(pX,pY,pZ)を求めているのですが トレースしてみると、角度(radX)のイージングは綺麗に収束していますが、座標(pX)は正負バラバラの値が出力されてしまいます。 (実際のアニメーションも、スムーズに回転するのではなく、チカチカと点滅したようになってしまいます。) ということは、rotateMe関数(アフィン変換の式)のどこかがおかしい。という事になりますが、おかしな箇所は見つけられませんでした。 思いっきり見落としがあるかもしれませんが・・・ 引き続き問題を絞込み作業を続けたいと思いますが、何かお気付きの点がありましたら、ご教授願います。 何度もすいません・・・ |
|
| ゲスト | Åê¹ÆNo.9358 投稿日時: 2004-7-23 11:42 |
|
Re: アフィン変換で指定した角度へ回転させる 自己レスです。
原因が何となく分かりました。 アフィン変換を勘違いしていた様です。 代入した角度(回転中の現在の角度)から求まる値(座標)は、「三次元空間上の絶対的?な値」であるものと思っていました。 求まるのは「変換前に対する変換後の相対的な値」ですね。(汗 よってトレース結果の値がバラバラ。というのも納得です。 (うまく言えないですが・・・自分で書いていて良く分かりません) setAngle関数を書き換えればうまくいきそうなので、トライしてみます。 |
|
| 野中文雄 | Åê¹ÆNo.9388 投稿日時: 2004-7-25 9:32 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: アフィン変換で指定した角度へ回転させる 「350度から20度の時計回りの回転」でした。
訂正ついでに、補足しておきます。この部分が問題と関わったかどうかはわかりませんが。以下のスクリプトを、リンケージ識別子"mySymbol"のMovieClipシンボル第1フレームアクションに設定します。インスタンスを7回クリックして360度を超えると、回転が止まらなくなります。問題を解消するには、コメントアウト部分を入替えます。 引用: futchさんは書きました: |
| ゲスト | Åê¹ÆNo.9423 投稿日時: 2004-7-26 14:41 |
|
Re: アフィン変換で指定した角度へ回転させる レスありがとうございます。
なるほど。 無限ループにハマっているのですね。 こちらの剰余演算を用いて角度を360度以内に制限しているのは分かるのですが、入れ子になっているのは何故でしょうか? こうした場合でも動くと思うのですが、上の表記とどのように異なるのでしょう?? |
|
| ゲスト | Åê¹ÆNo.9427 投稿日時: 2004-7-26 15:17 |
|
Re: アフィン変換で指定した角度へ回転させる 回転に関してはスムーズに表示されるようになりました。
http://www.gumob.com/3d/3d_2.html (source code) トレース結果の値がバラバラという問題は、 とする事で、1フレーム前と現フレームの角度の差分を取ってから、アフィン変換の関数に代入する事で対応させました。 出力部分にrealRadが追加されてますが、モニタ用にフレーム毎のMath.atan2で各軸に対する角度を求めています。 realRadXYZとradXYZの値を比べてみると、違う値が出力されています・・・ 結果的に、ターゲットとは異なる位置に、MCが移動してしまいます。 ひとまず、ターゲット角の求め方を、回転させたい方向のベクトルを求めてから、角度に変換するようにしてみましたが、意味がなかった様です・・・(汗 |
|
| 野中文雄 | Åê¹ÆNo.9443 投稿日時: 2004-7-26 19:47 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: アフィン変換で指定した角度へ回転させる 問題は「無限ループ」というより、値が360で「非連続」となることです。
引用: futchさんは書きました: -540を0≦θ<360の値180に変換するためです。 引用: こちらの剰余演算を用いて角度を360度以内に制限しているのは分かるのですが、入れ子になっているのは何故でしょうか? |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン


CS5.5
.6.8
Vista Home Premium (SP1)
ただ、「正常にターゲット角へ収束している」ということですので、途中経過のイージングの動作を問題にされているものと「推測」します。
角度は基本的にラジアン値で扱うようにした方が、すっきりとするでしょう。必要があれば、入力と表示のみ度数に変換します。

