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

问题描述 投票:1回答:1

我的问题很难解释,所以请忍受。我有一个带有Forward,Right和Up矢量的随机对象。现在,假设此特定对象在所有三个轴上随机旋转。如何找到相对于新旋转对象的点的REAL坐标?

示例:“在此处输入图像描述”

例如,假设有色轴是“真实”轴,给定多维数据集的正向,向右和向上向量(显然还有其坐标,我将如何找到它的最前角。

我能想到的最好的是:

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

简而言之,我不知道该怎么做,或者我真的不知道如何准确地描述我想做的事情。这不是编程问题,而是普通数学问题。

math vector 3d coordinate-systems
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.