rotating
x' = x*Cos(angle) - y*Sin(angle)
y' = x*Sin(angle) + y*Cos(angle)
Scaling
x' = x*sx
y' = y*sy
translate
x' = x+tx
y' = y+ty
但所有的公式都会做关于原点的事情。如果我想做关于质心点。(我有 (Cx,Cy) )。公式将是什么。
对不起,关于英语,我会多练习。
谢谢。
平移对象,使质心与原点重合,然后执行任何变换,然后将其平移回来。
根据您用于实现几何的内容,您可能能够在执行繁重的工作之前线性组合这些操作。或者您的库可能会提供具有不变点作为参数的操作版本,您可以为其指定质心。
但是与任何其他点相比,围绕质心进行变换并没有什么特别之处。
平移,使质心为原点,旋转,平移回来。也就是说,如果您有一个点的坐标,(x,y)=(Cx,Cy)+(xr,yr)
其中(x,y)
您要围绕质心旋转的点是质心(Cx,Cy)
的坐标,并且(xr,yr)
是该点相对于质心的位置。然后您可以旋转(xr,yr)
并将其添加到Cx,Cy)
.
这就是翻译的目的。平移将原点移动到一个新点(更准确地说,它建立了一个新坐标系,其原点与原始坐标系中指定的点重合)。在使用仿射矩阵变换的典型图形实现中,这个新原点将成为在它之后执行的任何旋转的中心。
如果你组合它们,你可以从方程中看到这一点。假设我们要放置一个围绕点 (200, 200) 旋转的图形。
// translate to new origin
x' = x + 200
y' = y + 200
// rotate by 90 degrees
x'' = x'*cos(90) - y'*sin(90)
= x*cos(90) + 200*cos(90) - y*sin(90) - 200*sin(90)
= x*cos(90) - y*sin(90) + 200
y'' = x'*sin(90) + y'*cos(90)
= x*sin(90) + 200*sin(90) + y*cos(90) + 200*cos(90)
= x*sin(90) + y*cos(90) + 200