2015-10-04 68 views
0

我很抱歉问这个问题,因为我知道它已被问及答复很多次。我几乎花了几个小时学习了3d和涉及的数学。vector3d周围旋转vector3d

我有两个vector3ds。 A是(0,0,0),B是(0,0,-500)。我想围绕A旋转B一定的程度。

有人可以提供一个新手的答案?我所看到的解决方案都是我试图学习但尚未理解的领域。

+0

你不能周围的任何东西旋转而不指定_center ** rotation_ – Alnitak

+0

中心点的点**是向量A,我想向量B旋转围绕A一个特定的角度,同时保持它与矢量A的距离。对不起,如果这不是我的问题清楚。 –

+0

这还不清楚 - 旋转需要两件事 - 旋转中心_和旋转_轴_。你的'A'尽管你已经将它描述为一个矢量,实际上它就是_center point_,并且它是原点的事实简化了数学运算,因为你不需要多步变换或4x4同质坐标。但是,您仍然需要提供rotation_的_axis。请参阅https://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions – Alnitak

回答

1

在评论中,你已经阐明了你只是想旋转Y轴。这实际上只是一个2D旋转,X和Z坐标变化,但Y坐标不变。

因此:

x' = x cos(theta) + z sin(theta) 
z' = -x sin(theta) + z cos(theta) 

this SIGGRAPH link

+0

谢谢Alnitak,你的毅力令人钦佩。 45年大学毕业后,我的数学技能急剧萎缩。上面的回答至少让我看起来很熟悉,但我在某处弄糟了某些东西。 'code' farpoint.X = farpoint.X * cos(heading)+ farpoint.Z * sin(heading) farpoint.Z = -farpoint.X * sin(heading)+ farpoint.Z * sin(heading)'code'我翻译你的例子吧。感觉现在很无知...... –

+0

@BillMartini你必须在临时变量中存储新的X和Z坐标,否则'farPoint.X'的新值将在第二次计算中被错误地使用,而不是原来的值。另外,不要忘记,计算机的数学函数几乎肯定会使用弧度而不是度数。 – Alnitak

+0

好吧,这是有道理的,可能应该抓住了。我的头仍然从这些矩阵公式旋转。是的,上面的行将标题乘以常数转换为弧度。我刚刚开始玩OpenGL,并且能够在短时间内大量修改启动器示例,但我很快发现我的数学能力是一个表现障碍。感谢您的帮助。 –