任意轴周围的旋转和平移

时间:2011-06-12 03:49:32

标签: 3d

我试图弄清楚如何从一些样本问题中转换/移动任意坐标系。它让我很头疼..

好的,所以我在Q点坐着一架正常N的飞机。我想旋转它(就地),比如右边30度,向前移动K个单位。我有点弄清楚任意旋转是如何工作的,但我不确定我是否正确使用它。

说坦克位置是用3x3 M矩阵定义的。

所以要在任意空间旋转我会做这样的事情:

M =(Q ^ -1)(Rx ^ -1)(Ry ^ -1)(Rz)(Ry)(Rx)(Q)

其中Rz =围绕z轴旋转-30度

这是对的吗?

但是现在我也想沿着它的新方向移动K个单位。所以我必须在那里添加一个翻译矩阵。我认为它应该在Rz之前(不确定)

M =(Q ^ -1)(Rx ^ -1)(Ry ^ -1)(Tk)(Rz)(Ry)(Rx)(Q)

这是否正确?或者我弄错了?那里有数学天才吗?

谢谢:)

2 个答案:

答案 0 :(得分:0)

你的程序语言是什么?我想你可以找到一个允许你轻松实现的图书馆。通过c ++中的openCL示例。很多3D库已经存在,使用它们是非常有用的时间。

答案 1 :(得分:0)

如果您想要新的坦克位置,我可以提供帮助。我一直在做类似的事情,我也有时间这样做。如果你在3d中这样做,那么你可以将它应用到坦克的每个坐标。

首先,您需要假设坦克是世界的中心,即本地坐标。 然后你需要向前移动K个单位,所以它在(0,K)

然后你需要使用矩阵将点数转换为θ(以弧度表示)并产生:

newX = (x*math.cos(θ))-(y*math.sin(θ))
newY = (x*math.sin(θ))+(y*math.cos(θ))

(来自我自己使用的代码,所以我知道它有效)