从3D空间中的相对坐标中查找绝对坐标

时间:2014-05-21 07:37:19

标签: math vector 3d relative coordinate-systems

我的问题很难解释,所以请耐心等待。我有一个带有Forward,Right和Up向量的随机对象。现在,想象一下这个特定的物体随机地在所有三个轴上随机旋转。我如何找到相对于新旋转对象的点的REAL坐标?

实施例: enter image description here

例如,假设彩色轴是“实际”轴,我将如何找到立方体的最前角,给出其向前,向右和向上矢量(以及它的坐标)。 / p>

我能想到的最好的是:

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时失败。

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

1 个答案:

答案 0 :(得分:0)

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

由于立方体的特殊结构,可以进行多种简化。您可以将目标方向矢量旋转到本地帧。然后可以从其局部坐标的符号读出最大投影的确定。如果坐标的符号为正,则通过将立方体坐标最大化为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;