1

Java3D で 3D モデル (IFC) を表示する作業を行っています。IFC モデルによって与えられる方向ベクトルと軸ベクトルの 2 つのベクトルでオブジェクトを回転させる必要があります。

しかし、正しい角度を得る方法がわかりません。

コード:

// Create vectors
Vector3f directionVector = new Vector3f(dx, dy, dz);
Vector3f axisVector = new Vector3f(ax, ay, az);

//Calculate angle
float angle = axisVector.angle(directionVector);

//create AxisAngle4f
AxisAngle4f axisAngle = new AxisAngle4f(axisVector, angle);

axisVector は常に (0.0, 0.0, 1.0) であるため、Z 軸で回転する必要があります。

しかし、角度を計算すると、常に 1.5707964 (90°) のように見えます。

Example 1:
dir:    (-1.0, 0.0, 0.0)
axis:   (0.0, 0.0, 1.0)
angle:  1.5707964 (90.00000250447816)
AA:     (0.0, 0.0, 1.0, 1.5707964)

Example 2:
dir:    (0.0, 1.0, 0.0)
axis:   (0.0, 0.0, 1.0)
angle:  1.5707964 (90.00000250447816)
AA:     (0.0, 0.0, 1.0, 1.5707964)

Example 3:
dir:    (1.0, 0.0, 0.0)
axis:   (0.0, 0.0, 1.0)
angle:  1.5707964 (90.00000250447816)
AA:     (0.0, 0.0, 1.0, 1.5707964)

-1.0 は 180° 反転を意味することをテストで知っています。

私が間違っていることを理解するのを手伝ってくれる人はいますか?

編集

配置オブジェクトのドキュメント(方向と軸)

結果のスクリーンショット:

  • オレンジ:床です
  • 緑:屋根です
  • 赤: デ回転ポイント
  • 左: 横からの視点
  • 右: 上からの視点
  • 3 つのスラブのグループには、方向 (0.0、1.0、0.0) があります。
  • 2 つのスラブのグループには、方向 (1.0、0.0、0.0) があります。
  • 屋根の方向: (-1.0, 0.0, 0.0)

-1.0 の 180° をシミュレートするために *2 テストを行いました。最後の例でわかるように、屋根は正しく描かれています。

ここに画像の説明を入力

ここに画像の説明を入力

4

3 に答える 3

2

方向ベクトルと軸ベクトルの間の角度は必要ありません。軸ベクトルは常に (0.0, 0.0, 1.0) であるため、方向ベクトルを比較できる (1.0, 0.0, 0.0) の定数ベクトルを定義できます。

// Create vectors
Vector3f directionVector = new Vector3f(dx, dy, dz);
Vector3f axisVector = new Vector3f(ax, ay, az);
Vector3f constantBaseVector = new Vector3f(1, 0, 0);

//Calculate angle
float angle = constantBaseVector.angle(directionVector);

//create AxisAngle4f
AxisAngle4f axisAngle = new AxisAngle4f(axisVector, angle);
于 2012-12-12T11:22:42.410 に答える
1

axisVector.angle(directionVector)2 つのベクトルの間の角度を返すと思います。

3 つの例すべてで、ベース軸の単位ベクトルを z 軸の単位ベクトルと比較しています。これらは、定義上、互いに垂直です。何を期待していますか?

私にとって、-x と z の間の角度は 90°、y と z の間の角度は 90°、x と z の間の角度は 90° です。すべてのデータが正しいので、何が得られると期待していますか?

編集:

例 1: (-1, 0, 0) と (0, 0, 1) の間の角度 = 90° 例 2: (0, 1, 0) と (0, 0, 1) の間の角度 = 90° 例 3: (1, 0, 0) と (0, 0, 1) の間の角度 = 90°

これらのベクトルをデカルト座標系で描いてください。明確にする必要があります。また、2 つのベクトル間の角度は、これら 2 つのベクトルが定義する平面上の最小の角度であることに注意してください。

于 2012-12-11T12:27:08.333 に答える