【问题标题】:Finding absolute coordinates from relative coordinates in 3D space从 3D 空间中的相对坐标中查找绝对坐标
【发布时间】:2014-05-21 07:37:18
【问题描述】:

我的问题很难解释,所以请多多包涵。我有一个带有 Forward、Right 和 Up 向量的随机对象。现在,想象一下这个特定的对象在所有三个轴上随机旋转。我将如何找到一个点相对于新旋转对象的真实坐标?

示例:

例如,假设彩色轴是“真实”轴,我将如何在给定其 Forward、Right 和 Up 向量(显然还有它的坐标)的情况下找到立方体的最前角。

我能想到的最好的方法是:

x=cube.x+pointToFind.x*(forward.x+right.x+up.x)
y=cube.y+pointToFind.y*(forward.y+right.y+up.y)
z=cube.z+pointToFind.z*(forward.z+right.z+up.z)

这有时会奏效,但由于明显的原因,当点的坐标之一为 0 时会失败。

简而言之,我不知道该怎么做,或者真的不知道如何准确地描述我正在尝试做的事情......这不是编程问题,而是一般数学问题。

【问题讨论】:

  • 如果你了解向量、矩阵和坐标变换,这是一个简单的问题:en.wikipedia.org/wiki/Transformation_matrix
  • 好吧,我没有使用旋转矩阵来执行旋转,因为这仅限于万向节锁(至少根据我的经验)。我只是使用旧时尚矢量旋转。主要问题是,除了基础知识之外,我对这些都不太了解。
  • 不限于云台锁。这些是一般的想法。

标签: math vector 3d coordinate-systems


【解决方案1】:

通常,您必须将对象的所有角一个接一个地投影到目标方向上(即计算两个向量的标量或点积),并记住提供最大值的点。

由于立方体的特殊结构,可以进行多种简化。您可以将目标方向矢量旋转到局部框架中。然后可以从其局部坐标的符号中读取最大投影的确定。如果坐标的符号为正,则通过将立方体坐标最大化为 1 来最大化标量积。如果符号为负,则通过将立方体坐标最小化为 0 来最大化标量积。

逆向旋转与用旋转矩阵的列(前、右、上)形成点积是一样的,所以

 result = zero-vector; //zero corner of the cube
 if( dot( target, forward ) > 0 )
      result += forward;

 if( dot( target, up ) > 0 )
      result += up;

 if( dot( target, right ) > 0 )
      result += right;

【讨论】:

  • 嗯,这似乎在做一些事情,尽管在我的实际设置中它有点令人震惊。也许我的解释有缺陷。在实际程序中,我有一个随机旋转的木板,我需要获取与木板方向相关的坐标的实际坐标集。另外值得注意的是,我已经打破了万向节锁,所以旋转不一定总是以相同的顺序,或者任何顺序(如果有区别的话)。
猜你喜欢
  • 2020-09-14
  • 2015-08-25
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多