[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