gpt4 book ai didi

java - 使用方向和轴旋转 3D 对象

转载 作者:行者123 更新时间:2023-11-29 03:39:27 25 4
gpt4 key购买 nike

我正在使用 Java3D 显示 3D 模型 (IFC)。我需要使用 IFC 模型给出的 2 个 vector 、一个方向 vector 和一个轴 vector 来旋转对象。

但我不知道如何获得正确的角度。

代码:

// 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°。

有人可以帮助我理解我做错了什么吗?

编辑

Documentation对于放置对象(方向和轴)

结果截图:

  • 橙色:是地板
  • 绿色:是屋顶
  • 红色:是反旋转点
  • 左:侧面透视
  • 右:俯 View
  • 一组 3 个板的方向为 (0.0, 1.0, 0.0)
  • 一组 2 个平板的方向为 (1.0, 0.0, 0.0)
  • 屋顶有方向:(-1.0, 0.0, 0.0)

我做了*2测试来模拟-1.0的180°。正如您在上一个示例中看到的那样,屋顶已正确绘制。

enter image description here

enter image description here

最佳答案

您不需要方向 vector 和轴 vector 之间的角度。由于您的轴 vector 始终为 (0.0, 0.0, 1.0),因此您可以定义一个常量 vector (1.0, 0.0, 0.0),您可以将其与方向 vector 进行比较,即:

// 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);

关于java - 使用方向和轴旋转 3D 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13820312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com