Math 从三维空间中的相对坐标求绝对坐标

Math 从三维空间中的相对坐标求绝对坐标,math,vector,3d,coordinate-systems,Math,Vector,3d,Coordinate Systems,我的问题很难解释,所以请耐心听我说。我有一个随机对象,有正向、向右和向上向量。现在,想象这个特定的物体在所有三个轴上随机旋转。我将如何找到相对于新旋转对象的点的真实坐标 例如: 例如,假设有色轴是“真实”轴,在给定立方体的前向、右向和上向向量(显然还有坐标)的情况下,我如何找到立方体的最前角 我能想到的最好办法是: x=cube.x+pointToFind.x*(forward.x+right.x+up.x) y=cube.y+pointToFind.y*(forward.y+right.y+

我的问题很难解释,所以请耐心听我说。我有一个随机对象,有正向、向右和向上向量。现在,想象这个特定的物体在所有三个轴上随机旋转。我将如何找到相对于新旋转对象的点的真实坐标

例如:

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

我能想到的最好办法是:

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来最大化标量积

反向旋转与使用旋转矩阵的列(向前、向右、向上)形成点积相同,因此


如果你了解向量、矩阵和坐标变换,这是一个简单的问题:我不使用旋转矩阵来进行旋转,因为这仅限于万向锁(至少在我的经验中是这样)。我只是用老式的向量旋转。主要的问题是,除了基础知识之外,我对这些都不太了解。不限于万向节锁。这些都是一般的想法。嗯,这似乎是在做一些事情,虽然在我的实际设置中,它有点冒泡。也许我的解释有缺陷。在实际的程序中,我有一个随机旋转的木板,我需要得到与木板方向相关的一组实际坐标。另外,可能值得注意的是,我已经打破了万向节锁,所以旋转不一定总是以相同的顺序,或者任何顺序(如果这有区别的话)。
 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;