我的问题很难解释,所以请忍受。我有一个带有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时失败。
简而言之,我不知道该怎么做,或者我真的不知道如何准确地描述我想做的事情。这不是编程问题,而是普通数学问题。
[通常,您必须在目标方向上一个接一个地投影对象的所有角(即,计算两个向量的标量或点积),并记住提供最大值的点。
由于立方体的特殊结构,可能有几种简化方法。您可以将目标方向矢量旋转到局部框架中。然后可以从其局部坐标的符号中读出最大投影的确定。如果坐标的符号为正,则通过将立方坐标最大化为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;