用于规范化或规范化应该是矩形的多边形的算法

时间:2018-07-18 13:42:14

标签: geometry polygon

我的应用通过让用户将摄像机对准地板的拐角处,然后进行一堆数学运算,最终得到一个多边形来捕获房间的形状。

假定墙壁是直的(不是弯曲的)。大部分拐角是由彼此成直角的墙形成的,但在某些情况下可能并非如此。

根据用户对摄像机的指向精确度,我为拐角得出的(x,y)坐标可能超出实际拐角,或者在实际摄像机前面,或者不太可能在左侧或右侧。显然,在这种情况下,当我连接点时,会得到奇怪的平行四边形或菱形形状。参见示例。

我正在寻找一个程序或算法来规范化或规范化这些形状,前提是我们知道哪些角应该是直角。

我最初的尝试是寻找角度彼此接近的线段,将它们调整为相同的角度,然后重新计算顶点。但是,该算法被证明是不稳定的。

我目前的想法是找到最钝的角度(这是由错误地放置在实际角点之外的点引起的)或最尖锐的(由错误地放置在实际角点前方的点引起的) ,然后找到可以使其成直角的角点。但是,问题在于,诸如调整之类的操作可能会在其他角上产生副作用,例如使它们离直角更远。我感觉我需要一种可以吸收所有信息并立即对其进行优化/求解的算法-这是一种线性编程问题吗?但是我被困住了。

enter image description here

1 个答案:

答案 0 :(得分:0)

没有唯一的解决方案。

例如,取一条边的中点与两个相邻边的垂直线。这将给您两个新的角落。

或者从一条边的端点到其他边的垂直线。

或计算边缘端点的平均角度。使用该平均值和边缘的中点来计算新的角。

或者...

要获得最忠实的合规性,请捕获(或计算)每个角到其他三个角的距离。用这些距离构建三角形。然后,使用计算出的2个或3个三角形的角的坐标平均值。
产生的角度将不完全是90度,但是多边形将公平地代表房间。