2011-02-08 80 views
2

我有两个应用程序,一个创建一个矩形,输出它的左边,顶部,宽度,高度和旋转角度,另一个将矩形绘制到屏幕上。翻译一个矩形的坐标

Application1(作家)使用左上方作为旋转的原点。

Application2(阅读器)使用中心作为旋转的原点。

我想要得到一个deltaX和deltaY,以便我可以绘制矩形,旋转它关于原点,并使用内置的转换方法将矩形转换为位置。

我知道如下一个点旋转可以这样计算:

x' = x*cos(theta) - y*sin(theta) y' = x+sin(theta) + y*cos(theta)

但是,随着的是,我似乎无法找出需要的翻译方法的实际增量值。

在下图中,使用上/左作为旋转点绘制白色矩形,而使用中心作为旋转点绘制绿色矩形。我想把绿色的矩形移到白色的那个上。

(0,0)

Image

+0

翻译,等等,加入增量的矩形范围?或者你在谈论其他翻译? – 2011-02-08 08:00:52

+0

我的理解是翻译意味着通过deltaX,deltaY移动每个坐标。 – Alan 2011-02-08 08:05:44

回答

3

你必须通过翻译:

(Tx, Ty) = (-w/2 (1-cos theta) - h/2 sin theta), -h/2 (1-cos theta) - w/2 sin theta) http://tinyurl.com/6daesbm

发展:

  • 在应用程序1,左上顶点的矩形应该是(x1, y1)

  • 由于应用程序1围绕左上顶点的矩形,它们的转动位置相一致:(x1',y1') = (x1,y1)

  • 应用2使用中心的坐标,涉及在应用1至左上点如下:(xc2,yc2) = (x1,y1) + (w/2,h/2)

  • 为了计算中应用2旋转左上顶点,我们应用rotation matrixř(x2',y2') = (xc2,yc2) - R (w/2,h/2)

  • 所以平移向量Ť是(上文代方程式):enter image description here