[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00776] Re: [Q] set/get rotation
平鍋@esmです.
On Tue, 03 Aug 1999 15:30:19 -0400,
Tomohiro Koike <tk331@xxxxxxxxxx> said:
> 小池です。
> rotationのget/setで困っています。
> オブジェクトの回転を取得して取っておき、後でそれを
> 戻してやろうと思い、やってみたところ、どうもうまく
> 行きません。値が変わってしまうようなのです。
> ...(中略)
> どうも、感触としてはQuat4dの第1項が(xの値が)0.9を超えて
> いる場合に良く起こるような気がします。
> ということから考えると、x,y,zのいずれかが1に近づいた場合、
> 計算によって丸め誤差が増幅されてしまうのが原因かな、と
> 思うのですが、不勉強でquaternionがどう扱われるものなのか
> 知らないのです(実は調べようとしてみたのですが、どうにも
> 私の手には余るようで、あきらめてしまいました)。
もし丸めだとすると,Transform3D#setAutonormalize() してみて
はどうでしょうか.
取得後の Quat4d を normalize() メソッドで正規化しておくのも
手かも.
# いずれにせよ,私には Transform3D -> Quat4d のバグに見えます.
> どなたか、原因がお分かりの方、教えてくださると嬉しいです。
> また、私としては特にquaternionによる表現にはこだわらない
> ので、回転の情報を取得・再設定する方法が他にないかと
> 思っています(たぶんTransform3Dの行列を丸ごと使用すれば
> いいんだとは思うのですが、できれば回転だけを取りたいと
> 思っています)。どなたかいい手をご存知の方、教えて
> いただけないでしょうか。
色んな取得形態があります.
1. Transform3D から Matrix4d を取り,getRotation する.-> Matrix3d or Quat4d
2. Transform3D から getRotationScale -> Matrix3d
3. Transform3D から Quat4d
4. Transform3D から AxisAngle4d
私は,小池さんの選んだ方法(3)がもっとも安定しているように思
えます.
---
Eiwa System Management, Inc. http://www.esm.co.jp/
Kenji Hiranabe E-Mail: hiranabe@xxxxxxxxxx