我意识到这可能更像是一个数学问题.
要为我的矩形绘制线条,我需要解决它们的角落.我在(x,y)处有一个矩形中心,带有定义的宽度和高度.
要在顶部的非旋转矩形上找到蓝点(角度= 0),它是
UL = (x-Width/2),(y+height/2)
UR = (x+Width/2),(y+height/2)
LR = (x+Width/2),(y-height/2)
LL = (x-Width/2),(y-height/2)
如果角度不为0,我如何找到点?
提前致谢.
首先将中心点转换为0,0
X'= Xx
Y'= Yy
然后旋转A角
X''=(Xx)*cos A - (Yy)*sin A.
Y''=(Yy)*cos A +(Xx)*sin A.
再次将中心点转换回x,y
X''=(Xx)*cos A - (Yy)*sin A + x
Y''=(Yy)*cos A +(Xx)*sin A + y
因此,通过以下变换计算(X,Y)的所有4个点
X''=(Xx)*cos A - (Yy)*sin A + x
Y''=(Yy)*cos A +(Xx)*sin A + y
其中x,y是矩形的中心点,X是角点当角度为0时,即使角点也没有正确定义,正如我在评论中给出的那样.
替换后你会得到
UL = x + ( Width / 2 ) * cos A - ( Height / 2 ) * sin A , y + ( Height / 2 ) * cos A + ( Width / 2 ) * sin A UR = x - ( Width / 2 ) * cos A - ( Height / 2 ) * sin A , y + ( Height / 2 ) * cos A - ( Width / 2 ) * sin A BL = x + ( Width / 2 ) * cos A + ( Height / 2 ) * sin A , y - ( Height / 2 ) * cos A + ( Width / 2 ) * sin A BR = x - ( Width / 2 ) * cos A + ( Height / 2 ) * sin A , y - ( Height / 2 ) * cos A - ( Width / 2 ) * sin A
我认为这适合您的解决方案.
如果'theta'是逆时针旋转角度,那么旋转矩阵是:
| cos(theta) -sin(theta) | | sin(theta) cos(theta) |
即
x' = x.cos(theta) - y.sin(theta) y' = x.sin(theta) + y.cos(theta)
如果旋转点不在原点,则从原始坐标中减去旋转中心,执行如上所示的旋转,然后再次将旋转中心添加回来.
http://en.wikipedia.org/wiki/Transformation_matrix上有其他转换的例子