2013-05-26 135 views
0

尽管互联网上有很多关于它的教程,但我找不到合适的解决方案!我画了一条线p1=(0,0); p2=(0,j),然后我做了一个translation(h,k)和一个rotation(a)。什么是p2的新坐标?转换矩阵 - 旋转和转换后的新点坐标

这里是我带着寻找变换矩阵后,但它似乎并不工作通式:

x' = (x*cos(a)) + (y*-sin(a)) + h 
y' = (x*sin(a)) + (y*cos(a)) + k 

所以我p2

x' = (j*-sin(ofDegToRad(a))) + h 
y' = (j*cos(ofDegToRad(a))) + k 

我在做什么错?

编辑:

上传与下面的答案的代码,但它仍然没有工作(?)。我已经把图片用的代码Here

小样本当我打印的价值,它说x = -141.5, y = 254.9

我想获得我行的终点(如果起始点为的中间窗口)

回答

3

您所显示的方程先进行旋转,然后是平移,这与您所说的顺序相反。如果你的翻译,然后再:

x' = x + h 
y' = y + k 

所以你P1' 是(H,K)和P2' 是(H,J + K)。然后旋转:

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

这意味着你的P1 '' 是

((h*cos(a)) - (k*sin(a)), (h*sin(a)) + (k*cos(a))) 

而且你的P2 '' 是

((h*cos(a)) - (j+k)*sin(a)), (h*sin(a)) + ((j+k)*cos(a))). 

这些都假设你开始与在了解原点(0,0)。

相反,如果我们首先要做的旋转,然后我们得到:

p1' = (0, 0) [when you rotate (0,0) you get (0,0)] 
p2' = (-j*sin(a), j*cos(a)) 

然后做的(H,K)翻译:

p1' = (h, k) 
p2' = (h - j*sin(a), k + cos(a)) 
+0

谢谢您的回答,但它是还是行不通。我在我的问题上添加了一小段示例代码,以防我没有正确询问问题! – drn

+0

我不清楚你到底在改变什么。如果您正在改变细分受众群而不仅仅是终点节点,那么您就可以完成这两点,这些点都是我在回答中编辑的。 – lurker

+0

我很抱歉打扰你,但仍然有问题。例如,如果我的p1在(0,0),然后我将它翻译为(150,150),然后旋转它1.7radians - 答案应该给我点(150,150)。然而,当我应用'x:(150 * cos(1.7)) - (150 * sin(1.7))'的公式时,结果是'-173.768'!对于y:'(150 * sin(1.7))+(150 * cos(1.7))= 129.42' – drn