代码之家  ›  专栏  ›  技术社区  ›  Syklis

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

  •  1
  • Syklis  · 技术社区  · 12 年前

    假设两个坐标系相互叠加,两者之间的旋转和比例不同:

    Example

    问题是将一个点从非旋转系统转换为另一个系统。我们得到的是四个角点组成一个矩形,每个角点的坐标都是已知的。我们也知道旋转差异,我想我至少也应该知道比例差异。如何将点从非旋转系统转换为旋转系统?我使用Unity3D。

    数学清晰度加分:)

    PS:我写这篇文章真的很晚了,为了更清楚,稍后再编辑。

    1 回复  |  直到 12 年前
        1
  •  4
  •   mvw    12 年前

    一些线性代数可以做到这一点:

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

    如果涉及转换,则需要向矩阵添加维度,请参见 homogenous coordinates .

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

    实例

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

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

    矩阵提示: Rotation Matrix , Scaling Matrix

    对于给定三维公式时导出二维公式:保持z=0或从每个矩阵中删除第三行和第三列。