我试图弄清楚如何从一些样本问题中转换/移动任意坐标系。它让我很头疼..
好的,所以我在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)
这是否正确?或者我弄错了?那里有数学天才吗?
谢谢:)
答案 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(θ))
(来自我自己使用的代码,所以我知道它有效)