缩放矩形以适应旋转的矩形

问题描述 投票:0回答:1

我有 2 个矩形:红色和黑色及其尺寸。黑色矩形安装在红色矩形内(第一张图片)。我试图找到在将红色矩形旋转任意度数(此处为简单起见为 45 度)后计算黑色矩形尺寸的方法,以便它仍然适合红色矩形(第三张图像)。第二张图片显示了调整大小以适应红色矩形之前的黑色矩形。两个矩形的中心都在 (0,0)

我一直在看这个计算旋转矩形中最大的内接矩形但是这个解决方案只适用于黑色矩形是正方形。

有人能指出我正确的方向吗?谢谢。

math geometry trigonometry
1个回答
0
投票

设矩形中心为坐标原点(和旋转中心)。

大矩形尺寸为

2W
2H
,小矩形
2w
2h
.

小矩形的第一个顶点(

A
)初始坐标为
(w,h)
,拟合后变为
(k*w,k*h)
,第二个顶点(
B
):
(-k*w,k*h)
k
系数未知(我们只需要两个计算的顶点))

对于在范围

f
(和
0..Pi/2
)范围内的旋转角度
Pi..3*Pi/2
,可以包含
A
的大矩形的边,有起点(
F

px = W*cos(f)-H*sin(f)
py = W*sin(f)+H*cos(f)

和方向向量

dx = sin(f)
dy = -cos(f) 

这边有参数方程

x = px + t * dx
y = py + t * dy

我们可以写出边包含

A

的等式
k*w = px + t * dx
k*h = py + t * dy

并解决未知数

k, t

k1 = (px * dy - py * dx) / (w * dy - h * dx)

可能包含 B 的类似面

px = W*cos(f)-H*sin(f)   //same point
py = W*sin(f)+H*cos(f)

和方向向量

d2x = -cos(f)
d2y = -sin(f) 

-k*w = px + t * d2x
k*h = py + t * d2y

k2 = (px * d2y - py * d2x) / (-w * d2y - h * d2x)

我们需要从

k1
k2
中选择更小的有效值(也许有些结果只是无效的——负等)

f
在范围
Pi/2..Pi
(和
3*Pi/2..2*Pi
)与对应边的类似计算。

今晚对我来说太晚了,所以现在必须完成。

© www.soinside.com 2019 - 2024. All rights reserved.