python - 寻找四边形内最大矩形拟合的简单算法

标签 python python-2.7 geometry measure shapely

我的问题来自于一个具体的应用:如果你想在现有的近矩形孔 ABCD 内安装一个矩形 window EFGH,并且你想要尽可能大的 window (你想为一个 window build 一个金属框架)现有建筑的开口几乎是完美的,但并不完全......)

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

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

E_______H
|       |
|       |
|       |
F_______G

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

你知道所有边AB、BC、CD、AD,以及对角线AC、BD,这要归功于阿尔卡什定理还有一些三角学,您还知道所有 4 个角度 a、b、c、d

如何计算可以容纳在四边形中的最大矩形 EFGH(您想要构建的窗口,它将是矩形)的宽度和高度,如果矩形与四边形的边BC平行

(BC 对应于开口的水平底部部分,其上站立着 FG - 窗口的底部部分)。

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

最佳答案

这超出了我的想象,所以买者自负。

首先旋转ABCD,使BC边水平。然后您想要将轴对齐的矩形放入旋转的形状中。最后,如果您需要 E、F、G、H 的坐标,您应该将矩形旋转第一步中使用的角度的负值;如果您只需要宽度和高度,您可以从轴对齐的矩形中获取它们。

为了适应轴对齐的矩形:(我将使用名称 A、B 等作为旋转四边形的顶点)

找到最左边的两个点(A和B)中最右边的点,并将其称为W,以及两个上面的点(A和D)中较低的点,并将其称为X。那么点E将是垂直线的交点穿过 W 的线与穿过 X 的水平线。

类似地,G 是穿过最右边两个点(D 和 C)中最左边的垂直线与穿过下面两个点(B 和 C)中上方的水平线的交点,依此类推。

关于python - 寻找四边形内最大矩形拟合的简单算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33965306/

相关文章:

python - GoogleAppEngine 上的 Django : performance howto

java - 从三个点找到圆心的算法是什么?

python - Plotly:如何在 Excel 中嵌入完全交互式的 Plotly 图形?

python - 通过用列表替换单元格值来扩展 pandas 数据框

python - 海龟宽度和笔号的区别?

Android:如何判断触摸事件是否在圆圈内?

javascript - 如何将圆圈分成谷歌地图中的扇区?

regex - 如何改进我的 Python 正则表达式语法?

python - 为什么命名元组总是被 python 的 GC 跟踪?

python - 如何使用 ansible 'expect' 模块进行多个不同的响应?