想象一下,两个坐标系统相互叠加,两者之间存在旋转和比例差异:
问题是将一个点从非旋转系统转换为另一个。我们所拥有的是四个角点形成一个矩形,每个点都有两个系统的坐标。我们也知道旋转差异,我想我至少应该知道尺度差异。如何将点从非旋转系统转换为旋转系统?我正在使用Unity3D。
数学清晰度的额外要点:)
PS:我写这篇文章的时间太晚了,为了更清晰起见,稍后会进行编辑。
答案 0 :(得分:4)
一些线性代数可以解决问题:
将每个操作表示为矩阵,并matrix multiply将它们组合成一个结果矩阵(为了提高效率)。
如果涉及翻译,则需要在矩阵中添加维度,请参阅homogenous coordinates。
原因是映射是仿射映射,而不是线性映射。您可以忽略最终结果中的额外维度。这是将仿射映射嵌入线性映射的一种很好的方法,因此代数更容易。
实施例
M = M_trans * M_rot * M_scale
x' = M x
此处的顺序是从右到左:矢量x首先缩放,然后旋转,然后转换为矢量x'。 (使用列向量)。
矩阵上的提示:Rotation Matrix,Scaling Matrix
在给定3D公式时导出2D公式:保持z = 0或从每个矩阵中删除第3行和第3列。