矩形旋转30度鼠标拖动改变矩形,拖动改变矩形框是一条直线改变
时间: 2023-08-06 16:19:10 浏览: 46
如果您的矩形已经旋转了 30 度,并且希望通过鼠标拖动来改变矩形的大小,那么拖动的过程中矩形的四个顶点的坐标会发生变化。为了简化问题,我们可以将矩形的四条边延长,使其与坐标轴平行,这样矩形的大小变化就可以转化为拖动其中一条边。
具体来说,假设矩形的左上角点的坐标为 `(x1,y1)`,右下角点的坐标为 `(x2,y2)`,中心点的坐标为 `(cx,cy)`,矩形的长和宽分别为 `w` 和 `h`,矩形顶点的坐标可以表示为:
```
(x1, y1) = (cx - w/2*cos(theta) + h/2*sin(theta), cy - w/2*sin(theta) - h/2*cos(theta))
(x2, y2) = (cx + w/2*cos(theta) - h/2*sin(theta), cy + w/2*sin(theta) + h/2*cos(theta))
```
其中 `theta` 表示矩形的旋转角度(弧度制),`cos` 和 `sin` 是余弦函数和正弦函数,可以使用 `<cmath>` 头文件中的 `cos` 和 `sin` 函数计算。
如果我们希望通过拖动右下角点来改变矩形的大小,可以根据鼠标拖动的距离计算出新的右下角点坐标 `(x2',y2')`,然后根据矩形的中心点和新的右下角点坐标重新计算矩形的长和宽:
```
dx = mouse_x - x2
dy = mouse_y - y2
x2' = x2 + dx*cos(theta) + dy*sin(theta)
y2' = y2 - dx*sin(theta) + dy*cos(theta)
w' = 2*(x2' - cx)*cos(theta) + 2*(cy - y1')*sin(theta)
h' = 2*(cy - y1')*cos(theta) + 2*(x2' - cx)*sin(theta)
```
其中 `mouse_x` 和 `mouse_y` 分别表示鼠标当前的 x 和 y 坐标。注意,这个公式中的 `cos` 和 `sin` 函数使用的是拖动前矩形的旋转角度 `theta`。
最后,根据新的长和宽计算出新的左上角和右下角点的坐标,即可得到更新后的矩形。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)