一种简单的算法,可以找到四边形内最大的矩形拟合

时间:2015-11-27 22:01:58

标签: python python-2.7 geometry measure shapely

我的问题来自于一个具体的应用:如果你想在现有的近矩形孔ABCD旁边安装一个矩形窗口EFGH,你想要有一个最大可能的窗口(你想建立一个金属框架用于现有的建筑物,开口几近完美,但不完全......)

我想在python 2.7中实现它,但首先我需要涵盖所有情况的协议 - 也许我不知道(形状上?)的python库可以帮助实现这一点吗?

A________D
| a    d |
|        |
|        |
| b    c |
B________C

E_______H
|       |
|       |
|       |
F_______G

你有一个近矩形的四边形ABCD(洞​​)

你知道所有方AB, BC, CD, AD和对角线AC, BD,因此感谢 Al Kashi定理和一些三角你也知道所有4个角a, b, c, d

如果矩形的边FG为<,如何计算最大矩形EFGH(您想要构建的窗口,它将是矩形)的宽度和高度,它可以适合四边形强>平行到四边形的BC边?

BC对应于开口的水平底部,FG - 窗口的底部 - 代表)。

A__________D
|E________H|
||        ||
||        ||
||        ||
||        ||
BF________GC

1 个答案:

答案 0 :(得分:1)

这是我的头脑,所以需要注意。

首先旋转ABCD,使BC侧水平。然后,您希望将轴对齐的矩形拟合到旋转的形状中。最后,如果你需要E,F,G,H的坐标,你应该通过第一步中使用的角度的负值旋转矩形;如果你只需要宽度和高度,你可以从轴对齐的矩形中取出它们。

使轴对齐矩形:(我将使用名称A,B等旋转四边形的顶点)

找到最左边两个点(A和B)的最右边,并调用这个W,并且两个上部点(A和D)中的较低点调用此X.然后点E将是垂直的交点穿过W,水平线穿过X.

类似地,G是通过最右边两个点(D和C)的最左边的垂直线与通过两个较低点(B和C)的上部的水平线的交点,依此类推。