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))。 公式将是什么。
抱歉,关于英语,我会练习更多。
感谢。
答案 0 :(得分:2)
平移以使质心为原点,旋转,平移。也就是说,如果您有一个点(x,y)=(Cx,Cy)+(xr,yr)
的坐标,其中(x,y)
是您要围绕质心旋转的点,(Cx,Cy)
是质心的坐标,(xr,yr)
是相对于质心的点的位置。然后,您可以轮播(xr,yr)
并将其添加到Cx,Cy)
。
答案 1 :(得分:2)
翻译对象以使质心与原点重合,然后执行任何变换,然后将其翻译回来。
根据您用于实现几何体的内容,您可以在执行繁重操作之前线性组合这些操作。或者您的库可能提供操作的版本,并且不变点作为参数,您可以为其指定质心。
但是关于质心的转换并没有什么特别的,而不是其他任何一点。
答案 2 :(得分:1)
这就是翻译的目的。平移将原点移动到新点(更合适的是,它建立一个新的坐标系,其原点与原始坐标系中指定的点重合)。在使用仿射矩阵变换的典型图形实现中,这个新原点将成为其后执行的任何旋转的中心。
如果你把它们组成,你可以从方程中看到这一点。假设我们想要围绕点(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