Algorithm 使用变换矩阵绕任意点旋转

Algorithm 使用变换矩阵绕任意点旋转,algorithm,graphics,matrix,computer-vision,linear-algebra,Algorithm,Graphics,Matrix,Computer Vision,Linear Algebra,我想使用变换矩阵绕任意点旋转点 所以方程是: p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy 但我想用矩阵变换的形式重写它,它看起来应该是(c=cos(θ),s=sin(θ)): 默认情况下,旋转矩阵使用原点作为旋转的中心。若要围绕任意点旋转,必须使用平移矩阵减去到原点的距离,进行旋转,然后再进行反向平移 如果我理解正确的

我想使用变换矩阵绕任意点旋转点

所以方程是:

p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy
但我想用矩阵变换的形式重写它,它看起来应该是(c=cos(θ),s=sin(θ)):

默认情况下,旋转矩阵使用原点作为旋转的中心。若要围绕任意点旋转,必须使用平移矩阵减去到原点的距离,进行旋转,然后再进行反向平移


如果我理解正确的话,首先我们从原始点减去,得到ot(0,0),然后围绕点(0,0)旋转,然后添加到结果点,但我认为第一和第三个矩阵必须交换?

你不应该交换第一和第三个矩阵,因为你是右乘一个列向量的点,所以序列不是从左到右,相反,它是从右向左的


你可以很容易地通过扩展右手矩阵来验证结果,右手矩阵将精确表示p'x和p'y的方程。

这个问题似乎离题了,因为它纯粹是关于。@Dukeling我认为它与计算机图形学有关。“我认为第一和第三个矩阵必须交换”。我想你可能是对的。找到答案的最快方法可能是通过实验:尝试不交换,然后尝试交换,看看哪一个看起来正确。@Kevin我尝试过(我用手将它们相乘),但理论上我不明白它为什么有效。(我不明白为什么矩阵不应该被交换)一旦你算出了数学,并且试图编写代码,然后它就变成了一个编程问题。目前我所看到的只是数学。