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 テストを行いました。最後の例でわかるように、屋根は正しく描かれています。