我的问题很难解释,所以请耐心等待。我有一个带有Forward,Right和Up向量的随机对象。现在,想象一下这个特定的物体随机地在所有三个轴上随机旋转。我如何找到相对于新旋转对象的点的REAL坐标?
实施例:
例如,假设彩色轴是“实际”轴,我将如何找到立方体的最前角,给出其向前,向右和向上矢量(以及它的坐标)。 / 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时失败。
简而言之,我不知道该怎么做,或者真的如何准确地描述我正在尝试做的事情......这不是编程问题,而是更多的一般数学问题。
答案 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;