如何在具有不同旋转的两个坐标系之间转换点

时间:2014-03-06 19:36:04

标签: math unity3d trigonometry

想象一下,两个坐标系统相互叠加,两者之间存在旋转和比例差异:

Example

问题是将一个点从非旋转系统转换为另一个。我们所拥有的是四个角点形成一个矩形,每个点都有两个系统的坐标。我们也知道旋转差异,我想我至少应该知道尺度差异。如何将点从非旋转系统转换为旋转系统?我正在使用Unity3D。

数学清晰度的额外要点:)

PS:我写这篇文章的时间太晚了,为了更清晰起见,稍后会进行编辑。

1 个答案:

答案 0 :(得分:4)

一些线性代数可以解决问题:

将每个操作表示为矩阵,并matrix multiply将它们组合成一个结果矩阵(为了提高效率)。

如果涉及翻译,则需要在矩阵中添加维度,请参阅homogenous coordinates

原因是映射是仿射映射,而不是线性映射。您可以忽略最终结果中的额外维度。这是将仿射映射嵌入线性映射的一种很好的方法,因此代数更容易。

实施例

M = M_trans * M_rot * M_scale
x' = M x

此处的顺序是从右到左:矢量x首先缩放,然后旋转,然后转换为矢量x'。 (使用列向量)。

矩阵上的提示:Rotation MatrixScaling Matrix

在给定3D公式时导出2D公式:保持z = 0或从每个矩阵中删除第3行和第3列。