我的问题来自于一个具体的应用:如果你想在现有的近矩形孔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
答案 0 :(得分:1)
这是我的头脑,所以需要注意。
首先旋转ABCD,使BC侧水平。然后,您希望将轴对齐的矩形拟合到旋转的形状中。最后,如果你需要E,F,G,H的坐标,你应该通过第一步中使用的角度的负值旋转矩形;如果你只需要宽度和高度,你可以从轴对齐的矩形中取出它们。
使轴对齐矩形:(我将使用名称A,B等旋转四边形的顶点)
找到最左边两个点(A和B)的最右边,并调用这个W,并且两个上部点(A和D)中的较低点调用此X.然后点E将是垂直的交点穿过W,水平线穿过X.
类似地,G是通过最右边两个点(D和C)的最左边的垂直线与通过两个较低点(B和C)的上部的水平线的交点,依此类推。