当前位置:  开发笔记 > 编程语言 > 正文

绘制旋转矩形

如何解决《绘制旋转矩形》经验,为你挑选了2个好方法。

我意识到这可能更像是一个数学问题.

要为我的矩形绘制线条,我需要解决它们的角落.我在(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)作为中心点,但中心点很可能不在该位置.



1> lakshmanaraj..:

首先将中心点转换为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

我认为这适合您的解决方案.



2> Alnitak..:

如果'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上有其他转换的例子

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有